• 欢迎访问DBA的辛酸事儿,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站
  • 欢迎大家关注博主公众号:DBA的辛酸事儿
  • 博文中若有错误的地方,请大家指正,大家的指正是我前进的动力

解决字符集不同引起的主从同步异常1677报错问题

MySQL SEian.G 2年前 (2019-03-09) 618次浏览 已收录 0个评论
文章目录[隐藏]

之前的一篇文章中,我们遇到了主从同步的一个问题,错误代码:1236,详细请看

开启GTID主从同步出现1236错误问题

今天,突然发现测试环境的主从同步关系断开了,报错代码:1677

一、问题错误信息

Last_SQL_Errno: 1677

Last_SQL_Error: Column 0 of table ‘wjq.test_profile’ cannot be converted from type ‘varchar(1536(bytes))’ to type ‘varchar(2048(bytes) utf8mb4)’

解决字符集不同引起的主从同步异常1677报错问题

二、分析原因

1、首先根据slave的同步状态解析一下binlog日志,看一下具体的报错信息时候所执行的语句(解析的是从库的relaylog),从binlog中发现,TABLE_CATALOG字段为VARSTRING(1536),

解决字符集不同引起的主从同步异常1677报错问题

2、从库检查报错表的建表语句

解决字符集不同引起的主从同步异常1677报错问题

字符集为utf8mb4

在主库查看表的建表语句

解决字符集不同引起的主从同步异常1677报错问题

主库表的字符集为utf8

 

三、解决方法

root@localhost [3308][(none)]>stop slave;
Query OK, 0 rows affected (0.00 sec)

root@localhost [3308][(none)]>alter table wjq.test_profile convert to character set utf8;          
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

root@localhost [3308][(none)]>start slave;
Query OK, 0 rows affected (0.00 sec)

解决字符集不同引起的主从同步异常1677报错问题

四、小结

从上面的报错中,我们发现了主从同步报错的根本原因:

1.、在建表语句在没有显示的指定字符集的时候,会根据库的默认字符集建表,所以主库的表test_profile的字符集是utf8

2.、建表语句在没有指定字符集的时候,binlog里面也不会记录字符集格式,导致在从库新建表的时候根据库级别的字符集选择了utf8mb4的字符集,新增记录就报错了

解决字符集不同引起的主从同步异常1677报错问题


如果您觉得本站对你有帮助,那么可以收藏和推荐本站,帮助本站更好地发展,在此谢过各位网友的支持。
转载请注明原文链接:解决字符集不同引起的主从同步异常1677报错问题
喜欢 (3)
SEian.G
关于作者:
用心去记录工作,用心去感受生活,用心去学着成长;座右铭:苦练七十二变,笑对八十一难
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址