mysql 某表 1200w 行数据,29 个字段,想新增一个字段,是否可行?
mysql 某表 1200w 行数据,29 个字段,想新增一个字段,是否可行?
|
guijianshi01Dec 25, 2019
1
MySQL 版本多少,5.6 以后和以前两码事
|
|
ben1024Dec 25, 2019
2
可行,先增加一个无默认值的字段,在进行赋值。
有条件先锁表一下 |
|
menduoDec 25, 2019
3
可以啊,有什么不可以?
|
|
ksedzDec 25, 2019
4
使用 pt-online-schema-change
|
|
5
看了下,我司居然用的 MariaDB……
mysql> select version(); +-----------------+ | version() | +-----------------+ | 10.0.24-MariaDB | +-----------------+ 1 row in set (0.00 sec) |
|
6
@menduo 主要怕在执行过程中,性能下降,影响现有业务。
|
|
7
@guijianshi01 10.0.24-MariaDB
|
|
sghcelDec 25, 2019 via Android
8
主要的问题是要上表元数据锁,期间的阻塞所有读写请求
|
|
9
给楼主参考下,我有次是这样处理数据的:
copy TableA -> TableB (得到) TableB 完成所有操作 TableA 重命名为 TableC TableB 重命名为 TableA 读取 TableA 大于某个点的数据(时间,唯一 ID 等)写入 TableB。完成数据补充 讲白了就是用张中间表进行操作数据。然后把中间表重命名为原始表,再把原始表的数据进行补充完整。 表命名基本上不消耗时间,对业务基本上无影响。 如果你担心影响线上数据库,也可以进行表同步到其他环境,完成操作再弄数据。 |
|
xcstreamDec 26, 2019
10
1200w 不是很大找个晚上随便加一下就可以了
|
|
markgorDec 26, 2019
11
工具:pt-online-schema-change
手動: 源表複製架構去新表; 新表加字段; 源表加觸發器(插入更新刪除)同步觸發到新錶; 複製源表數據到新錶。 |
|
PonysDadDec 26, 2019 via iPhone
12
按 9 楼操作
|
|
securityCodingDec 26, 2019
13
增加临时表吧,不要直接在原表上面干
|
|
optionalDec 26, 2019
14
不带默认值和 not null, 1200w 也就几秒钟吧
|
|
leorealmanDec 26, 2019
15
1200w 而已,在线直接梭哈.
|
|
KymairDec 26, 2019
16
pt-online-schema-change 用的触发器,会对原库性能有一定影响(同步调用)
推荐 GitHub 出品的 gh-ost 是基于 binlog 的 https://github.com/github/gh-ost |
|
17
主要是新增的同时插入默认值
|
|
dai875939260Dec 26, 2019
18
这版本没啥好办法。新的版本好像会比较快 https://mariadb.com/kb/en/instant-add-column-for-innodb/,https://yq.aliyun.com/articles/670691 快速加列
|
|
yincrowDec 26, 2019
19
1200w 而已,我司百亿条记录的表,加个索引也就是 10 个小时
|