Fehlerhafte Query bei MySQL Replikation überspringen

Replikationen können nur fehlerfrei arbeiten, wenn auch die zugreifenden Applikationen auf die Replikation abgestimmt sind. Ist das nicht der Fall wird die Replikation mit einem Fehler unterbrochen.

Mit der Anweisung SQL_SLAVE_SKIP_COUNTER hat man die Möglichkeit, die nächsten N Ereignisse auf dem Master zu überspringen. Anschließend muss der Slave-Thread neu gestartet werden.

mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;

Wenn die Replikation nun wieder ohne Fehler läuft, sollte man die Konsistenz der Datenbankreplikation prüfen um evtl. Lücken aufzudecken.

Hinweis: Die Anweisung funktioniert nur, wenn der Slave-Thread nicht läuft.

Weitere Informationen zum Thema:
http://dev.mysql.com/doc/refman/5.1/de/set-global-sql-slave-skip-counter.html

Konsistenz einer Datenbankreplikation prüfen

Das Einrichten von Replikationen unter MySQL ist „recht einfach“. Schwieriger ist es die Konsistenz der replizierten Datenbanken herauszufinden. Gerade nach einem Ausfall und dem erneuten Aufsetzen der Replikation.
Eine Variante ist die Benutzung des Maatkit Toolkit, welches für Anwender, Entwickler und Administratoren von Open-Source-Datenbanken (z.B. MySQL, PostgreSQL, …) entwickelt wurde. Das Toolkit stellt unter anderem Skripte bereit um mittels Checksummen verschiedene Datenbanken miteinander zu vergleichen.

Zunächst werden die Scripte des Maatkit Toolkit benötigt.

wget http://www.maatkit.org/get/mk-table-checksum
wget http://www.maatkit.org/get/mk-checksum-filter

Nicht vergessen die heruntergeladenen Skripte ausführbar zu machen!
Alternativ kann auch das gesamte Toolkit aus den Paketquellen installiert werden.

sudo apt-get install maatkit

Danach können mittels mk-table-checksum alle Checksummen der angegebenen Datenbank wie folgt angezeigt werden.

mk-table-checksum h=host1,u=user,p=pass h=host2,u=user,p=pass … –databases db

Da sich das Lesen der Rückgabe bei größeren Datenbanken recht schwierig gestaltet empfiehlt sich er Einsatz des Skripts mk-checksum-filter als Ausgabefilter.

mk-table-checksum h=host1,u=user,p=pass … –databases db | mk-checksum-filter

Hiermit werden nur die Tabellen angezeigt, die Unterschiede in der Checksumme haben.

Mit ein bisschen basteln kann diese Information z.B. in einem Script regelmäßig die Konsistenz der Datenbank prüfen und im Fehlerfall per Mail den Admin informieren. Selbstverständlich gibt es noch viele weitere Funktionen und Parameter auf die ich nicht eingegangen bin, diese sind in der Dokumentation gut beschrieben.

Weitere Informationen zum Thema:
http://www.maatkit.org/
http://www.maatkit.org/doc/mk-table-checksum.html
http://www.maatkit.org/doc/mk-checksum-filter.html
http://code.google.com/p/maatkit/