繁体   English   中英

如何在不锁定表的情况下在线将 MyISAM 更改为 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 的方法,而无需长时间锁定表,并且表中没有主键?

鉴于这些限制,这里有一个解决方案:

  1. 创建第二个数据库服务器,并使用文件系统快照使其成为主数据库服务器的副本。

  2. 在副本上执行ALTER TABLE以将表转换为 InnoDB。 这将在副本上花费时间,但不会影响主副本,因为复制是异步的。

  3. 转换表后,应恢复复制。 让复制跟上,所以副本相对于它的主要是最新的。

  4. 将所有应用程序和客户端切换为使用副本而不是主要应用程序。

瞧! 客户端现在使用同一个表,但它是 InnoDB。

不要再给以前的小学写信了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM