Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Dies ist der beste Weg, um dynamische Daten in Echtzeit mit mysql bidirektional zu synchronisieren

Es ist nicht viel Leistung zu gewinnen, wenn Sie Ihre Datenbank auf zwei Mastern replizieren. Es gibt jedoch ein raffiniertes Failover, wenn Sie Ihre Anwendung richtig codieren.

Das Master-Master-Setup ist im Wesentlichen das gleiche wie das Slave-Master-Setup, hat aber beide Slaves gestartet und eine wichtige Änderung an Ihren Konfigurationsdateien auf jeder Box.

Meistern Sie MySQL 1:

auto_increment_increment = 2
auto_increment_offset = 1 

Meistern Sie MySQL 2:

auto_increment_increment = 2
auto_increment_offset = 2

Diese beiden Parameter stellen sicher, dass, wenn zwei Server aus irgendeinem Grund um einen Primärschlüssel streiten, sie die Replikation nicht duplizieren und beenden. Anstatt um 1 zu inkrementieren, wird jedes Auto-Increment-Feld standardmäßig um 2 erhöht. Bei einem Kästchen beginnt es versetzt bei 1 und führt die Sequenz 1 3 5 7 9 11 13 usw. aus. Beim zweiten Kästchen beginnt es versetzt bei 2 und laufen Sie entlang 2 4 6 8 10 12 usw. Aus aktuellen Tests geht hervor, dass das Auto-Inkrement die nächste freie Nummer zu nehmen scheint, nicht eine, die vorher gegangen ist.
Z.B. Wenn Server 1 die ersten 3 Datensätze (1 3 und 5) einfügt, wenn Server 2 den 4. einfügt, erhält er den Schlüssel 6 (nicht 2, der unbenutzt bleibt).

Sobald Sie das eingerichtet haben, starten Sie beide als Slaves.
Um zu überprüfen, ob beide funktionieren, verbinden Sie sich mit beiden Maschinen und führen Sie den Befehl SHOW SLAVE STATUS aus und Sie sollten beachten, dass sowohl Slave_IO_Running und Slave_SQL_Running sollten beide auf jedem Kästchen „JA“ sagen.

Erstellen Sie dann natürlich ein paar Datensätze in einer Tabelle und stellen Sie sicher, dass ein Kästchen nur Primärschlüssel mit ungeraden Nummern einfügt und das andere nur geradzahlige inkrementiert.

Führen Sie dann alle Tests durch, um sicherzustellen, dass Sie alle Standardanwendungen auf jeder Box ausführen können, während sie auf die andere repliziert wird.

Es ist relativ einfach, sobald es läuft.
Aber wie bereits erwähnt, rät MySQL davon ab und rät Ihnen, beim Schreiben Ihres Anwendungscodes auf diese Funktionalität zu achten.

Bearbeiten: Ich nehme an, es ist theoretisch möglich, weitere Master hinzuzufügen, wenn Sie sicherstellen, dass die Offsets korrekt sind und so weiter. Sie könnten jedoch realistischer einige zusätzliche Sklaven hinzufügen.