在生产环境中更改MySQL存储引擎的后果

3

我们有一个正在运行的应用程序,它在多线程环境中使用Mysql。我们有大约25个表,其中20个表使用InnoDb作为存储引擎,而5个表使用MyISAM作为存储引擎。

我们将把这5个表的存储引擎更改为InnoDB。如果在运行应用程序时进行更改,是否会引起问题?


在更改引擎时,表将被锁定。创建一个使用InnoDB引擎的新表,通过从MyISAM表中选择插入来填充它,然后重命名表可能更安全。 - Yuri Lachin
@YuriLachin - 注意:如果在此过程中进行插入/更新操作,它们将会丢失。 - Rick James
在转换过程中或之后可能会出现许多不太可能的问题:http://mysql.rjweb.org/doc.php/myisam2innodb - Rick James
1个回答

2
任何使用ALTER TABLE进行的需要复制表格的更改都会锁定表格。这对于应用程序来说是最重要的问题。任何应用程序都无法通过查询访问该表格。

这种锁定的持续时间取决于表格的大小、服务器的性能以及服务器承载的其他负载。

如果您使用像pt-online-schema-change这样的在线模式更改工具,可以在最小化停机时间的情况下进行更改。

另一种策略是在副本数据库实例上进行表格更改。在副本上,表格与主数据库实例上的存储引擎不同是可以的。您不需要关心表格被锁定,这只会使复制滞后,然后当更改完成时,复制应该会赶上。完成所有操作后,您可以将应用程序切换到使用副本,然后停用原始主数据库实例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接