Grundlegende ÜbersichtWir wissen, dass es in MySQL zwei Möglichkeiten gibt, die Replikationssynchronisierung anzugeben:
Die GTID-basierte Methode bietet offensichtliche Vorteile beim Master-Slave-Umschalten in einer Architektur mit einem Master und mehreren Slaves und ist auch praktischer für die Behebung täglicher Replikationsanomalien. Seit MySQL 5.7.6 wird das dynamische Öffnen und Schließen des GTID-Modus unterstützt. Der Parameter GTID_MODE hat die folgenden Werte:
GTID online aktivieren1. Setzen Sie die GTID-Verifizierung ENFORCE_GTID_CONSISTENCY auf WARNDer Zweck dieses Vorgangs besteht darin, SQL-Anweisungen, die in der Masterdatenbank ausgeführt werden, zuzulassen, um die GTID-Konsistenzprüfung zu verletzen, und nur Protokolle auf Warnstufe als Erinnerung im Fehlerprotokoll der Masterdatenbank auszugeben. Der Zweck besteht darin, zu berücksichtigen, dass die Anwendung aufgrund einiger Einschränkungen von GTID keine abnormalen Fehler verursacht, wenn der Replikationsmodus in den GTID-Modus geändert wird. Beispielsweise wird die Syntax CREATE TABLE AS SELECT im GTID-Modus nicht unterstützt, und wenn ENFORCE_GTID_CONSISTENCY auf WARN gesetzt ist, wird im Fehlerprotokoll nur eine Fehlermeldung angezeigt, keine direkte Fehlermeldung. ## Dieser Vorgang wird sowohl in der Master- als auch in der Slave-Datenbank ausgeführt. SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = WARN; 2. Setzen Sie die GTID-Verifizierung ENFORCE_GTID_CONSISTENCY auf ONBestätigen Sie nach einer gewissen Beobachtungszeit (in einer strengen Situation mehr als einen Tag), dass im Fehlerprotokoll des vorherigen Schritts keine relevanten Warninformationen angezeigt werden, und aktivieren Sie dann offiziell die GTID-Konsistenzprüfung. Wenn sie auf ON gesetzt ist und Sie die Anweisung CREATE TABLE AS SELECT erneut ausführen, wird direkt ein Fehler gemeldet. ## Dieser Vorgang wird sowohl in der Master- als auch in der Slave-Datenbank ausgeführt. SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON; 3. Setzen Sie GTID_MODE auf OFF_PERMISSIVEDieser Vorgang ist ein Übergangsattribut, das angibt, dass die neu generierte Transaktion immer noch eine anonyme Transaktion ist, aber auch die Replikation und Synchronisierung von GTID-Transaktionen ermöglicht. ## Dieser Vorgang wird sowohl in der Master- als auch in der Slave-Datenbank ausgeführt. SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE; 4. Setzen Sie GTID_MODE auf ON_PERMISSIVEDieser Vorgang ist immer noch ein Übergangsattribut und bedeutet, dass alle neu generierten Transaktionen GTID-Transaktionen sind, aber auch anonyme Transaktionen repliziert werden dürfen. ## Dieser Vorgang wird sowohl in der Master- als auch in der Slave-Datenbank ausgeführt. SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE; 5. (Wichtiger Punkt) Stellen Sie sicher, dass anonyme Transaktionen wiedergegeben werdenDer Zweck dieses Schritts besteht darin, sicherzustellen, dass alle alten anonymen Transaktionen vor der formalen Konvertierung in den vollständigen GTID-Modus wiedergegeben werden und dass bei Einstellung von GTID_MODE auf ON keine Replikationssynchronisierungsfehler durch verbleibende anonyme Transaktionen verursacht werden. Es gibt zwei Möglichkeiten, dies zu überprüfen: ## Dieser Vorgang kann nur in der Slave-Datenbank ausgeführt werden. ## Methode 1: Stellen Sie sicher, dass die Anzahl der vom Statuswert ausgegebenen anonymen Transaktionen 0 ist (Hinweis: Solange 0 angezeigt wird, bedeutet dies, dass die Konvertierung abgeschlossen ist, auch wenn sich der Statuswert später von 0 auf einen Wert größer als 0 ändert.) STATUS WIE „ONGOING_ANONYMOUS_TRANSACTION_COUNT“ ANZEIGEN; ## Führen Sie diese Anweisung mehrmals auf der Slave-Datenbank aus.## Methode 2: Fragen Sie die Ansicht LAST_SEEN_TRANSACTION ab, um zu beobachten, ob die aktuell synchronisierte Transaktion noch ANONYME Transaktionen enthält. Wählen Sie * aus performance_schema.replication_applier_status_by_worker; Stellen Sie sicher, dass die Anzahl der anonymen Transaktionen 0 ist Stellen Sie sicher, dass alle vom Wiedergabethread wiedergegebenen Transaktionen GTID-Transaktionen sind. 6. Lösen Sie eine Runde des Protokollwechsels aus FLUSH LOGSDer Zweck dieses Vorgangs besteht darin, die Rotation des Binärprotokolls in der Masterdatenbank auszulösen, sodass die neu generierten Binärprotokolle alle Transaktionen sind, die GTID enthalten (um zu verhindern, dass ein Binärprotokoll zwei Arten von Transaktionsprotokollen enthält). ## Dieser Vorgang kann nur in der Hauptdatenbank FLUSH LOGS durchgeführt werden; 7. GTID_MODE offiziell aktivierenGTID offiziell starten ## Dieser Vorgang wird sowohl in der Master- als auch in der Slave-Datenbank ausgeführt. SET @@GLOBAL.GTID_MODE = ON; WÄHLEN SIE @@GTID_MODE,@@ENFORCE_GTID_CONSISTENCY; 8. Ändern Sie die Konfigurationsdatei, um die Persistenz der GTID-Parameter sicherzustellenUm sicherzustellen, dass der Neustart nicht fehlschlägt, fügen Sie den GTID-Parameter in die Konfigurationsdatei my.cnf ein. Dieser Vorgang kann auch im ersten Schritt ausgeführt werden. ## Dieser Vorgang wird sowohl auf der Master- als auch auf der Slave-Datenbank mit gtid-mode = ON ausgeführt erzwingen-gtid-Konsistenz = 1 9. Ändern Sie den Replikationsmodus in den GTID-ModusÄndern Sie den Replikationsmodus von POS-basiert auf GTID-basiert ## Replikation stoppen STOP SLAVE; ## Wechseln Sie in den GTID-Modus CHANGE MASTER TO MASTER_AUTO_POSITION = 1; ## Replikation starten START SLAVE; ## Beobachten Sie den Replikationssynchronisierungsstatus SHOW SLAVE STATUS\G GTID online deaktivierenDie Methode ähnelt dem umgekehrten Vorgang zum Online-Aktivieren von GTID. Im Folgenden werden nur die Schritte und spezifischen Befehle ohne detaillierte Erklärung beschrieben.
1. Ändern Sie die Replikation in POS-Punkt-basiertSklave stoppen; Slave-Status anzeigen\G ## Nimm Master_Log_File und Exec_Master_Log_Pos aus show slave status\G und trage sie in CHANGE MASTER TO ein MASTER_AUTO_POSITION = 0, MASTER_LOG_FILE='mysql-bin.000017', MASTER_LOG_POS=224126137; Slave starten; Slave-Status anzeigen\G 2. Setzen Sie GTID_MODE auf ON_PERMISSIVE## Dieser Vorgang wird sowohl in der Master- als auch in der Slave-Datenbank ausgeführt. SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE; 3. Setzen Sie GTID_MODE auf OFF_PERMISSIVE## Dieser Vorgang wird sowohl in der Master- als auch in der Slave-Datenbank ausgeführt. SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE; 4. (Wichtiger Punkt) Stellen Sie sicher, dass die Wiedergabe der GTID-Transaktion abgeschlossen istBeachten Sie, dass die Statusvariable GTID_OWNED null wird und dass alle Transaktionen in der Tabelle replication_applier_status_by_worker in anonyme Transaktionen umgewandelt werden. ## Dieser Vorgang kann in der Slave-Datenbank ausgeführt werden. SELECT @@GLOBAL.GTID_OWNED; Wählen Sie * aus performance_schema.replication_applier_status_by_worker; 5. Auslösen von FLUSH LOGS## Dieser Vorgang kann in der Hauptdatenbank FLUSH LOGS durchgeführt werden; 6. Setzen Sie GTID_MODE auf OFF## Dieser Vorgang wird sowohl in der Master- als auch in der Slave-Datenbank ausgeführt. SET @@GLOBAL.GTID_MODE = OFF; 7. Setzen Sie ENFORCE_GTID_CONSISTENCY auf OFF## Dieser Vorgang wird sowohl in der Master- als auch in der Slave-Datenbank ausgeführt. SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = OFF; 8. Ändern Sie die GTID-bezogenen Parameter in der Konfigurationsdatei my.cnf auf OFF## Dieser Vorgang wird sowohl für die Master- als auch für die Slave-Datenbanken ausgeführt. gtid-mode = OFF erzwingen-gtid-Konsistenz = 1 Befehl vereinfacht1. GTID online aktivierenBestimmen Sie, ob der Befehl in der Master- oder Slave-Datenbank ausgeführt wird SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = WARNUNG; SETZEN Sie @@GLOBAL.ENFORCE_GTID_CONSISTENCY = EIN; SETZEN @@GLOBAL.GTID_MODE = OFF_PERMISSIVE; SETZEN SIE @@GLOBAL.GTID_MODE = ON_PERMISSIVE; STATUS WIE „ONGOING_ANONYMOUS_TRANSACTION_COUNT“ ANZEIGEN; Wählen Sie * aus performance_schema.replication_applier_status_by_worker; Protokolle spülen; SETZEN Sie @@GLOBAL.GTID_MODE = EIN; ## Änderung der Konfigurationsdatei gtid-mode = ON erzwingen-gtid-Konsistenz = 1 ## Ändern Sie den Replikationsmodus von POS-basiert auf GTID-basiert STOPPEN SIE SLAVE; ÄNDERN SIE MASTER IN MASTER_AUTO_POSITION = 1; SLAVE STARTEN; SLAVE-STATUS ANZEIGEN\G 2. GTID online deaktivierenBestimmen Sie, ob der Befehl in der Master- oder Slave-Datenbank ausgeführt wird Sklave stoppen; Slave-Status anzeigen\G ## Nimm Master_Log_File und Exec_Master_Log_Pos aus show slave status\G und trage sie in CHANGE MASTER TO ein MASTER_AUTO_POSITION = 0, MASTER_LOG_FILE='mysql-bin.000017', MASTER_LOG_POS=224126137; Slave starten; Slave-Status anzeigen\G SETZEN SIE @@GLOBAL.GTID_MODE = ON_PERMISSIVE; SETZEN @@GLOBAL.GTID_MODE = OFF_PERMISSIVE; WÄHLEN SIE @@GLOBAL.GTID_OWNED; Wählen Sie * aus performance_schema.replication_applier_status_by_worker; Protokolle spülen; SETZEN Sie @@GLOBAL.GTID_MODE = OFF; SETZEN Sie @@GLOBAL.ENFORCE_GTID_CONSISTENCY = OFF; ## Ändern Sie die GTID-bezogenen Parameter in der my.cnf-Konfigurationsdatei auf OFF gtid-Modus = AUS erzwingen-gtid-Konsistenz = 1 Referenzlinkshttps://dev.mysql.com/doc/refman/5.7/en/replication-mode-change-online.html https://dev.mysql.com/doc/refman/5.7/en/replication-mode-change-online-enable-gtids.html https://dev.mysql.com/doc/refman/5.7/en/replication-mode-change-online-disable-gtids.html Das Obige ist die Einführung des Herausgebers zum Aktivieren oder Deaktivieren des GTID-Modus in MySQL online. Ich hoffe, es wird für alle hilfreich sein. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken! Das könnte Sie auch interessieren:
|
>>: Beispielcode für die HTML-Formatierung von JSON
Wer King of Glory gespielt hat, sollte mit der Wi...
Inhaltsverzeichnis 1. Datum 2. RegExp 3. Original...
Anpassen eines Demo-Befehls Die Syntax der benutz...
1. Anforderungsbeschreibung Bei einem bestimmten ...
Tomcat-Serverkonfiguration Jeder, der das Web ken...
In diesem Artikelbeispiel wird der spezifische Co...
Ich habe ein halbes Jahr lang nicht gebloggt, wofü...
1. Installieren und starten Sie nginx # Installie...
Die in MySQL integrierte Datumsfunktion TIMESTAMP...
Um die Leistung von MySQL anzupassen und den Dien...
Die bidirektionale MySQL-Sicherung wird auch als ...
1. Mathematische Funktionen ABS(x) gibt den Absol...
Dies ist ein Artikel, der vor langer Zeit geschrie...
Ich habe vor Kurzem meine persönliche Website neu...
Einführung Beginnen wir wie immer mit einer Szene...