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.