Re: Slave resync... was ist denn da falsch? - Derkeiler.com

Re: Slave resync... was ist denn da falsch?
Re: Slave resync... was ist denn da falsch?
Source: http://newsgroups.derkeiler.com/Archive/De/de.comp.datenbanken.mysql/2009−06/msg00101.html
• From: Axel Schwenke <axel.schwenke@xxxxxx>
• Date: Sun, 14 Jun 2009 17:28:17 +0200
Gerhard Haslberger <ghaslbe@xxxxxx> wrote:
Frage A: Warum funktioniert folgendes NICHT?
Hab vom Master vor ein paar Tagen einen Dump gezogen, eingespielt beides
gestartet, alles tut.
Nach dem Problemfall hab ich den alten Dump wieder in den Slave eingespielt.
Nun dachte ich das die Differenzen über das Binlog wieder reingesyncht
werden. Aber das scheint nicht der Fall zu sein.
Laut Prozesse usw tut der Slave das, aber dann hat er plötzlich beim resync
Duplicate entry '44555' for key 1' on query
usw Probleme.
Warum?
Da fehlen Details.
"Dump vom Master ziehen und auf Slave einspielen" setzt nicht
zwangsläufig die Replikations−Koordinaten auf den Zeitpunkt
des Dumps. Und möglicherweise ist der Dump noch nicht mal in
sich konsistent.
Aber schau dir mal die mysqldump−Option −−master−data an.
Frage B:
Was passiert denn beim Sync eigentlich wenn obiger Fehler auf der
Master−DB aufgetreten ist? Steht das dann im Binlog?
Wenn ein DML−Statement auf dem Master keine Datensätze verändert,
dann wird es nicht geloggt. Das ist so lange klar und eindeutig,
wie du nur einzelne Datensätze in einem Statement änderst.
Ein INSERT INTO foo VALUES (...), (...), (...) kann hingegen
Re: Slave resync... was ist denn da falsch?
1
Re: Slave resync... was ist denn da falsch?
problematisch sein, wenn es z.B. beim dritten Datensatz ein
"duplicate key" gibt. Wenn die Tabelle InnoDB war, hast du Glück
und das Statement wird zurückgerollt und nicht geloggt.
Bei MyISAM wird es geloggt (es hat ja zwei neue Datensätze auf
dem Master eingefügt) und es wird der Fehler und die Anzahl
"affected rows" mitgeloggt und auf dem Slave verglichen.
Ebenfalls häßlich wird es mit Transaktionen, die InnoDB und
MyISAM−Tabellen verändern, dann aber mit ROLLBACK abgebrochen
werden (das sollte man lassen).
Wenn ja, kann man das Abbruchverhalten beim Resync ändern?
Der Slave kann bestimmte (oder alle) Fehler ignorieren. Das will
man aber seltenst. Siehe −−slave−skip−errors hier:
http://dev.mysql.com/doc/refman/5.0/en/replication−options−slave.html
XL
.
Re: Slave resync... was ist denn da falsch?
2