[MySQL] 복제 1236 에러(Got fatal error 1236 from master)
결론부터 말하면 MySQL 마스터 슬레이브 설정되었을때 예기치 않게 서버가 죽거나 하였을때 주고 발생을 합니다.
통상적으로 파일명 지정을 다음것으로 하면 해결이 됩니다.
그리고 테이블 체크는 별도로 해보셔야 합니다.
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 192.168.10.10
Master_User: root
Master_Port: 3306
Connect_Retry: 2
Master_Log_File: mysql-bin.000011
Read_Master_Log_Pos: 123450012
Relay_Log_File: mysqld-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: mysql-bin.00011
Slave_IO_Running: No
Slave_SQL_Running: No
...
...
Master_SSL_Verify_Server_Cert: No
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 impossible position; the first event 'mysql-bin.00011' at 123450012, the last event read from '/dblog/mysql-bin.00011' at 4, the last byte read from '/db/dblog/mysql-bin.00011' at 4.'
● 아래 방식으로 skip 처리는 해보면 안됩니다.
mysql> set global sql_slave_skip_counter = 1; start slave; select sleep(3); show slave status \G
● 파일 용량을 보니 지정된 포지션 보다 작다.
이번 경우는 마스터 서버에 있는 파일용량을 보니 슬레이브쪽 지정된 포지션 보다 용량이 작습니다.
슬레이브에서의 포지션은 0부터 시작하여 용량이라고 생각하시면 됩니다. 생각이 아니라 그렇습니다.
그리고 만약 서버가 갑자기 죽어서 발생한 경우라면 다시 시작 했기 때문에 파일명이 달라지게 됩니다.
-rw-rw---- 1 mysql mysql 123450010 8월 19 12:42 mysql-bin.00011
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.00011', MASTER_LOG_POS=123450012;
123450010
● 이렇게 잘못된 포시션 인데 넘어 서는 경우는 다음 파일로 지정을 해주면 된다.
통상 갑자기 죽으면 마스터 재시작하면서 파일명이 달라 집니다. 그러니 이런 경우 시작은 0부터 하면 됩니다.
mysql> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.00012', MASTER_LOG_POS=0;
그리고 stop을 하지 않고 하면 아래 오류를 보게 됩니다.
ERROR 1198 (HY000): This operation cannot be performed with a running slave; run STOP SLAVE first
* 참고 문서
php를 이용한 MySQL, MariaDB DB 테이블 체크 프로그램 > PHP
MySQL Replication: 'Got fatal error 1236' causes and cures