有一个问题,有一个很大的表,需要添加一列,有什么好的办法?

2020-10-22 16:55:46 +08:00
 twg

公司有些表数据量特别大,大概 3000w,现在需要增加一列,如果直接使用 alter,需要 10min 才能完成,这是完全不能接受的。所以除了新建表和停机,还有什么好的方法?

PS:数据库使用的事 MySQL 。

1362 次点击
所在节点    问与答
12 条回复
clf
2020-10-22 17:33:35 +08:00
读写频繁的话主从切换。

读写频率一般的话可以考虑一下 pt-osc,gh-ost 这两个工具增加字段。

最新的 MYSQL8 我记得是可以实现秒级添加字段。
qiayue
2020-10-22 17:36:16 +08:00
加列是一个很频繁的操作吗?
如果几个月一次的话,1 小时也可以接受。
twg
2020-10-22 17:46:31 +08:00
@lychs1998 我们用的是 mysql5.6 版本
twg
2020-10-22 17:47:21 +08:00
@qiayue 加列不是很频繁,但是会锁住表吧?1 个小时肯定不能接受。
skymei
2020-10-22 17:49:50 +08:00
同样有疑问,蹭个贴
x4400177
2020-10-22 17:54:22 +08:00
停服
CrazyEight
2020-10-22 17:57:08 +08:00
高性能 MySQL 讲到过:
( 1 )不想担风险:在一台不提供服务的机器完成新表的数据同步,再切换机器。
( 2 )锁住表,拷贝.frm 文件并做出对应修改,再用新的.frm 文件替换掉旧的.frm 文件。有风险。
twg
2020-10-22 17:57:19 +08:00
@x4400177 之前有一次就是停服来操作的。
redtea
2020-10-22 17:58:33 +08:00
借此机会分表吧,500 万就该分了。
CODEWEA
2020-10-22 18:01:10 +08:00
原表叫 a,复制一个表叫 b,然后给这个表 b 增加列,最后补全表 b 数据
CODEWEA
2020-10-22 18:02:34 +08:00
其实就是空间换时间
twg
2020-10-23 10:06:01 +08:00
@CODEWEA 但是这个是不是需要一个从 a 表切换到 b 表的过程?那么还需要修改相应代码所连接的表?

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

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

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

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

© 2021 V2EX