300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > mysql主从skip1677_解决字符集不同引起的主从同步异常1677报错问题

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

时间:2022-12-30 18:55:49

相关推荐

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

之前的一篇文章中,我们遇到了主从同步的一个问题,错误代码: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)’

二、分析原因

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

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

字符集为utf8mb4

在主库查看表的建表语句

主库表的字符集为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)

四、小结

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

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

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

如果您觉得本站对你有帮助,那么可以收藏和推荐本站,帮助本站更好地发展,在此谢过各位网友的支持。

转载请注明原文链接:解决字符集不同引起的主从同步异常1677报错问题

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。