vlambda博客
学习文章列表

MySQL 主从relay日志损坏恢复

版本:

        

        MySQL-5.7.32+GTID


问题:

        

        MySQL主从同步由于relay日志损坏,导致从库复制报错error:1594。




问题分析:

        

        在遇到从库relay日志损坏时,重建从库是其中的一个修复办法之一,但该方法消耗的时间长,效率低,如果遇到数据量大的库,修复时间可能要1个小时以上。

        其实,对于从库relay日志损坏,完全可以不用重建从库,在基于GTID的主从同步中,复制进程开启master_auto_position的情况下,从库会将当前已经执行过的gtid集合发送给主库,主库接收到从库发送的gtid集合后,会在现有的binlog里面进行比对,将从库没有执行过的gtid发送给备库,从而保证数据的一致性。

MySQL 主从relay日志损坏恢复

        所以,在遇到relay日志损坏,只需要重置复制进程,重新拉取主库的日志就行。


问题解决:

    

        备份当前从库的同步状态信息。

        

show slave status\Gselect * from mysql.slave_relay_log_info\Gselect * from mysql. slave_master_info\G

MySQL 主从relay日志损坏恢复

       

        关闭复制进程。

stop slave;

MySQL 主从relay日志损坏恢复

        重置复制进程,会清空当前从库全部的relay log,不要使用reset slave all,因为在5.7.24之后,在master_info_repoistory=table的情况下,reset slave会将连接信息保留在内存里面,不需要重新设置change master,而reset slave all会清空全部的relay log以及配置信息。

MySQL 主从relay日志损坏恢复

        重置命令。

reset slave;

        重新开启复制进程,主从同步恢复。

start slave;