在表数据量大的情况下,直接对表进行新增修改字段操作会导致锁表,这个过程可能需要很长时间甚至导致服务崩溃。因此需要另外一种方法
一般情况下,十几万的数据量,可以直接进行加字段操作。
将当前数据库表导出成文件
基于要操作的表创建一个临时表,执行要修改的操作,比如add column或者drop column
将文件导入新的临时表
注意不要用intsert into table_copy select * from table,
导成文件
1
2
3
4
5
select * from cms_gift_code into outfile '/usr/local/mysql/data/cms_gift_code.txt' fields terminated by ',' line terminated by '
';
将表中数据导入到新的临时表
对新表进行修改新增字段操作 DDL
将在这期间旧表产生的数据 复制到 新表。(ID、时间)
将新表重命名, 旧表重命名为新表
1 |
|
注:导出 导入需要时间、因此步骤3的操作导入的数据可能不完整,这时需要通过一些机制来比对新老数据 (ID、时间)。找到差异数据、再导入新的临时表
不过还是会可能损失极少量的数据。
所以,如果表的数据特别大,同时又要保证数据完整,最好停机操作。
另外的方法
在从库进行加字段操作,然后主从切换
使用第三方在线改字段的工具