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