【问题标题】:consequences of changing mysql storage engine while application is running in production应用程序在生产中运行时更改 mysql 存储引擎的后果
【发布时间】:2018-05-07 08:42:49
【问题描述】:

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

我们将把这 5 个表的存储引擎改为 InnoDB。如果在运行应用程序期间更改它会导致一些问题

【问题讨论】:

  • 更换引擎时表格将被锁定。使用 InnoDB 引擎创建新表可能更安全,从 MyISAM 表中使用 insert from select 填充它,然后重命名表。
  • @YuriLachin - 注意:如果在此过程中进行了插入/更新,它们将会丢失。
  • 在转换期间/之后可能会出现许多不太可能出现的问题:mysql.rjweb.org/doc.php/myisam2innodb

标签: mysql sql innodb storage-engines


【解决方案1】:

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

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

如果您使用pt-online-schema-change 等在线架构更改工具,您可以在最短的停机时间内进行更改。

另一种策略是更改副本数据库实例上的表。表在副本上与在主服务器上具有不同的存储引擎是可以的。您不关心表被锁定,它只会使复制滞后,然后当更改完成时,复制应该赶上。完成后,您可以切换应用程序以使用副本,然后停用以前的主数据库实例。

【讨论】:

    猜你喜欢
    • 2011-07-10
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多