[有许多使用MyISAM的表。我必须将其引擎更改为InnoDB;但是有以下困难:
1,这些表没有主键或唯一键,因此pt-ost工具无法添加触发器来对其进行更改。
2,因为他们使用MyISAM,如果我使用
“更改表table_name ENGINE = InnoDB”
或“添加列ID bigint(10)非空AUTO_INCREMENT,添加主键(id)”,
该表将被锁定很长一段时间,请稍等一下,使某些功能无法正常工作
PS:MySQL版本是5.6.17
您有几种选择来完成相同的迁移。例如:
您需要一种无需长时间锁定表即可将MyISAM转换为InnoDB的方法,并且表中没有主键?
鉴于这些限制,这是一个解决方案:
创建第二个数据库服务器,并使用filesystem snapshot使其成为主数据库的副本。
ALTER TABLE
在副本上将表转换为InnoDB。在复制副本上这将花费一些时间,但不会影响主副本,因为复制是异步的。
转换表后,应恢复复制。让复制赶上来,因此副本相对于其主要副本是最新的。
将所有应用和客户端切换为使用副本而不是主副本。
Voila!客户端现在正在使用相同的表,但它是InnoDB。
不再写以前的主要内容。