Aktivieren oder Deaktivieren des GTID-Modus in MySQL online

Aktivieren oder Deaktivieren des GTID-Modus in MySQL online

Grundlegende Übersicht

Wir wissen, dass es in MySQL zwei Möglichkeiten gibt, die Replikationssynchronisierung anzugeben:

  1. Angeben des Namens und Speicherorts der Binärprotokolldatei
    - Anonyme Transaktionen (Anonymous_gtid_log_event)
  2. GTID (Global Transaction ID)-basierte Spezifikation
    – GTID-Transaktion (Gtid_log_event)

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:

  • AUS - Nur die Replikation anonymer Transaktionen zulassen
  • OFF_PERMISSIVE - Neu generierte Transaktionen sind anonyme Transaktionen, aber GTID-Transaktionen dürfen auch repliziert und synchronisiert werden
  • ON_PERMISSIVE - Neu generierte Transaktionen sind GTID-Transaktionen, aber auch anonyme Transaktionen dürfen repliziert und synchronisiert werden
  • EIN - Erlaubt nur die Replikation von GTID-Transaktionen

GTID online aktivieren

1. Setzen Sie die GTID-Verifizierung ENFORCE_GTID_CONSISTENCY auf WARN

Der 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 ON

Bestä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_PERMISSIVE

Dieser 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_PERMISSIVE

Dieser 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 werden

Der 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 LOGS

Der 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 aktivieren

GTID 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 sicherzustellen

Um 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 deaktivieren

Die 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 zunächst die GTID-Modus-Replikation in eine POS-basierte Replikation.
  2. Setzen Sie GTID_MODE auf ON_PERMISSIVE
  3. Setzen Sie GTID_MODE auf OFF_PERMISSIVE
  4. Beachten 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.
  5. Auslösen von FLUSH LOGS
  6. Setzen Sie GTID_MODE auf OFF
  7. Setzen Sie ENFORCE_GTID_CONSISTENCY auf OFF
  8. Ändern Sie die GTID-bezogenen Parameter in der my.cnf-Konfigurationsdatei auf OFF

1. Ändern Sie die Replikation in POS-Punkt-basiert

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

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 ist

Beachten 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 vereinfacht

1. GTID online aktivieren

Bestimmen 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 deaktivieren

Bestimmen 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

Referenzlinks

https://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:
  • Umfassende Zusammenfassung zu MySQL GTID
  • MySQL-Datenbank GTID realisiert Master-Slave-Replikation (super praktisch)
  • Ein Beispiel für die Umstellung der traditionellen Replikation auf GTID-Replikation ohne Geschäftsunterbrechung in MySQL 5.7

<<:  Detaillierte Erläuterung der Vue + Axios-Anforderungsschnittstellenmethode und der Parameterübergabemethode

>>:  Beispielcode für die HTML-Formatierung von JSON

Artikel empfehlen

So implementieren Sie die King of Glory-Personal-Ladeseite mit CSS3

Wer King of Glory gespielt hat, sollte mit der Wi...

Grundlegende Referenztypen der erweiterten JavaScript-Programmierung

Inhaltsverzeichnis 1. Datum 2. RegExp 3. Original...

So konfigurieren Sie den Tomcat-Server für Eclipse und IDEA

Tomcat-Serverkonfiguration Jeder, der das Web ken...

Vue implementiert die Anzeige und Ausblendung der dreistufigen Navigation

In diesem Artikelbeispiel wird der spezifische Co...

impress.js Präsentationsschicht-Framework (Demonstrationstool) - erste Erfahrungen

Ich habe ein halbes Jahr lang nicht gebloggt, wofü...

MySQL berechnet die Anzahl der Tage, Monate und Jahre zwischen zwei Daten

Die in MySQL integrierte Datumsfunktion TIMESTAMP...

Verwendung der MySQL SHOW STATUS-Anweisung

Um die Leistung von MySQL anzupassen und den Dien...

So implementieren Sie eine bidirektionale MySQL-Sicherung

Die bidirektionale MySQL-Sicherung wird auch als ...

Anwendung schöner Stylesheets bei der Erstellung von XHTML+CSS-Webseiten

Dies ist ein Artikel, der vor langer Zeit geschrie...