programing

MariaDB - 릴레이 로그 읽기 실패: 릴레이 로그 이벤트 항목을 구문 분석할 수 없습니다.

goodsources 2022. 9. 12. 11:52
반응형

MariaDB - 릴레이 로그 읽기 실패: 릴레이 로그 이벤트 항목을 구문 분석할 수 없습니다.

슬레이브 상태를 확인할 때 다음 오류가 발생함

릴레이 로그 읽기 실패: 릴레이 로그 이벤트 항목을 구문 분석할 수 없습니다.생각할 수 있는 원인으로는 마스터의 바이너리 로그가 손상되었거나(바이너리 로그에서 'mysqlbinlog'를 실행하여 확인할 수 있음), 슬레이브의 릴레이 로그가 손상되었거나(릴레이 로그에서 'mysqlbinlog'를 실행하여 확인할 수 있음), 네트워크 문제 또는 마스터 또는 슬레이브의 MySQL 코드에 버그가 있습니다.마스터의 바이너리 로그 또는 슬레이브의 릴레이 로그를 확인하려면 이 슬레이브에 'SHOW SLAVE STATUS'를 발행하여 이름을 알 수 있습니다.

1개의 마스터노드와 2개의 슬레이브노드가 있는 Bitnami의 MariaDB를 Replication과 함께 사용하고 있습니다.이 노드 중 1개가 파손되어 위의 오류가 나타납니다.

노드가 작동을 멈춘 후 수행한 단계를 설명합니다.

  1. system_user 쿼리가 정지되어 있어 종료하려고 했지만 삭제되지 않았습니다.
  2. 슬레이브 노드를 재부팅하여 모든 쿼리를 새로 고쳤다.
  3. 서버 재시작 후 MySQL이 작동을 중지하고 소켓 오류를 발생시켰습니다.

여러분, 해결 좀 도와주세요.이 오류를 극복할 수 없습니다.

저는 같은 문제를 벨로우 스텝으로 해결했습니다.

현재 슬레이브 상태를 확인하려면 다음 명령을 수행합니다.

show slave status\G

다음과 같은 결과가 표시됩니다.

*************************** 1. row ***************************
                Slave_IO_State: Waiting for master to send event
                   Master_Host: provisioner-peer
                   Master_User: repl
                   Master_Port: 3306
                 Connect_Retry: 10
               Master_Log_File: mysql-bin.000149
           Read_Master_Log_Pos: 919065590
                Relay_Log_File: mysql-relay-bin.000450
                 Relay_Log_Pos: 884188250
         **Relay_Master_Log_File: mysql-bin.000149**
              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 run
ning '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: 884187951**
               Relay_Log_Space: 919067911
               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 run
ning '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: 287
                Master_SSL_Crl: 
            Master_SSL_Crlpath: 
                    Using_Gtid: No
                   Gtid_IO_Pos: 
       Replicate_Do_Domain_Ids: 
   Replicate_Ignore_Domain_Ids: 
                 Parallel_Mode: conservative
                     SQL_Delay: 0
           SQL_Remaining_Delay: NULL
       Slave_SQL_Running_State: 
              Slave_DDL_Groups: 0
Slave_Non_Transactional_Groups: 0
    Slave_Transactional_Groups: 1
1 row in set (0.000 sec)

주의해야 할 중요한 값은 Relay_Master_Log_FileExec_Master_Log_Pos입니다.슬레이브에서 복제를 올바르게 재시작하려면 이 서버가 필요합니다.

복제를 재시작하려면 다음 명령을 수행합니다.

STOP SLAVE;

RESET SLAVE;

CHANGE MASTER TO master_log_file='mysql-bin.000149', master_log_pos=884187951;

START SLAVE;

복제가 다시 작동하는지 확인하려면 다음 명령을 다시 실행합니다.

show slave status\G

동기화된 슬레이브를 호출하기 전에 status 명령에서 파라미터 Seconds_Behind_Master 값을 확인합니다.이 예에서는 값(7971초)을 확인했습니다.

Seconds_Behind_Master: 7971

이후 몇 분 이내에 복제가 마스터와 다시 동기화되어 복제 지연이 0초였습니다.

주의: 안전을 위해 먼저 데이터베이스를 백업합니다.

언급URL : https://stackoverflow.com/questions/65362492/mariadb-relay-log-read-failure-could-not-parse-relay-log-event-entry

반응형