唯's Blog

笔者是一个热爱编程的 Java 程序员。

0%

大表增加修改字段

在表数据量大的情况下,直接对表进行新增修改字段操作会导致锁表,这个过程可能需要很长时间甚至导致服务崩溃。因此需要另外一种方法

一般情况下,十几万的数据量,可以直接进行加字段操作。

  1. 将当前数据库表导出成文件

  2. 基于要操作的表创建一个临时表,执行要修改的操作,比如add column或者drop column

  3. 将文件导入新的临时表

注意不要用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 '

';

将表中数据导入到新的临时表

  1. 对新表进行修改新增字段操作 DDL

  2. 将在这期间旧表产生的数据 复制到 新表。(ID、时间)

  3. 将新表重命名, 旧表重命名为新表

1
2
3

rename table product to product_bak, product_copy to product;

注:导出 导入需要时间、因此步骤3的操作导入的数据可能不完整,这时需要通过一些机制来比对新老数据 (ID、时间)。找到差异数据、再导入新的临时表

不过还是会可能损失极少量的数据。

所以,如果表的数据特别大,同时又要保证数据完整,最好停机操作。

另外的方法

  1. 在从库进行加字段操作,然后主从切换

  2. 使用第三方在线改字段的工具