应用程序在生产环境中运行时更改mysql存储引擎的后果
我们有一个正在运行的应用程序,它在多线程环境中使用Mysql。我们有大约25个表,其中20个表使用InnoDb作为存储引擎,5个表使用MyISAM作为存储引擎应用程序在生产环境中运行时更改mysql存储引擎的后果,mysql,sql,innodb,storage-engines,Mysql,Sql,Innodb,Storage Engines,我们有一个正在运行的应用程序,它在多线程环境中使用Mysql。我们有大约25个表,其中20个表使用InnoDb作为存储引擎,5个表使用MyISAM作为存储引擎 我们将把这5个表的存储引擎改为InnoDB。如果在运行应用程序的过程中对其进行更改,是否会导致一些问题您使用ALTER TABLE所做的任何需要表副本的更改都会锁定该表。这是应用程序最重要的问题。任何应用程序都无法通过查询访问该表 此锁定的持续时间取决于表的大小、服务器的性能以及服务器所承受的其他负载 如果您使用在线模式更改工具,例如,可
我们将把这5个表的存储引擎改为InnoDB。如果在运行应用程序的过程中对其进行更改,是否会导致一些问题您使用
ALTER TABLE
所做的任何需要表副本的更改都会锁定该表。这是应用程序最重要的问题。任何应用程序都无法通过查询访问该表
此锁定的持续时间取决于表的大小、服务器的性能以及服务器所承受的其他负载
如果您使用在线模式更改工具,例如,可以在最短的停机时间内进行更改
另一种策略是对副本数据库实例上的表进行更改。表在副本上的存储引擎与在主副本上的存储引擎不同是可以的。您不关心表被锁定,它只会使复制落后,然后在完成更改后,复制应该会赶上。完成这些操作后,您可以将应用程序切换到使用复制副本,然后停用以前的主数据库实例。更改引擎时,表将被锁定。使用InnoDB引擎创建新表可能更安全,从MyISAM表中填充“从选择中插入”,然后重命名表。@YuriLachin-警告:如果在执行此操作时进行插入/更新,这些插入/更新将丢失。在转换过程中/转换后可能会出现一些不太可能出现的问题: