mysql 动态更改架构

com*_*com 4 mysql schema

最近我遇到了一个问题,我的数据库变得非常大,每次我想更改架构时,我都不能让自己停机。

这使我开始寻找在线更改架构的解决方案。

1) pt-online-schema-change。非常有吸引力的项目,但老实说我很失望。下载了最新版本后,我不得不更改代码以使脚本正常工作。在开始脚本失败并显示错误消息。所有这些都是我在 Percona 的错误报告中找到的。在修补脚本完成它的工作后,希望很好。

2)橡木在线更改表。同样非常有趣的项目,facebook 在MySQL 的 Online Schema Change上提到它是好产品。明天我去试试。

如果您更有经验,请与我们分享您的意见。什么是最好和最可靠的产品?

Aar*_*own 5

我的第一个问题是,什么是“非常大”?根据对该问题的回答,可能还有其他方法可以优化您的迁移以减少它们花费的时间。

第二个问题是,您多久对实时应用程序进行架构更改?

如果在线模式更改工具对您不起作用,您可以从另一个角度尝试。在主动/被动模式下使用主/主复制以最大限度地减少停机时间。

以下假设您在主动/被动主/主配置中有 db1 和 db2...

  1. 在禁用二进制日志记录的 db2 上执行架构更改(在执行 ALTER TABLE 之前在会话中设置 SQL_LOG_BIN=0)
  2. 将您的应用程序指向 db2,从而使其成为活动服务器
  3. 在禁用二进制日志记录的情况下对 db1 执行架构更改
  4. 可选地,切换回 db1

为此,您的架构迁移必须向后兼容,无论如何在大多数应用程序中都是这种情况。这不是停机时间,但已经接近了。实际上,大多数应用程序可以容忍少量的定期停机维护。真正的零停机时间是非常昂贵的奢侈品。

要潜在地加速您的表更改,请考虑使用Percona Serverexpand_fast_index_creation设置。

此外,在线架构更改的另一个选择是Facebook 的 OSC