解决字符集不同引起的主从同步异常1677报错问题
Posted DBA的辛酸事儿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决字符集不同引起的主从同步异常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的字符集,新增记录就报错了
站点:www.seiang.com
长按二维码关注我哦!
以上是关于解决字符集不同引起的主从同步异常1677报错问题的主要内容,如果未能解决你的问题,请参考以下文章
生产排查 | MySQL主从同步时报错1864之slave_pending_jobs_size_max设置不当导致的主从失效案例