我们计划将MySQL数据库与混合utf8和latin1表迁移到本文中的新的utf8mb4字符集:https://mathiasbynens.be/notes/mysql-utf8mb4。
我们的服务器为5.7.22,活动数据库有数百个InnoDB表,大小为几GB,并且是在主/从复制中设置的。我已经成功地在测试服务器上的数据库副本上运行了转换脚本。大约需要3个小时才能完成。
我们正在为这个更新计划一个维护窗口-来自我们的应用程序的所有更新/查询将在此过程中被暂停。
我对此不太确定,因为我一直在阅读关于MySQL 8升级的文章(这是一个单独的、未来的项目),MySQL提到了执行大型操作,需要在复制禁用的情况下重新构建表:https://dev.mysql.com/doc/refman/8.0/en/replication-upgrade.html。但是,这可能只与版本8升级相关,而我们并不是同时进行升级。谢谢。
发布于 2019-02-19 18:22:36
首先,确保没有混淆任何latin1列。找到一个重音字母并执行SELECT HEX(col) ... --任何重音字母都应该显示为2个字节。例如,é是latin1十六进制E9和utf8mb4十六进制C3A9。
如果您看到C383C2A9,您就有了“双重编码”,现在您需要担心这个问题。
至于主人/奴隶..。
如果是大师(为了便于失败),那么考虑一次只做一次,从而避免超过短暂的停机时间(故障转移)。确保使用SET禁用会话的复制。
你在用ALTER TABLE ... CONVERT TO CHARACTER SET ...吗?(这可能是执行转换的唯一有效方法。)
有了主从和大量的停机时间,ALTER可以简单地进行复制.
https://dba.stackexchange.com/questions/230161
复制相似问题