公司有些表数据量特别大,大概 3000w,现在需要增加一列,如果直接使用 alter,需要 10min 才能完成,这是完全不能接受的。所以除了新建表和停机,还有什么好的方法?
PS:数据库使用的事 MySQL 。
1
clf 2020-10-22 17:33:35 +08:00
读写频繁的话主从切换。
读写频率一般的话可以考虑一下 pt-osc,gh-ost 这两个工具增加字段。 最新的 MYSQL8 我记得是可以实现秒级添加字段。 |
2
qiayue 2020-10-22 17:36:16 +08:00
加列是一个很频繁的操作吗?
如果几个月一次的话,1 小时也可以接受。 |
5
skymei 2020-10-22 17:49:50 +08:00
同样有疑问,蹭个贴
|
6
x4400177 2020-10-22 17:54:22 +08:00
停服
|
7
CrazyEight 2020-10-22 17:57:08 +08:00
高性能 MySQL 讲到过:
( 1 )不想担风险:在一台不提供服务的机器完成新表的数据同步,再切换机器。 ( 2 )锁住表,拷贝.frm 文件并做出对应修改,再用新的.frm 文件替换掉旧的.frm 文件。有风险。 |
9
redtea 2020-10-22 17:58:33 +08:00 via iPhone
借此机会分表吧,500 万就该分了。
|
10
CODEWEA 2020-10-22 18:01:10 +08:00
原表叫 a,复制一个表叫 b,然后给这个表 b 增加列,最后补全表 b 数据
|
11
CODEWEA 2020-10-22 18:02:34 +08:00
其实就是空间换时间
|