在前面的几篇文章中,介绍了MYSQL主从复制相关的内容,包括主从环境搭建,具体文章可参考:
使用传统方式搭建MySQL 5.7 异步复制环境:http://www.seiang.com/?p=296
基于GTID方式搭建MySQL 5.7 主从复制环境:http://www.seiang.com/?p=334
最近遇到mysql开启gtid做复制时,主从同步断开,从库出现1236错误,导致同步无法进行,本文就这问题记录下处理步骤
1 | Last_IO_Errno: 1236 |
一般两种情况会出现以上现象
1.在主库上手动执行清除二进制日志文件
2.主库重启,重新同步时
解决方法:
1、在主库上执行以下命令,查询gtid_purged,记录下改值
1 | mysql> show global variables like '%gtid%' \G; |
2、在从库上执行以下命令,查询已经执行过的gtid即gtid_executed,记录下主库的值,本机的不需
1 | mysql> show global variables like '%gtid%' \G; |
3、在从库上执行以下命令停止同步线程及重置同步相关信息
1 | root@localhost [(none)]> stop slave; |
4、在从库上设置gtid_purged
该值有两个来源,一是在主库上查询的gtid_purged,二是在从库上查询的已经执行过的gtid_executed值(本机的就不需要,主库上gtid)
注意:一定记得加上从库上已经执行过的gtid,若只设置了主库上的gtid_purged,此时从库会重新拉取主库上所有的二进制日志文件,同步过程会出现其他错误,导致同步无法进行
1 | mysql> set @@global.gtid_purged='你的GITD值'; |
具体如下所示
1 | root@localhost [(none)]> set @@global.gtid_purged='dc299ff4-79e5-11e8-8d10-525400cf9369:1-2,dc299ff4-79e5-11e8-8d10-525400cf9369:1-64566'; |
注意:设置gtid_purged值时,gtid_executed值必须为空否则报错,该值清空的方法就是reset master命令
执行完,再次查看相关信息
5、重新开启同步
1 | mysql> change master to master_host='MASTER_IP',master_port=PORT,master_user='USERNAME',master_password='PASSWORD',master_auto_position=1; |
解决完要验证是否有数据丢失,我做完同步后有少量数据丢失!!!!
参考文档:
https://www.cnblogs.com/dukuan/p/8744295.html
https://cloud.tencent.com/developer/article/1796099
https://blog.51cto.com/hnr520/1883282