MySQL Replikation abgebrochen

Manchmal braucht es etwas länger um eine simple Ursache heraus zu finden. Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event’s master log master-mysql-bin.000027, end_log_pos 60489915

Heute meldete das Monitoring: Die Replikation sei abgebrochen.

Der Fehler:

MariaDB [test]> show slave status \G;
*************************** 1. row ***************************
                Slave_IO_State: Waiting for master to send event
                   Master_Host: 192.168.115.5
                   Master_User: repl
                   Master_Port: 3306
                 Connect_Retry: 60
               Master_Log_File: master-mysql-bin.000027
           Read_Master_Log_Pos: 60778425
                Relay_Log_File: mx2-relay-bin.000066
                 Relay_Log_Pos: 60490021
         Relay_Master_Log_File: master-mysql-bin.000027
              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: 1032
                    Last_Error: Could not execute Delete_rows_v1 event on table test.test; Can't find record in 'test', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log master-mysql-bin.000027, end_log_pos 60489915
                  Skip_Counter: 0
           Exec_Master_Log_Pos: 60489715
               Relay_Log_Space: 60779092
               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: 1032
                Last_SQL_Error: Could not execute Delete_rows_v1 event on table test.test; Can't find record in 'test', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log master-mysql-bin.000027, end_log_pos 60489915
   Replicate_Ignore_Server_Ids: 
              Master_Server_Id: 1
                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: 2257
Slave_Non_Transactional_Groups: 3
    Slave_Transactional_Groups: 1792057

entscheidend ist folgender Fehler:

Last_SQL_Error: Could not execute Delete_rows_v1 event on table test.test; Can't find record in 'test', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log master-mysql-bin.000027, end_log_pos 60489915

Über die suche bei google kamen durchaus unterschiedliche Ursachen in Betracht u.u. Replikation einer Memory Table. Diverser Erklärungen, wie man das Problem fixen kann.

Aber was war die Ursache?

Im konkreten Fall habe ich eine Testtabelle auf dem MASTER angelegt und mehrere Datensätze eingefügt. Einen Datensatz auf dem SLAVE gelöscht um diesen danach auf dem MASTER zu löschen. Somit kam ein drift der Datenbank zustande und die Replikation stoppt mit obigem Fehler.

Beim Kundenfall wurde eine Webapplikation mehrfach betrieben, per Loadbalancer auf mehrere Knoten angesprochen um die Leselast zu verteilen. Versehentlich auf alle Knoten der Schreibzugriff eingerichtet und damit kam es zu Änderungen auf dem SLAVE.

Die Lösung

  • Replikation aus der Sicherung neu aufbauen.
  •  Fehler überspringen:
    • SET GLOBAL sql_slave_skip_counter = 1;
    • start slave;

Letzteres war in meinem Fall ok, da ich den Fehler und Datensatz ausmachen konnte. Ist dies nicht der Fall, ist von einem solchen Schritt ab zu raten. Folge ist ein Datenverlusst / Inkonsistenz.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.