使用MySQL5.7的半同步复制时,发现主库一个简单的写操作会执行1 s,通过显示配置文件分析是半同步导致。
查看主从日志,发现报错如下:
主库报错:
2018 - 05 - 21 - t05:34:06.955592z 0(错误)/usr/local/mysql-5.7.21-linux-glibc2.12-x86_64/bin/mysqld:得到一个错误阅读通信数据包
2018 - 05 - 21 t05:34:06.967776z 21[注]而初始化线程转储为奴隶UUID & lt; 26 b1280d - 2125 - 11 - e8 b5a8 - 005056 - ac3676>,发现僵尸转储线程具有相同的UUID。主人是杀死僵尸转储线程(20)。
2018 - 05 - 21 t05:34:06.967864z 20[注]停止semi-sync binlog_dump到奴隶(server_id: 12233306)
2018 - 05 - 21 t05:34:06.967954z 21[注]开始binlog_dump master_thread_id (21) slave_server (12233306), pos (mysql-bin。000004年,484年)
2018 - 05 - 21 t05:34:07.957450z 21[注]开始semi-sync binlog_dump奴隶(server_id: 12233306), pos (mysql-bin。000004年、484年)
从库报错
<人力资源/>
2018 - 05 - 21 t05:54:29.787788z 4错误(错误)从服务器读取包频道& # 39;& # 39;:失去了连接到MySQL服务器在查询(server_errno=2013)
2018 - 05 - 21 t05:54:29.787880z 4[注]奴隶I/O的线程:阅读日志事件失败,重新连接重试,日志& # 39;mysql-bin.000004& # 39;位置484频道& # 39;& # 39;
2018 - 05 - 21 t05:54:29.787908z 4[警告]将MySQL用户名或密码信息存储在主信息存储库是不安全的,因此不推荐。请考虑使用的用户名和密码连接选项开始奴隶;看到& # 39;开始奴隶语法# 39;MySQL手册中获得更多信息。
经过初步分析,只有半同步才会触发该问题,那么应该是从库返回的ACK包出现错误,主库无法解析,最后经过调整参数,确认半同步下,只有从库开启参数slave_compressed_protocol才会出现该问题,官方默认参数为。
即出问题的条件,a.5.7,b。从库slave_compressed_protocol=1 c。主从半同步
该问题确认为5.7错误,已经有人提了,不过网上的案例还是很少。
https://bugs.mysql.com/bug.php?id=85382
上实验图:
正常