mysql 对一个大表做在线ddl,怎么进行实施的才能尽可能降低影响

 我来答
酒深不怕巷子深
2017-03-08 · TA获得超过3270个赞
知道小有建树答主
回答量:267
采纳率:95%
帮助的人:242万
展开全部

可以采用中间表。假设你原始表名是“test”,那么步骤如下

  1. 建立一个和“test”一样表结构的新表,表名为test_new。create table test_new like test; 

  2. 将test表中数据拷贝到test_new中。insert into test_new select * from test;

  3. 在test_new上执行ddl操作

  4. 最后将执行过ddl更新的test_new表改名为test,原test表改名为test_old。Rename table test to test_old, test_new to test;

  5. 确认检查无误后drop掉test_old表

如果test表很大,在第二步会消耗很长时间,那么第二步可以以主键ID为准,采用分段导入,一次导入比如5000条数据,多次导入,这样不会对生产环境造成太大影响,假设test表上有自增主键“form_id",那么上面第二步命令变为:

insert into test_new select * from test where form_id between '1' and '5000';

insert into test_new select * from test where form_id between '5001' and '10000';

.

.

.

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式