Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
应用程序在生产环境中运行时更改mysql存储引擎的后果_Mysql_Sql_Innodb_Storage Engines - Fatal编程技术网

应用程序在生产环境中运行时更改mysql存储引擎的后果

应用程序在生产环境中运行时更改mysql存储引擎的后果,mysql,sql,innodb,storage-engines,Mysql,Sql,Innodb,Storage Engines,我们有一个正在运行的应用程序,它在多线程环境中使用Mysql。我们有大约25个表,其中20个表使用InnoDb作为存储引擎,5个表使用MyISAM作为存储引擎 我们将把这5个表的存储引擎改为InnoDB。如果在运行应用程序的过程中对其进行更改,是否会导致一些问题您使用ALTER TABLE所做的任何需要表副本的更改都会锁定该表。这是应用程序最重要的问题。任何应用程序都无法通过查询访问该表 此锁定的持续时间取决于表的大小、服务器的性能以及服务器所承受的其他负载 如果您使用在线模式更改工具,例如,可

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


我们将把这5个表的存储引擎改为InnoDB。如果在运行应用程序的过程中对其进行更改,是否会导致一些问题

您使用
ALTER TABLE
所做的任何需要表副本的更改都会锁定该表。这是应用程序最重要的问题。任何应用程序都无法通过查询访问该表

此锁定的持续时间取决于表的大小、服务器的性能以及服务器所承受的其他负载

如果您使用在线模式更改工具,例如,可以在最短的停机时间内进行更改


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

更改引擎时,表将被锁定。使用InnoDB引擎创建新表可能更安全,从MyISAM表中填充“从选择中插入”,然后重命名表。@YuriLachin-警告:如果在执行此操作时进行插入/更新,这些插入/更新将丢失。在转换过程中/转换后可能会出现一些不太可能出现的问题: