gpt4 book ai didi

mysql - 在不停机的情况下将完整数据库从 utf8mb3 (utf-8) 转换为 utf8mb4 的正确方法是什么?

转载 作者:可可西里 更新时间:2023-11-01 08:23:21 66 4
gpt4 key购买 nike

由于 MySQL 8.0 已经贬低了 utf8mb3(并且随后将在未来完全删除 utf8mb3 支持),什么是将完整数据库(在生产中)从 utf8mb3(utf-8)升级/转换为 utf8mb4 的正确方法,没有(或最小) ) 停机时间?

问题不在于转换,我知道存在多个用于此转换的脚本。我主要担心的是停机时间。是否可以在不停机的情况下实现这一目标?

最佳答案

假设没有 Slaves、8.0、没有 Triggers 和其他一些东西,我会推荐

pt-online-schema-change

它将使用新模式 (utf8mb4) CREATE TABLE,然后从现有表 (utf8 aka utf8mb3) 复制行,并使用触发器保持同步。最后的表上有一个简短的锁以完成和交换表。

您一次可以处理一张 table 。

文档:https://www.percona.com/doc/percona-toolkit/LATEST/pt-online-schema-change.html

也四处寻找;有时缩写为 pt-osc

有奴隶

使用 RDS 调查“故障转移”选项和速度。如果您可以控制故障转移,那么此方法可能快速、“简单”且可行。我假设它真的是Master-Slave,而不是Master-Master?

  1. 对于从属,让它从主复制。 (潜在问题:RBR 可能会在 utf8 复制到 utf8mb4 时发出尖叫声。这需要调查。)
  2. 对从站上的每个表执行 ALTER TABLE ... CONVERT TO ...
  3. 故障转移。
  4. 根据 RDS 拥有的工具,可能从新的 Master 重建 Slave 比在新的 Slave 上做 ALTERs 更好(这是老法师)。

建议您启动一些具有相同主从拓扑、版本和字符集的小型实例。然后尝试这些步骤。它不需要可能的行,但它确实需要 FOREIGN KEYs、触发器等,以防它们中的任何一个引起麻烦。 (请注意 pt-osc 如何与 FKs 有一些问题。)

关于mysql - 在不停机的情况下将完整数据库从 utf8mb3 (utf-8) 转换为 utf8mb4 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57038093/

66 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com