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;

浙公網安備 33010602011771號