Eine gute Möglichkeit, etwas Ähnliches zu erreichen, besteht darin, die Master-Master-Replikation oder die zirkuläre Replikation einzurichten. Dies ist nicht mit MultiMaster Replciation zu verwechseln.
Das Einrichten der zirkulären Replikation ist sehr einfach, wenn Sie die Master-Slave-Replikation eingerichtet haben. Folgendes müssen Sie tun, um es zu konfigurieren.
In diesem Beispiel wird davon ausgegangen, dass die Master-Slave-Replikation aktiv ist, es jedoch zu Ausfallzeiten (1-2 Minuten) kommt:
Schritt 1) Fügen Sie diese Zeile zu /etc/my.cnf auf dem Master hinzu.
Log-Slave-Updates
Schritt 2) Fügen Sie diese Zeile zu /etc/my.cnf auf dem Slave hinzu:
log-bin = mysql-bin (oder was auch immer der Master dafür hat) log-Slave-Updates
WARNUNG: Hier ist der kurze Moment der Ausfallzeit !!!
Schritt 3) Starten Sie auf dem Slave den Neustart von mysql
Dadurch werden binäre Protokolle auf dem Slave aktiviert
Schritt 4) Warten Sie auf dem Master den MySQL-Stopp
Schritt 5) Verwenden Sie rsync, um den Ordner / var / lib / mysql des Slaves auf den Master zu kopieren.
WARNUNG: Hier ist der längere Moment der Ausfallzeit !!!
Schritt 6) Warten Sie auf dem Slave den MySQL-Stopp
Schritt 7) Finden Sie auf dem Slave das letzte Binärprotokoll heraus
Schritt 8) Ermitteln Sie auf dem Slave die Dateigröße des letzten Binärprotokolls
Schritt 9) Verwenden Sie rsync, um den Ordner / var / lib / mysql des Slaves auf den Master zu kopieren. Dies sollte eine schnellere Kopie sein.
Schritt 10) Bearbeiten Sie auf dem Master
Zeile 2 von master.info mit dem letzten Binärprotokoll des Slaves.
Zeile 3 von master.info mit der Dateigröße des letzten Binärprotokolls des Slaves.
Zeile 4 von master.info mit der IP des Slaves.
Zeile 5 ist die Benutzer-ID des Replikationsbenutzers (NICHT BERÜHREN).
Zeile 6 ist das Kennwort des Replikationsbenutzers (NICHT BERÜHREN).
Schritt 11) Löschen Sie alle Binärprotokolle und die Binärprotokollindexdatei des Masters.
Schritt 12) Warten Sie auf dem Slave den Start von Service MySQL und warten Sie 15 Sekunden
Schritt 13) Starten Sie auf dem Master den Dienst mysql start
Schritt 14) Führen Sie auf dem Master STOP SLAVE aus. SHOW MASTER STATUS;
Schritt 15) Führen Sie auf dem Slave CHANGE MASTER TO MASTER_HOST = 'IP des Slaves', MASTER_USER = 'Benutzer-ID des Replikationsbenutzers ab Schritt 10', MASTER_PASSWORD = 'Kennwort des Replikationsbenutzers ab Schritt 10', MASTER_LOG_FILE = 'Binärprotokoll ab Schritt 14' aus. MASTER_LOG_POS = LogPos aus Schritt 14.
Schritt 16) Führen Sie auf dem Slave START SLAVE aus.
Schritt 17) Führen Sie auf dem Master START SLAVE aus.
Ich habe ähnliche Schritte für eine andere von mir beantwortete StackExchange-Frage ausgeführt .
Versuche es !!!
log-slave-updates
sei denn, die Master werden zusätzliche Slaves haben.Nicht bei der asynchronen Replikation, die MySQL bietet. Sie haben gerade den sprichwörtlichen Nagel getroffen, warum die sofort einsatzbereite MySQL-Replikation (vor 5.5) an und für sich keine Hochverfügbarkeitslösung ist. Mit 5.5 mit halbsynchroner Replikation (http://dev.mysql.com/doc/refman/5.5/en/replication-semisync.html) wird es etwas besser, jedoch auf Kosten einer langsameren Transaktionszeit, wenn der Master auf die wartet ack vom Sklaven.
Wenn es nicht möglich ist, die Möglichkeit eines Datenverlusts beim Ausfall des Masters zu akzeptieren, würde ich sagen, dass ein komplexeres Setup als ein einfacher Master / Slave angebracht ist.
Die Master-to-Master-Replikation wurde von vielen bekannten MySQL-Leuten als eher problematisch als vorteilhaft angesehen (selbst MySQL AB selbst empfiehlt sie nicht mehr als Hochverfügbarkeitslösung). Daher denke ich, dass Sie hier das DRBD-Setup verwenden müssen, um den aktiven Master und den passiven Slave mithilfe von Kopien auf Blockebene synchron zu halten.
quelle
IMHO, Erstens sollte Ihr Slave in einer Nicht-Multi-Master-Konfiguration (Master / Slave) niemals Schreibvorgänge ausführen. Der Slave my.cnf sollte konfiguriert und der Server gestartet werden mit:
Um das Problem zu beheben, dass ein Master nicht synchron mit einem beschreibbaren Slave ist, der versehentlich Schreibvorgänge ausführt, müssen Sie die Daten auf beiden Hosts unterscheiden. Wenn keine Schlüsselkollision vorliegt, sollten Sie Ihren früheren Slave-Host zum Master befördern und Ihren alten Master als Slave-Host neu abbilden, der vom neuen Master repliziert. (Es könnte / wahrscheinlich gibt es hier Datenprobleme)
Schließlich , wenn dieses Szenario des Ausfalls / Ausfallzeit ist auch eine Möglichkeit , vorwärts gehen , sich die Zeit nehmen beide Hosts einzurichten als Multi-Master (log-bin, Server-ID, Versetzungen, etc.). Auf diese Weise können Sie Ausfälle und Ausfallzeiten bis zu einem gewissen Grad verringern.
Wenn Sie Master / Slave ausführen müssen , erhalten Sie mindestens einige Bonuspunkte für die Trennung von Lese- und Schreibbenutzerverbindungen in Ihrer ACL und Ihren Anwendungen.
quelle