改变表中的数据类型-mysql

改变表中的数据类型-mysql,mysql,Mysql,我需要修改200GB左右的大表(INNODB)。 正如我在许多博客中看到的,有人建议创建一个新结构,将表内容复制到新表并重命名表 如下所示 CREATE TABLE WorkingTableNew LIKE WorkingTable; ALTER TABLE WorkingTableNew MODIFY BigColumn VARCHAR(50); INSERT INTO WorkingTableNew SELECT SQL_NO_CACHE * FROM WorkingTable; ALTER

我需要修改200GB左右的大表(INNODB)。 正如我在许多博客中看到的,有人建议创建一个新结构,将表内容复制到新表并重命名表

如下所示

CREATE TABLE WorkingTableNew LIKE WorkingTable;
ALTER TABLE WorkingTableNew MODIFY BigColumn VARCHAR(50);
INSERT INTO WorkingTableNew SELECT SQL_NO_CACHE * FROM WorkingTable;
ALTER TABLE WorkingTable RENAME WorkingTableOld;
ALTER TABLE WorkingTableNew RENAME WorkingTable;
DROP TABLE WorkingTableOld;

但如果执行上述步骤,我们将如何处理新插入的数据到原始表中。因为许多进程更新记录并将其插入原始表


我在WorkingTable上有一个主触发器和8个从触发器,它们将捕获所有插入/更新并将副本存储在第三个表(WorkingTableTemp)中。在您使用WorkingTable删除并重命名WorkingTableNew之后,您可以将数据从WorkingTableTemp移动到WorkingTableTemp。您可以锁定该表一段时间吗?触发器无法使用,因为插入或批量更新原始记录。.5.6+InnoDB等更高版本中的MySQL支持在线DDL,在大多数情况下不会锁定该表@juergend和topicstarter。。p、 更新的MySQL版本使在线DDL支持变得更好,从而为MySQL版本提供正确的文档链接“但如果执行上述步骤,我们如何将新插入的数据处理到原始表中。因为许多进程更新记录并将其插入原始表。我有一个主服务器和8个从服务器,请建议我这样做。“因为您运行的是主服务器和从服务器,所以您可以从二进制日志中构建一个插入/更新/删除列表