Guter Server ermitteln
Zuerst muss entschieden werden, welcher der "guter" Server ist. Wenn HAPROXY im Betrieb ist, dann ist der guter Master der auf den die Daten derzeit geschrieben werden.
HAPROXY umstellen
Falls es ein HAPROXY gibt, dann die Server auf der Kaputten Master Seite aus der Verteilung herausnehmen (auch den Slave auf dieser Seite).
Auf BEIDE Master Server
STOP SLAVE;
Auf den KAPUTTEN Master Server eine Sicherung der guten Master DB anfertigen
Vor Release 3.12:
mysqldump -h<GOOD_MASTER> -uroot -p<PASSWORD> --single-transaction --master-data=2 --databases JTELWeb JTELStats JTELLog --add-drop-database --add-drop-table --events --routines --triggers > master.sql
Ab Release 3.12 bitte folgenden Befehl nutzen:
mysqldump -h<GOOD_MASTER> -uroot -p<PASSWORD> --single-transaction --master-data=2 --databases JTELWeb JTELStats JTELStats2 JTELLog --add-drop-database --add-drop-table --events --routines --triggers > master.sql
Auf den KAPUTTEN Master Server, den Slave resetten, und Sicherung einspielen
RESET SLAVE;
SOURCE master.sql;
CHANGE MASTER TO MASTER_HOST = '<GOOD_MASTER>', MASTER_USER = 'repl', MASTER_PASSWORD = '<PASSWORD>', MASTER_LOG_FILE='<NAME_LOGFILE>', MASTER_LOG_POS=<POSITION_LOGFILE>;
START SLAVE;
Auf den KAPUTTEN Master Server den Slave Prüfen
SHOW SLAVE STATUS\G
watch 'mysql -u root -p<PASSWORD> -e "SHOW SLAVE STATUS\G" 2>/dev/null'
Auf den KAPUTTEN Master Server alle Tabellen locken und Master Position notieren
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
Die Positionen von SHOW MASTER STATUS werden im folgenden Kommando benötigt.
Auf den GUTEN Master Server die Replikation neu positionieren und starten
CHANGE MASTER TO MASTER_HOST = '<SECOND_MASTER>', MASTER_USER = 'repl', MASTER_PASSWORD = '<PASSWORD>', MASTER_LOG_FILE='<NAME_LOGFILE>', MASTER_LOG_POS=<POSITION_LOGFILE>;
START SLAVE;
Auf den KAPUTTEN Master Server die Tabellen Locks aufheben
UNLOCK TABLES;
Auf allen Servern nun
SHOW SLAVE STATUS\G
Es ist normalerweise nicht nötig, die Slaves die an beide Master hängen ebenfalls zu wiederherstellen. Wenn doch, können diese mit der normalen Prozedur für das Wiederherstellen des Slaves neu initialisiert werden.