[英]How does table locking affect table engine change from MyISAM to InnoDB?
[英]How to change MyISAM to InnoDB online with out locking table
有很多表使用 MyISAM。 我必须将他们的引擎更改为 InnoDB; 但存在以下困难:
1、这些表没有主键和唯一键,所以pt-ost工具无法添加触发器来改变它。
2、因为他们使用MyISAM,如果我使用
“更改表 table_name ENGINE=InnoDB”
或“添加列 id bigint(10) NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY (id)”,
表会被锁定很长时间,这使得在线某些功能不起作用
PS:MySQL 版本为 5.6.17
您有几个选项可以完成相同的迁移。 例如:
您需要一种将 MyISAM 转换为 InnoDB 的方法,而无需长时间锁定表,并且表中没有主键?
鉴于这些限制,这里有一个解决方案:
创建第二个数据库服务器,并使用文件系统快照使其成为主数据库服务器的副本。
在副本上执行ALTER TABLE
以将表转换为 InnoDB。 这将在副本上花费时间,但不会影响主副本,因为复制是异步的。
转换表后,应恢复复制。 让复制跟上,所以副本相对于它的主要是最新的。
将所有应用程序和客户端切换为使用副本而不是主要应用程序。
瞧! 客户端现在使用同一个表,但它是 InnoDB。
不要再给以前的小学写信了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.