由于 MySQL 8.0 已弃用 utf8mb3(并且将来将完全删除 utf8mb3 支持),因此在没有(或最少)停机时间的情况下将完整数据库(生产中)从 utf8mb3 (utf-8) 升级/转换为 utf8mb4 的正确方法是什么?
问题不在于转换,我知道存在多个用于此转换的脚本。我主要担心的是停机时间。是否可以在不停机的情况下实现这一目标?
假设没有从站、8.0、没有触发器和其他一些东西,我会推荐
pt-online-schema-change
Run Code Online (Sandbox Code Playgroud)
它将CREATE TABLE使用新架构 (utf8mb4),然后从现有表(utf8 又名 utf8mb3)复制行,并使用触发器保持同步。最后在桌子上有一个短暂的锁,用于完成和交换桌子。
你会一次做一张桌子。
文档:https://www.percona.com/doc/percona-toolkit/LATEST/pt-online-schema-change.html
还到处寻找它;有时缩写pt-osc。
与奴隶
研究 RDS 的“故障转移”选项和速度。如果您可以控制故障转移,那么这种方法可能会快速、“简单”并且可行。我认为这真的是主从,而不是主主?
ALTER TABLE ... CONVERT TO ...对从站上的每个表执行此操作。ALTERs比在新的 Slave(旧的 Master)上重建更好。建议您使用相同的主从拓扑、版本和字符集启动一些小型实例。然后尝试以下步骤。它不需要很多行,但它确实需要FOREIGN KEYs,触发器等,以防它们中的任何一个引起麻烦。(注意 pt-osc 在 FK 方面存在一些问题。)