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