После аварийной перезагрузки mysql-сервера, исполняющего роль master, может сломаться репликация. А на slave после выполнения show slave status\G
можно лицезреть следующую ошибку:
Slave_IO_Running: No
Slave_SQL_Running: Yes
......
Last_IO_Errno: 1236
Last_IO_Error: 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.000034' at 988867715, the last event read from '/db/mysql/mysql-bin.000034' at 4, the last byte read from '/db/mysql/mysql-bin.000034' at 4.'
Смотрим позицию, до которой дошел slave:
[slave]$ echo "show slave status \G" | mysql -u root -p | grep -E "[[:space:]]Master_Log_File|Read_Master_Log_Pos"
Master_Log_File: mysql-bin.000034
Exec_Master_Log_Pos: 988867715
Смотрим последнюю позицию, которая реально присутствует в этом бинлоге мастера:
[master]$ mysqlbinlog /db/mysql/mysql-bin.000034 | tail -n 12
'/*!*/;
# at 988777276
#180425 8:57:41 server id 1 end_log_pos 988777362 CRC32 0x3172f95b Query thread_id=8036410 exec_time=0 error_code=0
SET TIMESTAMP=1524635861/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
COMMIT
/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
И видим, что последняя позиция – 988777362. В то время как slave пытается исполнить позицию 988867715, которая, очевидно, дальше, чем 988777362. Вывод – надо “отмотать” slave немного назад:
[slave] mysql> stop slave;
[slave] mysql> change master to master_log_file='mysql-bin.000034', master_log_pos=988777362;
[slave] mysql> start slave;
Ну и далее show slave status\G нам говорит, что slave начал догонять master.
Переглядів: 0