Ich habe die MySQL-Replikation in der Produktion wie folgt eingerichtet:
DB1 -> DB2 DB1 -> BAK
Wobei DB2
und BAK
Slaves von sind DB1
. Alle 3 Server sind synchron (0 Sekunden hinter dem Master) und verfügen über mehr als 30 GB Daten.
Ich möchte die Server wie folgt in eine neue Master-Slave-Konfiguration einfügen:
DB1 -> DB2 -> BAK
Wie kann ich den Master-Host am besten ändern BAK
?
Gibt es eine Möglichkeit, zu vermeiden, dass der Slave-Thread angehalten werden muss DB2
und ein Mysqldump BAK
(ein 5–6-stündiger Prozess) ausgegeben wird?
Antwort1
Das nennt man kaskadierende Master-Slave-Slave-Replikation. Sie müssen log-bin und log-slave-updates auf DB2 aktivieren, siehe hier:
Sobald dies auf BD2 läuft, müssen Sie auf BAK den Master ändern und den Slave zurücksetzen, um seine Protokollinformationen zu löschen, wie:
mysql> stop slave;
mysql> change master to MASTER_HOST="BAK name or IP", .....
mysql> reset slave;
mysql> start slave
Dabei sind die Auswahlmöglichkeiten wie immer bei '...':http://dev.mysql.com/doc/refman/5.0/en/change-master-to.html
Theoretisch sollte das für Sie erledigt sein, ohne dass Sie einen neuen Dump erstellen und ihn importieren müssen – ich würde auf jeden Fall einen Flush-Log auf dem Master ausführen und Backups von BAK erstellen, falls Sie möchten, für den Fall, dass etwas schief geht und Ihre Log-Positionen falsch sind oder so etwas …
Antwort2
Wie Sie sagen, können Dump und Import ewig dauern. Eine viel bessere Option ist die VerwendungAbonnieren, das die Wiederherstellung ungefähr so schnell durchführt, wie es die Dateien an den richtigen Ort kopieren kann.Ich habe darüber gebloggtvor einiger Zeit. Ich finde, es ist eine perfekte Möglichkeit, Slaves einzurichten, wirklich schnell und einfach. Die Backups dauern lange, aber die Wiederherstellungen sind wirklich schnell. Ich empfehle Ihnen auch dringend,Schweinchenanstelle von gzip, wenn Sie Ihre Backups komprimieren – das hat bei meinen Backup-Zeiten locker einen Unterschied um den Faktor 4 bewirkt.
Wenn Sie beide Slaves gleichzeitig stoppen können (so dass sie beide auf dasselbe Protokoll und dieselbe Position auf db1 zeigen), z. B. indem Sie DB1 kurzzeitig stoppen, können Sie BAK unter Verwendung seiner Master-Informationen sicher auf DB2 neu ausrichten, ohne eine langwierige Wiederherstellung durchführen zu müssen. Wie troyengel sagt, ist es am wichtigsten, dass Sie log-slave-updates aktivieren müssen, um die Weiterleitung durchzuführen, da sonst nur Anweisungen, die von DB2 stammen, an BAK gesendet werden.
Ich würde Ihnen außerdem empfehlen, DB2 auf schreibgeschützt zu setzen. Dies hat keine Auswirkungen auf die Replikation, ist aber sicherer, da Sie dann keine Daten auf DB2 und BAK haben, die nicht auf DB1 liegen.