Mysql-slave out-of-sync nach dem crash
Haben wir eine "1 master, 1 slave," MySQL-setup. Wir hatten ein plötzlicher Stromausfall, nahm die Sklavin. Nachdem ich die Maschine wieder hoch, fand ich, dass der slave wurde nicht synchron mit dem master:
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.0.0.1
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-log.001576
Read_Master_Log_Pos: 412565824
Relay_Log_File: mysqld-relay-bin.002671
Relay_Log_Pos: 6930
Relay_Master_Log_File: mysql-log.001573
Slave_IO_Running: Yes
Slave_SQL_Running: No
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table: blah.table2
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 1032
Last_Error: Could not execute Update_rows event on table blah.info; Can't find record in 'info', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-log.001573, end_log_pos 689031225
Skip_Counter: 0
Exec_Master_Log_Pos: 689030864
Relay_Log_Space: 2944772417
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 Update_rows event on table blah.info; Can't find record in 'info', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-log.001573, end_log_pos 689031225
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
1 row in set (0.00 sec)
Verwenden wir einen binlog-format "ZEILE", also wenn ich versuche, verwenden Sie mysqlbinlog, um Blick auf die problematische Zeile, die ich nicht sehen, nichts von nutzen. Ich möchte nicht einfach die skip-counter, weil ich denke, dass wirft meine Tabelle noch weiter out-of-sync.
Gibt es irgendetwas, was ich tun kann, auf die Sklavin, die würde im wesentlichen "Rollback" auf einen bestimmten Punkt in der Zeit, wo ich Sie dann wieder in der master-log-Nummer, poition, etc? Wenn nicht, gibt es irgendetwas an allem was kann ich tun, um wieder zu synchronisieren?
InformationsquelleAutor Phil | 2013-07-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann man in der Regel erholen sich von kleinen Unstimmigkeiten mit pt-table-checksum und pt-table-sync.
Sieht es für mich aus wie dein Sklave, verlor seinen Platz in der Binär-log-Folge, wenn es abstürzt. Der slave ständig schreibt seinen letzten Verarbeitung binlog-event in datadir/relay-log.info aber diese Datei verwendet gepuffert schreibt, so ist es anfällig für den Verlust von Daten bei einem Absturz.
Deshalb Percona Server erstellt eine crash-resistent Replikation Funktion zum speichern der gleichen slave-info in eine InnoDB-Tabelle, um sich zu erholen von diesem Szenario.
MySQL 5.6 implementiert hat eine ähnliche Funktion: Sie können
relay_log_info_repository=TABLE
wird der slave speichert seinen Zustand in einem crash-resistent Weg.Re Ihr Kommentar:
Ja, in Theorie pt-table-sync beheben können jede Menge von slave-drift, aber es ist nicht unbedingt der effizienteste Weg ist, um richtig große Diskrepanzen auf. Irgendwann, es ist schneller und effizienter in den Papierkorb, die veralteten slave und initialisieren Sie es mit einer neuen Sicherung aus der master.
Check-out Wie das einrichten einer slave-Replikation in 6 einfachen Schritten mit Percona Xtrabackup.
InformationsquelleAutor Bill Karwin