mysql 某表 1200w 行数据, 29 个字段,想新增一个字段,是否可行?

2019-12-25 19:46:06 +08:00
 deepmindlab

mysql 某表 1200w 行数据,29 个字段,想新增一个字段,是否可行?

5011 次点击
所在节点    程序员
19 条回复
guijianshi01
2019-12-25 19:53:57 +08:00
MySQL 版本多少,5.6 以后和以前两码事
ben1024
2019-12-25 19:54:18 +08:00
可行,先增加一个无默认值的字段,在进行赋值。
有条件先锁表一下
menduo
2019-12-25 19:54:56 +08:00
可以啊,有什么不可以?
ksedz
2019-12-25 20:05:53 +08:00
使用 pt-online-schema-change
deepmindlab
2019-12-25 20:14:19 +08:00
看了下,我司居然用的 MariaDB……
mysql> select version();
+-----------------+
| version() |
+-----------------+
| 10.0.24-MariaDB |
+-----------------+
1 row in set (0.00 sec)
deepmindlab
2019-12-25 20:16:20 +08:00
@menduo 主要怕在执行过程中,性能下降,影响现有业务。
deepmindlab
2019-12-25 20:16:40 +08:00
@guijianshi01 10.0.24-MariaDB
sghcel
2019-12-25 23:56:16 +08:00
主要的问题是要上表元数据锁,期间的阻塞所有读写请求
haishiwuyuehao
2019-12-26 01:07:14 +08:00
给楼主参考下,我有次是这样处理数据的:
copy TableA -> TableB (得到)
TableB 完成所有操作

TableA 重命名为 TableC
TableB 重命名为 TableA

读取 TableA 大于某个点的数据(时间,唯一 ID 等)写入 TableB。完成数据补充

讲白了就是用张中间表进行操作数据。然后把中间表重命名为原始表,再把原始表的数据进行补充完整。

表命名基本上不消耗时间,对业务基本上无影响。

如果你担心影响线上数据库,也可以进行表同步到其他环境,完成操作再弄数据。
xcstream
2019-12-26 08:55:48 +08:00
1200w 不是很大找个晚上随便加一下就可以了
markgor
2019-12-26 09:09:28 +08:00
工具:pt-online-schema-change
手動:
源表複製架構去新表;
新表加字段;
源表加觸發器(插入更新刪除)同步觸發到新錶;
複製源表數據到新錶。
PonysDad
2019-12-26 09:36:55 +08:00
按 9 楼操作
securityCoding
2019-12-26 09:37:16 +08:00
增加临时表吧,不要直接在原表上面干
optional
2019-12-26 10:10:32 +08:00
不带默认值和 not null, 1200w 也就几秒钟吧
leorealman
2019-12-26 10:25:48 +08:00
1200w 而已,在线直接梭哈.
Kymair
2019-12-26 12:07:33 +08:00
pt-online-schema-change 用的触发器,会对原库性能有一定影响(同步调用)

推荐 GitHub 出品的 gh-ost 是基于 binlog 的
https://github.com/github/gh-ost
deepmindlab
2019-12-26 14:01:49 +08:00
主要是新增的同时插入默认值
dai875939260
2019-12-26 14:25:09 +08:00
这版本没啥好办法。新的版本好像会比较快 https://mariadb.com/kb/en/instant-add-column-for-innodb/,https://yq.aliyun.com/articles/670691 快速加列
yincrow
2019-12-26 15:20:33 +08:00
1200w 而已,我司百亿条记录的表,加个索引也就是 10 个小时

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/632297

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX