MySQL: Ошибка репликации – Got fatal error 1236 from master when reading data from binary log

В категорії Підказки от 25 Травня, 2021. Автор admin

После аварийной перезагрузки 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.

Теги: , , ,