AWS RDS中MySQL只读副本升级至8.0.x后复制中断的排查与解决
AWS RDS MySQL 5.7升级8.0时复制中断问题处理
操作背景
- 基于AWS RDS中**5.7.44版本(已启用扩展支持)**的主库创建只读副本
- 将副本的数据库、表、列、视图、触发器及存储过程逐一修改为字符集
utf8mb4、排序规则utf8mb4_unicode_ci,直至升级检查器验证通过 - 此时5.7.44版本主库(混合使用
utf8/utf8_unicode_ci字符集)与副本可正常同步复制
环境差异与问题触发
- 测试/UAT环境:将副本引擎升级至8.0.28后,可顺利提升副本为主库,并创建新的8.0.28版本只读副本,全程无异常
- 生产环境:完成副本字符集调整后升级至8.0.28,复制立即中断,报错信息如下:
协调器因工作节点出错停止,最近一次失败:工作节点1执行事务'ANONYMOUS'时失败...
工作节点1在主日志mysql-bin-changelog.009309的end_log_pos 8019869处执行事务'ANONYMOUS'失败;表{TABLE NAME}的第4列无法从'char(3(bytes))'转换为'char(4(bytes) utf8mb4)',错误码:MY-013146
- 尝试调用RDS内置存储过程
mysql.rds_skip_repl_error跳过错误,但错误在两张表间交替出现,无法彻底解决 - 该问题对应MySQL Bug #83461(覆盖5.7.10至8.0.0版本的复制中断场景),低流量测试环境未触发,仅在生产高流量场景复现
- 5.7.x同版本间混合字符集配置下复制正常,重新准备副本耗时过长,希望避免停服升级
可行解决方案
参考MySQL Bug #78265的建议,在RDS参数组中设置slave_type_conversion参数值为ALL_NON_LOSSY(对应原生MySQL参数--slave-type-conversions=ALL_NON_LOSSY),配置完成后复制恢复正常。需注意,该Bug提及的差一错误在8.0.28版本中仍未修复。
内容的提问来源于stack exchange,提问作者johanmynhardt
相关产品推荐
相关产品推荐

