MySQL 5.7 从库主机自动重启后同步报错
问题:一台MySQL 从库主机突然自动重启,之后把MySQL启动后,发现从库无法同步,如下图:
问题原因:
1082:表示较严重的存储问题,突然重启导致 relay日志损坏无法读取
1062:主键或唯一键冲突(重复键值)
解决办法:
1. 在从库运行的情况下,停止同步:
stop slave;
2. 查看当前读到的主库日志文件名和POS点,记下来,记下来,记下来,其实看上图也一样,这里是二次核对。
select Master_log_name,Master_log_pos,Host,User_name,User_password,Port from mysql.slave_master_info;
注: 要保证主库有上面的binlog日志存在。这里是 mysql-bin.007337 , pos: 451827763
3. 清除主从同步日志,这里是清除了所有日志记录
reset slave all;
4. 重新配置同步
change master to master_host='主库IP', master_user='slave', master_password='密码',master_log_file='mysql-bin.007337',master_log_pos= 451827763;
5. 启动同步
start slave;
6.再次查看同步状态正常
SHOW SLAVE STATUS\G
################################################
如果是 Last_Errno:1062 ,修复方法如下:
1. 查看错误详细信息:
SELECT * FROM performance_schema.replication_applier_status_by_worker WHERE LAST_ERROR_NUMBER != 0\G
2. 跳过这个重复的键值
STOP SLAVE;
SET GLOBAL sql_slave_skip_counter = 1;
START SLAVE;
如果还有下一个报错或多个,在 my.cnf 里 配置:
#跳过所有错误
slave-skip-errors = all
再次查看:
SHOW SLAVE STATUS\G
应该恢复正常了。
补充:
master.info 和 relay-log.info 文件有可能在 my.cnf 中把 info 文件写在table 里,
my.cnf 中:
relay_log_info_repository = TABLE
master_info_repository = TABLE
relay_log_recovery = on
这样的话需要查表,因为data库文件夹下没有 master.info 和 relay-log.info 了
查询如下:
select * from mysql.slave_master_info;
select * from mysql.slave_relay_log_info;