MySQL 主从relay日志损坏恢复
版本:
MySQL-5.7.32+GTID
问题:
MySQL主从同步由于relay日志损坏,导致从库复制报错error:1594。
问题分析:
在遇到从库relay日志损坏时,重建从库是其中的一个修复办法之一,但该方法消耗的时间长,效率低,如果遇到数据量大的库,修复时间可能要1个小时以上。
其实,对于从库relay日志损坏,完全可以不用重建从库,在基于GTID的主从同步中,复制进程开启master_auto_position的情况下,从库会将当前已经执行过的gtid集合发送给主库,主库接收到从库发送的gtid集合后,会在现有的binlog里面进行比对,将从库没有执行过的gtid发送给备库,从而保证数据的一致性。
所以,在遇到relay日志损坏,只需要重置复制进程,重新拉取主库的日志就行。
问题解决:
备份当前从库的同步状态信息。
show slave status\G
select * from mysql.slave_relay_log_info\G
select * from mysql. slave_master_info\G
关闭复制进程。
stop slave;
重置复制进程,会清空当前从库全部的relay log,不要使用reset slave all,因为在5.7.24之后,在master_info_repoistory=table的情况下,reset slave会将连接信息保留在内存里面,不需要重新设置change master,而reset slave all会清空全部的relay log以及配置信息。
重置命令。
reset slave;
重新开启复制进程,主从同步恢复。
start slave;