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 主从数据库同步恢复正常。
