mysql 对一个大表做在线ddl,怎么进行实施的才能尽可能降低影响
可以采用中间表。假设你原始表名是“test”,那么步骤如下
建立一个和“test”一样表结构的新表,表名为test_new。create table test_new like test;
将test表中数据拷贝到test_new中。insert into test_new select * from test;
在test_new上执行ddl操作
最后将执行过ddl更新的test_new表改名为test,原test表改名为test_old。Rename table test to test_old, test_new to test;
确认检查无误后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';
.
.
.