我们有一个当前正在运行的应用程序,它在多线程环境中使用 Mysql。我们有大约 25 个表,其中 20 个表使用 InnoDb 作为存储引擎,而 5 个表使用 MyISAM 作为存储引擎。
我们打算将这 5 个表的存储引擎更改为 InnoDB。如果在运行应用程序期间更改它会导致一些问题
我们有一个当前正在运行的应用程序,它在多线程环境中使用 Mysql。我们有大约 25 个表,其中 20 个表使用 InnoDb 作为存储引擎,而 5 个表使用 MyISAM 作为存储引擎。
我们打算将这 5 个表的存储引擎更改为 InnoDB。如果在运行应用程序期间更改它会导致一些问题
您进行的任何ALTER TABLE
需要表格副本的更改都会锁定表格。这是应用程序最重要的问题。任何应用程序的查询都无法访问该表。
这个锁的持续时间取决于表的大小、服务器的性能以及服务器承受的其他负载。
如果您使用pt-online-schema-change 之类的在线模式更改工具,您可以在最短的停机时间内进行更改。
另一种策略是更改副本数据库实例上的表。表在副本上与在主服务器上具有不同的存储引擎是可以的。您不关心表被锁定,它只会使复制滞后,然后当更改完成时,复制应该赶上。完成后,您可以切换应用程序以使用副本,然后停用以前的主数据库实例。