0、背景:
需要对一个千万行数据的表新增字段,具体操作:
a、dump 数据
b、delete 数据
c、alter 表
MySQL 版本为5.5,alter表时MySQL会锁表;表行数虽多,当数据较少,每行数据平均2KB。
1、dump 数据
注意:
默认会锁表,需要增加参数 --skip-opt -q
单个dump文件太大需要调整配置: max_allowed_packet(单次最大传输量)
-w 后可添加dump 筛选条件
mysqldump --skip-opt -q -uroot -ppwd -hlocalhost databasename table_name -w ""
我使用脚本处理,条件是按表某日期字段分割
(附shell时间转换:date -d "2017-04-30 00:00:00" + %s)
结果:同时处理了两个表,数据21G,耗时15h
2、delete 数据
delete from table_name where xxx;
删除了900W行数据,耗时50min
3、alter 表
alter table table_name xxx;
修改180W行数据,耗时8min
4、数据恢复
mysql -uroot -ppwd database_name < dump_file