Problem
Ich habe MySQL-Replikation zwischen 2 Servern eingerichtet, Master ( A ) und Slave ( B ). Ich muss der Mischung einen neuen Slave hinzufügen ( C ). Ich möchte, dass dieser Slave seine Updates direkt vom Master erhält. Ich möchte keine Kettenreplikation vom Slave. Der Master ist jedoch "heiß". Normalerweise verwende ich Xtrabackup, um eine vollständige Sicherung des Masters zu erstellen. Dadurch wird er jedoch für gut 10 Minuten gesperrt, da die Datenbank etwa 20 GB groß ist.
Mögliche Lösung
SPÜLEN SIE TABELLEN MIT READ LOCK auf Slave B , verwenden Sie SHOW SLAVE STATUS auf B , notieren Sie das Binlog und die Position. Sichern Sie dann die Datenbank mit Xtrabackup, senden Sie die Sicherung an C und erstellen Sie damit den Slave. Setzen Sie die Replikation so, dass sie mit der gerade notierten Binlog-Position auf A zeigt.
Frage
Gibt es einen besseren Weg, bei dem ich B nicht so lange sperren muss ? Oder etwas, das einfacher zu automatisieren ist?
quelle
start slave
(SlaveC) erhalte ich "Fehler beim Öffnen des Relaisprotokolls '/var/log/mysql/mysql-relay-bin.001603"Wenn wir unserem Mix einen Slave hinzufügen, gehen wir wie folgt vor:
quelle
Ich habe getan, was @RolandoMySQLDBA vorschlägt, aber auch 6 ' und 8' Schritte hinzugefügt (dies löst, was @Hussain Tamboli kommentiert.):
Schritt 1) Richten Sie einen neuen Server ein (ServerC)
Schritt 2) Installieren Sie auf ServerC MySQL (dieselbe Version wie ServerB).
Schritt 3) Führen Sie auf ServerC den Dienst mysql stop aus
Schritt 4) Kopieren Sie /etc/my.cnf von ServerB nach ServerC
Schritt 5) Ändern Sie auf ServerC die Server-ID in einen anderen Wert als ServerA und ServerB
Schritt 6) rsync / var / lib / mysql auf ServerB zu ServerC
Schritt 6 ') rsync / var / log / mysql auf ServerB zu ServerC
Schritt 7) Wenn rsync abgeschlossen ist, führen Sie "STOP SLAVE;" auf ServerB
Schritt 8) rsync / var / lib / mysql auf ServerB zu ServerC
Schritt 8 ') rsync / var / log / mysql auf ServerB zu ServerC
Schritt 9) Führen Sie auf ServerB "START SLAVE;"
Schritt 10) Starten Sie auf ServerC den Dienst mysql
Schritt 11) Führen Sie auf ServerC "START SLAVE;" (Tun Sie dies, wenn sich Skip-Slave-Start in /etc/my.cnf befindet.)
quelle
Sie haben die Option "DATEN VON MASTER LADEN", aber davon wird dringend abgeraten.
Nehmen Sie nächtliche / wöchentliche Backups auf Ihrem System vor? Wenn ja, notieren Sie auch die Position mit Ihrem Backup, dann können Sie dieses Backup zum Einrichten eines neuen Slaves verwenden. Lass es einfach sein und lass es für einige Zeit auf dem neuesten Stand sein.
quelle
Ich habe Rolando-Antworten ausprobiert und es hat gut funktioniert, aber es wurde von Anfang an wiedergegeben und ich musste mehr Fehlercode hinzufügen, um zu überspringen (ich weiß, dass es nicht empfohlen wird, aber ich weiß, was ich tat).
Nachdem ich mit Schritt 7 fertig war, habe ich das MySQL-Protokoll eingecheckt, den Namen und die Position des Bin-Protokolls notiert und bis zum 9. Schritt fortgefahren. Vor dem 10. Schritt habe ich nur die
change master
Protokolldatei und die Protokollposition ausgeführt. Und weiter ab Schritt 11. Für mich sieht alles gut aus.quelle
Sie müssen die Slave-UUID in auto.cnf ändern, damit der Master die beiden Slaves unterscheiden kann.
quelle