记一次MySQL主从同步异常故障处理案例分析

 1 、故障描述

某次某用户,在对某业务系统所在的 MySQL 数据库进行部署备份脚本时,发现 MySQL 数据库主从同步异常。经过排查,可以从日志中明确获取到 主从同步故障时间点为 2021-07-15

主库 position

从库 pos ition

    

    Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).


 2 、根因分析

主库的 pos ition 小于从库的 p osition ,说明主库运行过程中,曾执行 r eset master 的操作,导致从库无法识别主库的偏移量,从而导致主从的 同步失败。

而日志中显示的是:主从的 s erver id 是一致的,因此查看主从的配置。


分析可得出,主从的 server  id 配置上是正确的。

 3 、解决方案

基于以上的分析结论,并且 MySQL 的数据库的数据量较小,因此建议重新搭建主从数据库,从而保障数据库的高可用。

1.  主库锁表、执行数据库全备

mysqldump -uroot -p' xxx ' -S / xxx /mysql/run/my3306.sock --single-transaction --master-data=2 --all-databases >

/tmp/mysql_fullbak_20220425_bak

2.  从库重置主从同步配置

           stop slave;

           reset slave all;

           SET SQL_LOG_BIN=0;

           DROP DATABASE sys;

           SET SQL_LOG_BIN=1;

           mysql_upgrade

3.  从库重新同步

           mysql -uroot -p' xxx ' -S / xxx /mysql/run/my3306.sock < /tmp/mysql_fullbak_20220425_bak

4.  从库重新同步

           # m aster_log_file master _log_pos sql 文件开头

           change master to master_host = '192.168.2. xxx ',

           master_user = 'zwrep',

           master_port=3306,

           master_password=' xxx ',

           master_log_file='mysql-bin.000202',

           master_log_pos=17015158;

           start  slave;

5.  重新同步

           show slave status\G;

    

    

至此, MySQL 主从数据库同步恢复正常。


请使用浏览器的分享功能分享到微信等