Vorwort Wenn wir einen MySQL-Cluster erstellen, müssen wir natürlich die Master-Slave-Synchronisierung der Datenbank abschließen, um die Datenkonsistenz sicherzustellen. Es gibt viele Möglichkeiten der Master-Slave-Synchronisierung, darunter ein Master und mehrere Slaves, verkettete Master-Slaves und mehrere Master und mehrere Slaves. Sie können sie entsprechend Ihren Anforderungen einrichten. Solange Sie jedoch eine Master-Slave-Synchronisierung benötigen, müssen Sie auf die Konfiguration der Server-ID achten, da sonst Ausnahmen bei der Master-Slave-Replikation auftreten. Bei der Steuerung der Datenbankdatenreplikation und der Protokollverwaltung gibt es zwei wichtige Konfigurationen: Server-ID und Server-UUID, die sich auf binäre Protokolldateidatensätze und globale Transaktionskennungen auswirken. Server-ID-Konfiguration Wenn Sie eine Master-Slave-Topologie verwenden, achten Sie darauf, für alle MySQL-Instanzen eine eindeutige Server-ID anzugeben. Der Standardwert ist 0. Wenn die Server-ID = 0 ist, zeichnet der Master weiterhin Binärprotokolle auf, lehnt jedoch alle Slave-Verbindungen ab. Der Slave lehnt Verbindungen zu anderen Instanzen ab. Die Server-ID der MySQL-Instanz ist eine globale Variable und kann direkt angezeigt werden: mysql> Variablen wie „%server_id%“ anzeigen; +---------------+-----------+ | Variablenname | Wert | +---------------+-----------+ | Server-ID | 171562767 | +---------------+-----------+ 1 Zeile im Satz (0,00 Sek.) Wir können die globale Variable Server-ID direkt online ändern, die Änderung wird jedoch nicht sofort wirksam. Denken Sie daher daran, den Dienst nach der Änderung neu zu starten. Nach dem Neustart wird die Systemkonfigurationsdatei erneut gelesen, wodurch die vorherige Änderung ungültig wird. Daher wird empfohlen, die Konfigurationsdatei zu ändern und den Dienst neu zu starten, anstatt sie online zu ändern: #meine.cnf [mysqld] #Replikation log-bin=mysql-bin Server-ID = 171562767 sync_binlog=1 binlog-ignore-db=mysql binlog-ignore-db=informationsschema Server-ID-Verwendung Die Server-ID wird zur Identifizierung der Datenbankinstanz verwendet, um Endlosschleifen von SQL-Anweisungen in verketteten Master-Slave- oder Multi-Master-Multi-Slave-Topologien zu verhindern:
Lassen Sie uns anhand von zwei Beispielen verdeutlichen, warum die Server-ID nicht wiederholt werden sollte: Wenn die Server-ID der Primär- und Standby-Datenbanken dupliziert werden Da replicate-same-server-id=0 standardmäßig ist, überspringt die Slave-Datenbank alle mit der Master-Datenbank synchronisierten Daten, was zu Inkonsistenzen zwischen Master- und Slave-Daten führt. Wenn die Server-IDs zweier Standby-Datenbanken dupliziert werden Dies führt dazu, dass die Verbindung zwischen der Slave-Datenbank und der Master-Datenbank von Zeit zu Zeit getrennt wird, was zu einer großen Anzahl von Ausnahmen führt. Gemäß dem Design von MySQL werden die Master- und Slave-Datenbanken über einen Ereignismechanismus verbunden und synchronisiert. Wenn bei einer neuen Verbindung die Server-ID identisch ist, trennt die Master-Datenbank die vorherige Verbindung und registriert die neue Verbindung erneut. Wenn Datenbank A mit der Hauptdatenbank verbunden ist, stellt Datenbank B eine Verbindung zu ihr her, wodurch die Verbindung zu Datenbank A getrennt wird. Datenbank A stellt dann die Verbindung wieder her und dieser Zyklus wiederholt sich, was zu einer großen Menge an abnormalen Informationen führt. Regeln zum Generieren der Server-ID Da die Server-ID nicht dieselbe sein kann, wenn wir 10 Instanzen haben, wie können wir sicherstellen, dass jede Instanz anders ist? Es gibt mehrere häufig verwendete Methoden:
Alle oben genannten Methoden sind in Ordnung, achten Sie jedoch darauf, den Maximalwert 2^32-1 nicht zu überschreiten. Der Wert sollte vorzugsweise >2 sein. Die Methode, die ich verwende, besteht aus den letzten beiden Ziffern der IP-Adresse + der lokalen MySQL-Instanznummer. Wenn Sie jedoch Docker zum Verwalten mehrerer Instanzen verwenden, wie generieren Sie dies? Können Sie sich vorstellen, ob es eine elegante Lösung gibt? Server-UUID-Konfiguration Der MySQL-Dienst erstellt und generiert automatisch die Server-UUID-Konfiguration:
Shell> cat ~/mysql/data/auto.cnf [Auto] server-uuid=fd5d03bc-cfde-11e9-ae59-48d539355108 Der Konfigurationsstil von auto.cnf ähnelt my.cnf, aber diese Datei enthält nur einen automatischen Konfigurationsblock und eine Server-UUID-Konfigurationszeile. Es wird automatisch erstellt. Ändern Sie den Inhalt daher nicht. In der Master-Slave-Topologie können Master und Slave die UUID des jeweils anderen kennen. Verwenden Sie „show slave hosts“ auf dem Master und „show slave status“ auf dem Slave, um das Feld „Master_UUID“ anzuzeigen. Der Parameter Server-UUID ersetzt nicht den Parameter Server-ID. Sie haben unterschiedliche Funktionen. Wenn beim Synchronisieren der Master- und Slave-Instanzen die Server-UUID der Master- und Slave-Instanzen identisch sind, wird ein Fehler gemeldet und das System wird beendet. Wir können den Fehler jedoch vermeiden, indem wir replicate-same-server-id=1 festlegen (nicht empfohlen). Verweise
Zusammenfassen Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Das könnte Sie auch interessieren:
|
>>: Der gesamte Prozess der Realisierung der Website-Internationalisierung mit Vite2 und Vue3
Bearbeiten Sie /etc/docker/daemon.json und fügen ...
Problem 1: Baidu Map verwendet gekachelte Bilder ...
Dieser Artikel enthält hauptsächlich Lösungen für...
Linux-Dateiberechtigungen Überprüfen wir zunächst...
Hintergrund Alles begann, als ein Klassenkamerad ...
Ursache: Der NVIDIA-Grafikkartentreiber ist besch...
1. Laden Sie das Ubuntu16.04-Image und den entspr...
Ich habe eine Weile nicht mit Servern gearbeitet....
Dieser Artikel stellt ein Tutorial zur Verwendung...
In diesem Artikel wird der spezifische Code für J...
Im Vorstellungsgespräch sollten Sie folgende Szen...
Vorwort Ich bin es gewohnt, Less/Sass zu schreibe...
Früher bestand das Unterstreichen in HTML darin, ...
Dieser Artikel beschreibt das Beispiel eines gepl...
In diesem Artikel wird der spezifische Code von v...