在网上查了资料后,发现没有特别完美的方案,在此请教老哥们有没有别的方法。
网上资料解决方案如下: 1.创建关联表,把字段加到关联表,然后在代码中手动关联(需要修改业务代码) 2.创建新的临时表,把数据复制过去,需要停机操作,不然有可能数据不一致(需要停机) 3.使用 pt-online-schema-change 工具(没用过,不清楚)
有没有方法可以不停机也能完美加上字段 /索引的呢,老哥们
1
MeteorCat 2021-03-15 19:07:22 +08:00 via Android
我们是停机维护的,找个维护时间点处理一般,这种稳定安全点,不需要什么骚操作
|
2
killergun 2021-03-15 20:25:27 +08:00
先分库分表?
|
3
sagaxu 2021-03-15 20:51:43 +08:00 via Android
mysql 5.6 都发布 8 年了,怎么还在用 5.5 以下版本?
|
4
bagheer 2021-03-15 22:19:52 +08:00
我有一个 3 亿的表,停掉建新表导入数据是最稳的,不要使用 3.
|
5
Jooooooooo 2021-03-15 22:22:19 +08:00
建新表, 复制数据, rename.
|
6
Ptu2sha 2021-03-15 23:43:41 +08:00
不能停的话应该新建表 代码同步数据
|
7
luckyrayyy 2021-03-15 23:56:29 +08:00 via iPhone
为啥弄个新表一定要停机,新数据双写,老数据慢慢同步过去,几个小时够了吧?
|
8
sagaxu 2021-03-16 00:04:57 +08:00 via Android
@luckyrayyy 问题是 innodb 加字段加索引不会影响正常读写,为什么要停机?
|
9
ksedz 2021-03-16 00:11:56 +08:00
mysql 的话 pt 可以
原理是建一个新表,在原表上加增删改的触发器,数据修改会自动同步到新表 新表开始跟原表的数据,跟上进度后直接 rename 替换原表,达到不停机加索引的目的 非常好用,有进度显示,失败也没事,把新表删了(谨慎)重来就行 注意剩余磁盘空间大于原表 |
10
securityCoding 2021-03-16 02:24:42 +08:00 via Android
已经支持 online ddl 啦
|
11
shakoon 2021-03-16 09:07:05 +08:00
|
12
wakzz 2021-03-16 09:25:04 +08:00
@securityCoding online ddl 对于小表可以,千万甚至上亿的大表慎用。
我们公司之前有个千万级的单表,用 online ddl 加索引后前十来分钟索引正常添加,看监控 IO 和 CPU 占用比较高,但十来分钟后 mysql 突然无响应,然后软重启,所有 mysql 线程被中断,客户端 TCP 连接全部中断,索引也加失败了。 这个现在能在 5.7 的版本稳定复现(没试过 8.0 ),所以对大表的索引操作还是需要谨慎使用 online ddl 的,这玩意不是银弹。 |