MySQL-Replikation: Fehlgeschlagene Abfragen nicht an Slaves weitergeben

MySQL-Replikation: Fehlgeschlagene Abfragen nicht an Slaves weitergeben

Ich habe ein einfaches MySQL-Replikations-Setup mit einem Master und zwei Slaves. Gelegentlich werden auf dem Master Abfragen ausgeführt, die aufgrund doppelter eindeutiger Schlüssel oder aus anderen Gründen fehlschlagen. Was ich sehe, ist, dass die fehlgeschlagenen Abfragen auf die Slave-Server repliziert werden, was auch dort zu Fehlern führt. Es ist ärgerlich und ziemlich mühsam, dies jedes Mal beheben zu müssen, da die Replikation bei jeder fehlerhaften Abfrage abbricht.

Meiner Meinung nach sollte MySQL sich nicht die Mühe machen, eine Abfrage an die Slaves weiterzuleiten, wenn sie auf dem Master fehlschlägt. Kann MySQL auf diese Weise konfiguriert werden? Und wie? Ich habe versucht, zu googeln und die MySQL-Dokumente zu durchsuchen, aber ich kann nichts finden.

Antwort1

Die MySQL-Replikation erfolgt über Binlog. Ins Binlog werden nur erfolgreiche Transaktionen geschrieben, d. h. wenn eine Abfrage auf einem Master fehlschlägt, erscheint sie nicht im Binlog. Das bedeutet, dass diese Art von Abfragen nicht auf Replikaten erscheinen. Wenn Sie Fehler haben, wie z. B. dass die Replikation auf Slave1 abbricht, weil keine Spalte für das Update vorhanden ist (usw.), bedeutet das, dass Ihr Master und Ihre Slaves unterschiedlich sind. Sie sollten percona-toolkit installieren und Ihre Tabellen mit pt-table-checksum überprüfen.

verwandte Informationen