MySQL-Replikation mit einem Voll-Export reparieren

Wenn einem mal eine MySQL-Replikation so aussteigt, dass der Slave nicht mehr zu retten ist (z.B. wenn der Master unerwartet ausgefallen ist und sich der Slave „verschluckt“) und man keine andere Möglichkeit sieht, kann man den Slave mit ein paar Handgriffen und einem Vollexport/Fulldump der Master-Datenbank wieder flott machen.

Vollexport auf dem Master erzeugen:

Vorweg sollte man am Besten dafür sorgen, dass kein Traffic mehr auf der Master-Datenbank herrscht, da alle Tabellen gelockt werden und die Queries bis zum Ende des Exports (oder ein Timeout einsetzt) zurückgehalten werden.
Ein Vollexport kann sehr groß werden, daher sollte man darauf achten, genug Festplattenspeicher im Verzeichnis der Ausführung zur Verfügung zu haben.

mysqldump --master-data --all-databases --add-drop-database --disable-keys > fulldump.sql
  • –master-data fügt dem Dump den Befehl für den Slave hinzu, auf eben den Master zu wechseln. Darüber hinaus lockt er alle Tabellen beim Export (–lock-all-tables bzw. -x), damit ein konsistentes Abbild erzeugt werden kann
  • –all-databases sorgt für den Export aller Datenbanken
  • –add-drop-database fügt Anweisungen in den Dump ein, die beim Import vorher die entsprechenden Datenbanken löscht. Da wir hier ja eine bestehende Replikation wiederherstellen wollen, sind vermutlich alle Datenbanken auf dem Slave noch da und müssten sonst von Hand gelöscht werden
  • –disable-keys ist ein kleiner Trick um den Import schneller zu machen. MyISAM-Tabellen bekommen so die Anweisung den Index erst nach den INSERTs zu erzeugen, was unvorstellbar viel schneller sein kann, als bei jedem INSERT den Index zu aktualisieren

Kopieren der Daten auf den Slave (hier mit SCP):

scp fulldump.sql <benutzer>@<hostname>:/<verzeichnis-mit-ausreichend-platz>/

Import auf dem Slave:

Sobald die fulldump.sql vollständig übertragen wurde, können wir sie einspielen. Vorher sollte man mit

STOP SLAVE;

sicherstellen, dass der Slave-Betrieb von MySQL eingestellt ist.

Anschließend reicht ein

mysql < fulldump.sql

zum Importieren der Masterdaten. Wurde alles importiert, kann mit

START SLAVE;

die Replikation wieder gestartet werden.

Je nach Größe der Datenbank ist es ein so ein sehr einfaches und komfortables, wenn aber ggf. auch langwieriges Verfahren.

War dieser Artikel hilfreich für Sie?
[Gesamt: 0 Durchschnitt: 0]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *