MySQL Replication 에러가 발생했을 때 SQL_SLAVE_SKIP_COUNTER로 해결안되는 경우에 대하여 알아보자.
보통 SQL Statement 레벨의 에러는 SQL_SLAVE_SKIP_COUNTER로 문제 없지만 하드웨어 또는 OS상의 문제로 에러가 발생한 경우는 다르다.
에러내용
# Slave 서버가 알 수 없는 원인으로 OS가 재기동 되었다.
# MySQL 접속 후 확인 한 결과
admin@localhost:(none) >show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: x.x.x.x
Master_User: replication_user
Master_Port: 9999
Connect_Retry: 60
Master_Log_File: binary_log.010733
Read_Master_Log_Pos: 305382657
Relay_Log_File: relay_log.022962
Relay_Log_Pos: 81579694
Relay_Master_Log_File: binary_log.010732
Slave_IO_Running: Yes
Slave_SQL_Running: No
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 1594
Last_Error: Relay log read failure: Could not parse relay log event entry. The possible reasons are: the master's binary log is corrupted (you can check this by running 'mysqlbinlog' on the binary log), the slave's relay log is corrupted (you can check this by running 'mysqlbinlog' on the relay log), a network problem, or a bug in the master's or slave's MySQL code. If you want to check the master's binary log or slave's relay log, you will be able to know their names by issuing 'SHOW SLAVE STATUS' on this slave.
Skip_Counter: 0
Exec_Master_Log_Pos: 81579530
Relay_Log_Space: 842450765
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 1594
Last_SQL_Error: Relay log read failure: Could not parse relay log event entry. The possible reasons are: the master's binary log is corrupted (you can check this by running 'mysqlbinlog' on the binary log), the slave's relay log is corrupted (you can check this by running 'mysqlbinlog' on the relay log), a network problem, or a bug in the master's or slave's MySQL code. If you want to check the master's binary log or slave's relay log, you will be able to know their names by issuing 'SHOW SLAVE STATUS' on this slave.
Replicate_Ignore_Server_Ids:
Master_Server_Id: 4359
Master_UUID: vnsjidq-238qwkdj2f-asjzxcniw-euwjds
Master_Info_File: /mysql/log/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State:
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp: 201019 19:08:37
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.00 sec)
SHOW SLAVE STATUS 해석
Master_Log_File: I/O thread가 처리하고 있는 마스터의 바이너리 로그 파일명 Read_Master_Log_Pos: I/O thread가 읽어들인 마스터의 바이너리 로그 포지션 Relay_Log_File: SQL thread가 처리하고 있는 슬레이브의 릴레리 로그 파일명 Relay_Log_Pos: SQL thread가 실행 완료한 슬레이브의 릴레리 로그 포지션 Relay_Master_Log_File: SQL thread가 마지막으로 실행한 쿼리가 기록되어 있는 마스터의 바이너리 로그 파일명 Exec_Master_Log_Pos: SQL thread가 마지막으로 실행한 쿼리의 마스터 바이너리 로그 포지션
대처 방법 1)
admin@localhost:(none) >SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
admin@localhost:(none) >START SLAVE;
# 에러 내용이 해소되지 않았고 Relay log position 또한 변함 없었다.
대처 방법 2)
# Master DB의 binlog position을 재설정 한 후, 복제 시작 # mysqlbinlog를 이용하여 마스터의 Relay_Master_Log_File 바이너리 로그 파일을 확인 # Exec_Master_Log_Pos 다음 포지션으로 CHANGE MASTER 실행 admin@localhost:(none) >CHANGE MASTER TO MASTER_LOG_FILE='binary_log.010732', MASTER_LO G_POS=81579770; admin@localhost:(none) >START SLAVE;
# 에러가 해소되고 복제가 순차적으로 이루어졌다.
댓글 없음:
댓글 쓰기