20180510|MySQL主从同步故障的排除

【注意】最后更新于 May 10, 2018,文中内容可能已过时,请谨慎使用。

Master库短暂离线后Slave库报出如下错误:

Slave I/O: Got fatal error 1236 from master when reading data from binary log: ‘Client requested master to start replication from position > file size; the first event ‘mysql-bin.000001’ at 473132093, the last event read from ‘./mysql-bin.000001’ at 4, the last byte read from ‘./mysql-bin.000001’ at 4.’, Error_code: 1236

在Master库执行:

show master status;

记下File, Position。

在Slave库执行:

slave stop;  (stop slave;)

CHANGE MASTER TO MASTER_LOG_FILE=‘testdbbinlog.000008’,MASTER_LOG_POS=107;

slave start; (start slave;)

show slave status \G;

Slave同步状态恢复正常。

查看Slave库中的内容发现与Master库不一致,判断为发生同步故障期间对主库执行的操作(UPDATE及CREAT TABLE等)没有同步到从库。

对主库进行热备份,执行如下命令:

设定只读锁

mysql> flush tables with read lock;

把数据备份到文件

#mysqldump –all-databases > mysql.bak.sql

使用scp命令把备份文件传到Slave库主机

scp mysql.bak.sql [email protected]:/root/

在Master库执行:

show master status;

记下File, Position。

在Slave库执行:

slave stop;

CHANGE MASTER TO MASTER_LOG_FILE=‘testdbbinlog.000008’,MASTER_LOG_POS=107;

slave start;

show slave status \G;

Slave同步状态恢复正常。

 

Tips:主从库数据相差不大,或者要求数据可以不完全一致的情况下可以忽略错误继续进行同步。

slave stop;

set global sql_slave_skip_counter = 1;

start slave;

 

解除Master的只读锁(似乎mysqldump结束后会自动解除read lock,待考证):

unlock tables

也可以看看