mysql 某表 1200w 行数据,29 个字段,想新增一个字段,是否可行?
1
guijianshi01 2019-12-25 19:53:57 +08:00
MySQL 版本多少,5.6 以后和以前两码事
|
2
ben1024 2019-12-25 19:54:18 +08:00
可行,先增加一个无默认值的字段,在进行赋值。
有条件先锁表一下 |
3
menduo 2019-12-25 19:54:56 +08:00
可以啊,有什么不可以?
|
4
ksedz 2019-12-25 20:05:53 +08:00
使用 pt-online-schema-change
|
5
deepmindlab OP 看了下,我司居然用的 MariaDB……
mysql> select version(); +-----------------+ | version() | +-----------------+ | 10.0.24-MariaDB | +-----------------+ 1 row in set (0.00 sec) |
6
deepmindlab OP @menduo 主要怕在执行过程中,性能下降,影响现有业务。
|
7
deepmindlab OP @guijianshi01 10.0.24-MariaDB
|
8
sghcel 2019-12-25 23:56:16 +08:00 via Android
主要的问题是要上表元数据锁,期间的阻塞所有读写请求
|
9
haishiwuyuehao 2019-12-26 01:07:14 +08:00 3
给楼主参考下,我有次是这样处理数据的:
copy TableA -> TableB (得到) TableB 完成所有操作 TableA 重命名为 TableC TableB 重命名为 TableA 读取 TableA 大于某个点的数据(时间,唯一 ID 等)写入 TableB。完成数据补充 讲白了就是用张中间表进行操作数据。然后把中间表重命名为原始表,再把原始表的数据进行补充完整。 表命名基本上不消耗时间,对业务基本上无影响。 如果你担心影响线上数据库,也可以进行表同步到其他环境,完成操作再弄数据。 |
10
xcstream 2019-12-26 08:55:48 +08:00
1200w 不是很大找个晚上随便加一下就可以了
|
11
markgor 2019-12-26 09:09:28 +08:00
工具:pt-online-schema-change
手動: 源表複製架構去新表; 新表加字段; 源表加觸發器(插入更新刪除)同步觸發到新錶; 複製源表數據到新錶。 |
12
PonysDad 2019-12-26 09:36:55 +08:00 via iPhone
按 9 楼操作
|
13
securityCoding 2019-12-26 09:37:16 +08:00
增加临时表吧,不要直接在原表上面干
|
14
optional 2019-12-26 10:10:32 +08:00
不带默认值和 not null, 1200w 也就几秒钟吧
|
15
leorealman 2019-12-26 10:25:48 +08:00
1200w 而已,在线直接梭哈.
|
16
Kymair 2019-12-26 12:07:33 +08:00
pt-online-schema-change 用的触发器,会对原库性能有一定影响(同步调用)
推荐 GitHub 出品的 gh-ost 是基于 binlog 的 https://github.com/github/gh-ost |
17
deepmindlab OP 主要是新增的同时插入默认值
|
18
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 快速加列
|
19
yincrow 2019-12-26 15:20:33 +08:00
1200w 而已,我司百亿条记录的表,加个索引也就是 10 个小时
|