如何在最短的停机时间内从 MySQL 迁移到 MariaDB 或 Percona?

Dan*_*ier 3 mysql mariadb percona mysql-5.1

我想将我的 MySQL 5.1 数据库迁移到以下数据库之一:MariaDB、PerconaDB 或 MySQL 5.6

有没有办法在不停机或尽可能减少停机时间的情况下执行此操作?如何?

数据库大小为 40GB,每分钟有数百次写入和读取。有 10 台服务器连接到它,它现在是一个 sing db 服务器。

jyn*_*nus 5

为了在(几乎)没有停机的情况下执行升级,您需要添加一些额外的基础设施以实现高可用性。执行此操作的最常见方法是借助 MySQL 内置复制:

  1. 使用原始主站数据的克隆设置从站。通过在同一硬件上创建新的单独实例,在同一节点内设置主从复制在技术上是可能的。但是,我建议 - 在一般情况下 - 如果可能,将其设置在单独的节点上。如果服务器非常繁忙,则尤其如此。
  2. 放下你的奴隶并离线执行升级过程,没有压力(主人,你原来的mysql,正在为你的应用程序服务)。然后将其升级到 MySQL/Percona/MariaDB。
  3. 重新启动您的从站,为从主站到从站的切换做准备(有几种方法可以做到这一点,但如果它不是一个稳定的事情,可以在应用程序的连接器/驱动程序配置等地方完成)。在这个阶段有很多事情要做,比如等待从设备滞后变为 0、验证测试和预热从设备的缓冲池等。
  4. 将您的主服务器设置为只读并等待所有更改应用于从服务器(如果您已做好足够的准备,这应该几乎立即完成)。这是在服务器上产生不可用的唯一部分。这是因为从站与主站不是 100% 同步的。如果 1 秒的不可用时间对您来说太多了,那么还有其他同步复制的替代方案(如半同步和 galera)。
  5. 将您的从站设置为“活动服务器”。恭喜,您现在可以使用 5.6 进行生产了
  6. 如果你想让你的原始从站成为最终的生产服务器,你可以对旧的主站(现在应该是新的从站)重复步骤 2-5

这里有很多事情需要考虑:从 5.1 升级到 5.6(即使你遵循上游 MySQL,如果你改变供应商更有理由)并不能保证它会顺利进行。您将遭受配置更改、查询优化器更改、SQL 语法更改。您可能希望同时进行负载和验证测试。有很多工具可以从您自己的日志(mysqlslap、percona 播放)中进行负载测试,但我建议至少使用pt-upgrade进行兼容性测试。您可能还想密切关注MySQL 文档的“新增功能,以利用 MariaDB/Percona 的新功能及其等效功能。

即使您决定不使用复制(进行冷重启)来执行升级,它仍然是一个非常有用的工具,可以预先测试新的服务器版本。

关于升级本身,5.1 -> 5.6 本身可以以二进制格式完成(我建议通过 5.5 转换以更容易修复错误),但如果您没有大量数据,我建议您或者考虑是否进行逻辑导出/import 是可行的,以避免以后的重建。这在很大程度上取决于您的实际设置。

最后一句话:记得先备份,后执行mysql_upgrade

查看最近的一篇关于 GitHub 如何执行类似过程的数据中心迁移的文章。