线上从库报错,原来库字符集为utf8mb4,后在RENAME表后重新添加为utf8,跑了一段时间提示1677. slave_type_conversions来控制复制中主从结构不一致的处理。 该怎么解决?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
针对您线上从库报错的问题,该错误提示与字符集不一致及slave_type_conversions
配置相关。根据您的描述,原库字符集为utf8mb4,但在RENAME表操作后重新设置为了utf8,且在一段时间运行后遇到复制结构不一致的警告,需要通过slave_type_conversions
来控制。以下是解决步骤:
问题确认:
可能原因:
解决步骤:
检查并调整字符集:
ALTER DATABASE your_database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE your_table_name CHANGE your_column_name your_column_name your_data_type CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
使用slave_type_conversions:
slave_type_conversions
参数来控制不同数据类型或字符集在复制过程中的转换。您需要在从库的配置中添加此参数,以允许或指定如何进行必要的转换。例如,如果仅需处理字符集相关的转换,可以这样设置:CHANGE MASTER TO ... SLAVE_TYPE_CONVERSIONS='column_name=utf8mb3_to_utf8mb4';
这里column_name
应替换为实际需要转换的列名,而utf8mb3_to_utf8mb4
指定了从utf8mb3到utf8mb4的转换规则。请根据实际情况调整。
重启从库服务:完成上述配置后,重启MySQL从库服务使设置生效。
注意事项:
后续监控:
通过以上步骤,您可以尝试解决由于字符集不一致导致的复制错误问题。如果问题依然存在,建议深入分析从库的错误日志,并考虑联系阿里云技术支持获取进一步帮助。