MySQL 主从同步报1236错误
MySQL GTID主从模式下断链出现error 1236错误,详细内容如下:
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Slave has more GTIDs than the master has, using the master's SERVER_UUID. This may indicate that the end of the binary log was truncated or that the last binary log file was lost, e.g., after a power or disk failure when sync_binlog != 1. The master may or may not have rolled back transactions that were already replica'
分析处理
出现此错误的原因是Slave的GTID大于Master的GTID,这种问题的出现往往是在Slave执行了DML操作,下面总结两种修复主从的方式。
方法一
在主从的GTID差值很小的情况下可以等待Master的GTID追上Slave之后重新启动主从,这样可能导致主从数据不一致,主从恢复后需要手动恢复数据。在小型数据库数据量很小的情况下可以考虑使用。除了等待Master自己追平GTID之外,也可在Master手动跳过GTID。
#停掉主从,虽然复制现在本身是停止状态 STOP SLAVE; #设置需要跳过的GTID SET @@SESSION.GTID_NEXT='7efd338e-ee5e-11ea-8957-000c29bed658:554472'; #设置空事务 BEGIN; COMMIT; #恢复事物号 SET SESSION GTID_NEXT = AUTOMATIC; START SLAVE;
方法二
如果此时的主从GTID值差值很大时,将考虑重新配置主从,这样可以保证主从数据保持在一直状态。
1、stop slave 停掉主从,虽然复制现在本身是停止状态
2、如果主库没有备份的情况下需要锁表备份数据,应用空闲时间处理。
FLUSH TABLES WITH READ LOCK;
3、检查主库binlog号及pos点
4、使用mysqldump导出数据库,并将备份文件转入主库服务器。
mysqldump -u root -ppassword --opt -R database_giao > database_giao.sql
5、回到主库解锁表:UNLOCK TABLES
6、登录到从服务器,恢复需要同步的数据库
mysql -uroot -p database_giao < database_giao.sql
7、登录从库mysql,一次执行一下命令即可。
slave stop; reset slave; change master to master_host='主机IP',master_user='master',master_password='master',master_log_file='mysql-bin.000001',master_log_pos=123936801; slave start; #查看主从 show master status;