Wenn Sie die Anleitung befolgt haben und Ihre Replikationskonfiguration trotzdem nicht funktioniert, sollten Sie zuallererst das Fehlerlog auf Meldungen überprüfen. Allzu viele Benutzer haben bei Auftreten eines Problems kostbare Zeit damit vergeudet, dies nicht gleich gemacht zu haben.
Wenn Sie aus dem Fehlerlog nicht ableiten können, welches Problem vorliegt, probieren Sie die folgenden Methoden aus:
Überprüfen Sie, ob am Master das binäre Loggen aktiviert
ist, indem Sie eine SHOW MASTER
STATUS
-Anweisung absetzen. Bei aktiviertem Loggen
ist Position
ungleich null. Sollte das
binäre Loggen nicht aktiviert sein, dann stellen Sie sicher,
dass der Master mit den Optionen --log-bin
und --server-id
läuft.
Überprüfen Sie, ob der Slave ausgeführt wird. Mit
SHOW SLAVE STATUS
können Sie feststellen,
ob die Werte von Slave_IO_Running
und
Slave_SQL_Running
jeweils
Yes
lauten. Andernfalls überprüfen Sie
die Optionen, die beim Start des Slave-Servers angegeben
waren. So verhindert etwa --skip-slave-start
,
dass die Slave-Threads gestartet werden, bis Sie eine
START SLAVE
-Anweisung absetzen.
Wird der Slave ausgeführt, dann prüfen Sie, ob er eine
Verbindung zum Master herstellen konnte. Setzen Sie
SHOW PROCESSLIST
ab, suchen Sie die I/O-
und SQL-Threads und überprüfen Sie die zugehörigen
State
-Spalten. Siehe auch
Abschnitt 6.4, „Replikation: Implementationsdetails“. Wenn
für den I/O-Thread als Status Connecting to
master
angegeben ist, überprüfen Sie die
Berechtigungen für den Replikationsbenutzer auf dem Master,
den Hostnamen des Masters und Ihre DNS-Konfiguration und
stellen Sie sicher, dass der Master ausgeführt wird und auch
vom Slave erreicht werden kann.
Wurde der Slave bereits vorher ausgeführt, dann aber beendet, dann liegt das in der Regel daran, dass irgendeine Anweisung, die auf dem Master erfolgreich verarbeitet wurde, auf dem Slave fehlgeschlagen ist. Dies sollte niemals passieren, wenn Sie eine korrekte Momentaufnahme auf dem Master erstellt und die Daten auf dem Slave niemals außerhalb des Slave-Threads modifiziert haben. Wird der Slave unerwartet beendet, dann liegt entweder ein Bug vor, oder Sie sind auf eine der bekannten Einschränkungen der Replikation gestoßen, die in Abschnitt 6.8, „Replikation: Features und bekannte Probleme“, beschrieben sind. Wenn es sich um einen Bug handelt, lesen Sie Abschnitt 6.14, „Berichten von Replikationsfehlern und -problemen“, um zu erfahren, wie Sie diesen melden.
Wenn eine Anweisung, die auf dem Master klaglos verarbeitet wurde, nicht auf dem Slave ausgeführt werden kann, probieren Sie folgende Vorgehensweise aus, sofern die Durchführung einer vollständigen Datenbankneusynchronisierung durch Löschen der Datenbanken auf dem Slave und Kopieren einer neuen Momentaufnahme vom Master nicht realisierbar ist:
Ermitteln Sie, ob die betreffende Tabelle auf dem Slave
sich von der auf dem Master unterscheidet. Versuchen Sie
zu ergründen, was geschehen ist. Dann machen Sie die
Tabelle auf dem Slave identisch zu der auf dem Master und
führen START SLAVE
aus.
Funktioniert der vorherige Schritt nicht oder ist er nicht durchführbar, dann prüfen Sie, ob es sicher ist, die Änderung (sofern erforderlich) manuell durchzuführen und die nächste Anweisung vom Master zu ignorieren.
Wenn Sie feststellen, dass Sie die nächste Anweisung vom Master übergehen können, setzen Sie die folgenden Anweisungen ab:
mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER =
mysql>N
;START SLAVE;
Der Wert von N
sollte 1 sein,
wenn die nächste Anweisung vom Master weder
AUTO_INCREMENT
noch
LAST_INSERT_ID()
verwendet. Andernfalls
wählen Sie den Wert 2. Grund hierfür ist die Tatsache,
dass Anweisungen, die AUTO_INCREMENT
oder LAST_INSERT_ID()
verwenden, zwei
Ereignisse in das Binärlog des Masters schreiben.
Wenn Sie ganz sicher sind, dass der Slave vollkommen synchron zum Master gestartet wurde und niemand die betreffenden Tabellen außerhalb des Slave-Threads modifiziert hat, dann ist die Diskrepanz mit hoher Wahrscheinlichkeit Ergebnis eines Bugs. Wenn Sie die aktuelle MySQL-Version verwenden, melden Sie dieses Problem bitte. Wenn Sie hingegen eine ältere Version einsetzen, aktualisieren Sie – sofern möglich – auf den aktuellen Produktions-Release, um festzustellen, ob das Problem fortbesteht.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.