如何在不使用锁定表的情况下将MyISAM联机更改为InnoDB

问题描述 投票:0回答:2

[有许多使用MyISAM的表。我必须将其引擎更改为InnoDB;但是有以下困难:

1,这些表没有主键或唯一键,因此pt-ost工具无法添加触发器来对其进行更改。

2,因为他们使用MyISAM,如果我使用

“更改表table_name ENGINE = InnoDB”

或“添加列ID bigint(10)非空AUTO_INCREMENT,添加主键(id)”,

该表将被锁定很长一段时间,请稍等一下,使某些功能无法正常工作

PS:MySQL版本是5.6.17

mysql innodb myisam
2个回答
0
投票

您有几种选择来完成相同的迁移。例如:

  • 像旧表一样创建新表。
  • 根据需要修改新表。
  • 在新表和旧表之间同步数据。
  • 切换重命名表。
  • 再次重新同步表

0
投票

您需要一种无需长时间锁定表即可将MyISAM转换为InnoDB的方法,并且表中没有主键?

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

  1. 创建第二个数据库服务器,并使用filesystem snapshot使其成为主数据库的副本。

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

  3. 转换表后,应恢复复制。让复制赶上来,因此副本相对于其主要副本是最新的。

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

Voila!客户端现在正在使用相同的表,但它是InnoDB。

不再写以前的主要内容。

© www.soinside.com 2019 - 2024. All rights reserved.