Verwenden der GTID-basierten Replikation - Amazon Relational Database Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden der GTID-basierten Replikation

Im folgenden Inhalt wird erklärt, wie Sie Global Transaction Identifiers (GTIDs) mit der Binärprotokollreplikation (Binlog) zwischen Amazon RDS for MySQL MySQL-DB-Instances verwenden.

Wenn Sie die Binlog-Replikation verwenden und mit der GTID-basierten Replikation mit MySQL nicht vertraut sind, finden Sie weitere Informationen unter Replikation mit globalen Transaktions-Identifikatoren in der MySQL-Dokumentation.

Die GTID-basierte Replikation wird nur auf Versionen von RDS für MySQL 5.7, RDS für MySQL 8.0.26 und höheren MySQL-8.0-Versionen unterstützt. Alle MySQL-DB-Instances in einer Replikationskonfiguration müssen diese Anforderung erfüllen.

Übersicht über globale Transaktionskennungen (GTIDs)

Globale Transaktionskennungen (GTIDs) sind eindeutige IDs, die für festgeschriebene MySQL-Transaktionen generiert werden. Sie können GTIDs verwenden, um die Fehlerbehebung für die binlog-Replikation zu erleichtern.

MySQL verwendet für die binlog-Replikation zwei verschiedene Arten von Transaktionen:

  • GTID-Transaktionen – Transaktionen, die durch eine GTID gekennzeichnet sind.

  • Anonyme Transaktionen – Transaktionen, denen keine GTID zugeordnet ist.

In einer Replikationskonfiguration sind GTIDs bei allen DB-Instances eindeutig. GTIDs vereinfachen die Replikationskonfiguration, weil Sie nicht auf die Protokolldateipositionen verweisen müssen, wenn Sie diese verwenden. GTIDs erleichtern das Verfolgen von replizierten Transaktionen und legen fest, ob die Quellinstance und Replikate konsistent sind.

Zur Replikation von Daten mit RDS-MySQL-Lesereplikaten können Sie die GTID-basierte Replikation verwenden. Sie können beim Erstellen neuer Lesereplikate die GTID-basierte Replikation konfigurieren oder bestehende Lesereplikate zum Verwenden der GTID-basierten Replikation konvertieren.

Sie können die GTID-basierte Replikation in einer zeitlich verzögerten Replikationskonfiguration mit RDS for MySQL verwenden. Weitere Informationen finden Sie unter Konfigurieren der verzögerten Replikation mit MySQL.

Parameter für die GTID-basierte Replikation

Mit den folgenden Parametern konfigurieren Sie die GTID-basierte Replikation.

Parameter Zulässige Werte Beschreibung

gtid_mode

OFF, OFF_PERMISSIVE, ON_PERMISSIVE, ON

OFF gibt an, dass neue Transaktionen anonyme Transaktionen sind (d. h. keine GTIDs haben). Eine Transaktion muss anonym sein, um repliziert werden zu können.

OFF_PERMISSIVE gibt an, dass neue Transaktionen anonyme Transaktionen sind und alle Transaktionen repliziert werden können.

ON_PERMISSIVE gibt an, dass neue Transaktionen GTID-Transaktionen sind und alle Transaktionen repliziert werden können.

ON gibt an, dass neue Transaktionen GTID-Transaktionen sind. Eine Transaktion muss eine GTID-Transaktion sein, um repliziert zu werden.

enforce_gtid_consistency

OFF, ON, WARN

OFF erlaubt es Transaktionen, gegen die GTID-Konsistenz zu verstoßen.

ON verhindert das Verstoßen von Transaktionen gegen die GTID-Konsistenz.

WARN erlaubt es Transaktionen, gegen die GTID-Konsistenz zu verstoßen, generiert aber eine Warnung, wenn ein Verstoß auftritt.

Anmerkung

In der wird der Parameter als AWS Management Console angezeigt. gtid_mode gtid-mode

Bei einer GTID-basierten Replikation verwenden Sie diese Einstellungen für die Parametergruppe für Ihre DB-Instance oder Lesereplikate:

  • ON und ON_PERMISSIVE gelten nur für die ausgehende Replikation von einer RDS-DB-Instance. Beide Werte bewirken, dass Ihre RDS-DB-Instance GTIDs für Transaktionen verwenden, die repliziert werden. ON erfordert, dass die Zieldatenbank ebenfalls die GTID-basierte Replikation verwendet. Mit ON_PERMISSIVE ist die GTID-basierte Replikation auf der Zieldatenbank optional.

  • Wenn OFF_PERMISSIVE eingestellt ist, bedeutet dies, dass Ihre RDS-DB-Instances die eingehende Replikation von einer Quelldatenbank akzeptieren können. Dabei ist unerheblich, ob die Quelldatenbank eine GTID-basierte Replikation verwendet.

  • Wenn OFF eingestellt ist, bedeutet dies, dass Ihre RDS-DB-Instance nur eingehende Replikation von Quelldatenbanken akzeptieren, die keine GTID-basierte Replikation verwenden.

Weitere Informationen zu Parametergruppen finden Sie unter Arbeiten mit Parametergruppen.

Konfigurieren der GTID-basierten Replikation für neue Read Replicas

Wenn die GTID-basierte Replikation für eine RDS for MySQL-DB-Instance aktiviert ist, wird die GTID-basierte Replikation automatisch für Lesereplikate der DB-Instance konfiguriert.

So aktivieren Sie die GTID-basierte Replikation für neue Lesereplikate
  1. Die Parametergruppe, die der DB-Instance zugeordnet ist, muss über die folgenden Parametereinstellungen verfügen:

    • gtid_modeON oder ON_PERMISSIVE

    • enforce_gtid_consistencyON

    Weitere Informationen zum Einstellen von Konfigurationsparametern unter Verwendung von Parametergruppen finden Sie unter Arbeiten mit Parametergruppen.

  2. Wenn Sie die Parametergruppe der DB-Instance geändert haben, müssen Sie die DB-Instance neu starten. Weitere Information dazu finden Sie unter Neustarten einer DB-Instance.

  3. Erstellen Sie mindestens ein Lesereplikat der DB-Instance. Weitere Information dazu finden Sie unter Erstellen eines Lesereplikats.

Amazon RDS versucht, mithilfe von eine GTID-basierte Replikation zwischen der MySQL-DB-Instance und den Lesereplikaten herzustelle MASTER_AUTO_POSITION. Wenn der Versuch fehlschlägt, verwendet Amazon RDS Protokolldateipositionen für die Replikation mit den Lesereplikaten. Weitere Informationen zu MASTER_AUTO_POSITION finden Sie unter Automatische GTID-Positionierung in der MySQL-Dokumentation.

Konfigurieren der GTID-basierten Replikation für bestehende Read Replicas

Für eine vorhandene MySQL-DB-Instance mit Lesereplikaten, die keine GTID-basierte Replikation verwendet, können Sie eine GTID-basierte Replikation zwischen der DB-Instance und den Lesereplikaten konfigurieren.

So aktivieren Sie die GTID-basierte Replikation für bestehende Lesereplikate
  1. Wenn die DB-Instance oder eine Read Replica eine 8.0-Version von RDS für MySQL unter 8.0.26 verwendet, aktualisieren Sie die DB-Instance oder Read Replica auf 8.0.26 oder eine höhere MySQL 8.0-Version. Alle Versionen von RDS für MySQL 5.7 unterstützen die GTID-basierte Replikation.

    Weitere Informationen finden Sie unter Aktualisieren der MySQL DB-Engine.

  2. (Optional) Setzen Sie die GTID-Parameter zurück und testen Sie das Verhalten der DB-Instance und der Lesereplikate:

    1. Die Parametergruppe, die der DB-Instance zugeordnet ist, und jedes Lesereplikat muss den Wert für den Parameter enforce_gtid_consistency auf WARN gesetzt haben.

      Weitere Informationen zum Einstellen von Konfigurationsparametern unter Verwendung von Parametergruppen finden Sie unter Arbeiten mit Parametergruppen.

    2. Wenn Sie die Parametergruppe der DB-Instance geändert haben, müssen Sie die DB-Instance neu starten. Wenn Sie die Parametergruppe des Lesereplikats geändert haben, müssen Sie das Lesereplikat neu starten.

      Weitere Informationen finden Sie unter Neustarten einer DB-Instance.

    3. Führen Sie Ihre DB-Instance und Lesereplikate mit Ihrem normalen Workload aus und überwachen Sie die Protokolldateien.

      Wenn Ihnen Warnungen über GTID-inkompatible Transaktionen angezeigt werden, passen Sie Ihre Anwendung so an, dass sie nur GTID-kompatible Funktionen verwendet. Die DB-Instance darf keine Warnungen über GTID-inkompatible Transaktionen erzeugen, bevor Sie mit dem nächsten Schritt fortfahren.

  3. Setzen Sie die GTID-Parameter für die GTID-basierte Replikation zurück, die anonyme Transaktionen erlaubt, bis die Lesereplikate alle verarbeitet haben.

    1. Die Parametergruppe, die der DB-Instance zugeordnet ist, und jedes Lesereplikat muss die folgenden Parametereinstellungen haben:

      • gtid_modeON_PERMISSIVE

      • enforce_gtid_consistencyON

    2. Wenn Sie die Parametergruppe der DB-Instance geändert haben, müssen Sie die DB-Instance neu starten. Wenn Sie die Parametergruppe des Lesereplikats geändert haben, müssen Sie das Lesereplikat neu starten.

  4. Warten Sie, bis alle anonymen Transaktionen abgeschlossen sind. Um zu überprüfen, ob diese repliziert sind, gehen Sie wie folgt vor:

    1. Führen Sie die folgende Anweisung auf Ihrer Quell-DB-Instance aus.

      SHOW MASTER STATUS;

      Notieren Sie die Werte in den Spalten File und Position.

    2. Verwenden Sie bei jedem Lesereplikat die Datei- und Positionsinformationen der Quellinstance im vorherigen Schritt, um die folgende Abfrage auszuführen.

      SELECT MASTER_POS_WAIT('file', position);

      Führen Sie die folgende Anweisung aus, wenn der Dateiname mysql-bin-changelog.000031 lautet und die Position 107 ist.

      SELECT MASTER_POS_WAIT('mysql-bin-changelog.000031', 107);

      Wenn das Lesereplikat über die angegebene Position hinausgeht, wird die Abfrage sofort zurückgegeben. Andernfalls wartet die Funktion. Gehen Sie zum nächsten Schritt über, wenn die Abfrage für alle Lesereplikate zurückgegeben wird.

  5. Setzen Sie die GTID-Parameter ausschließlich für die GTID-basierte Replikation zurück.

    1. Die Parametergruppe, die der DB-Instance zugeordnet ist, und jedes Lesereplikat muss die folgenden Parametereinstellungen haben:

      • gtid_modeON

      • enforce_gtid_consistencyON

    2. Starten Sie die DB-Instance und jedes Lesereplikat neu.

  6. Führen Sie auf jedem Lesereplikat die folgende Prozedur aus.

    CALL mysql.rds_set_master_auto_position(1);

Deaktivieren einer GTID-basierten Replikation für eine MySQL-DB-Instance mit Read Replicas

Sie können eine GTID-basierte Replikation für die eine GTID-basierte Replikation für eine MySQL-DB-Instance mit Lesereplikaten verwenden.

GTID-basierte Replikation für eine MySQL-DB-Instance mit Lesereplikaten deaktivieren
  1. Führen Sie für jedes Read Replica das folgende Verfahren aus:

    CALL mysql.rds_set_master_auto_position(0);
  2. Setzen Sie den Wert für gtid_mode auf ON_PERMISSIVE zurück.

    1. Die Parametergruppe, die der MySQL-DB-Instance zugeordnet ist, und jedes Read Replica muss den Wert für den Parameter gtid_mode auf ON_PERMISSIVE gesetzt haben.

      Weitere Informationen zum Einstellen von Konfigurationsparametern unter Verwendung von Parametergruppen finden Sie unter Arbeiten mit Parametergruppen.

    2. Starten Sie die MySQL-DB-Instance und jedes Read Replica neu. Weitere Informationen zum Neustarten finden Sie unter Neustarten einer DB-Instance.

  3. Setzen Sie den Wert für gtid_mode auf OFF_PERMISSIVE zurück.

    1. Die Parametergruppe, die der MySQL-DB-Instance zugeordnet ist, und jedes Read Replica muss den Wert für den Parameter gtid_mode auf OFF_PERMISSIVE gesetzt haben.

    2. Starten Sie die MySQL-DB-Instance und jedes Read Replica neu.

  4. Warten Sie, bis alle GTID-Transaktionen auf alle Lesereplikate angewendet wurden. Gehen Sie wie folgt vor, um zu überprüfen, ob diese angewendet werden:

    1. Führen Sie auf der MySQL-DB-Instance den Befehl SHOW MASTER STATUS aus.

      Ihre Ausgabe sollte der folgenden Ausgabe ähneln.

      File Position ------------------------------------ mysql-bin-changelog.000031 107 ------------------------------------

      Notieren Sie die Datei und Position in Ihrer Ausgabe.

    2. Verwenden Sie für jedes Read Replica die Datei- und Positionsinformationen aus der Quellinstanz im vorherigen Schritt, um die folgende Abfrage auszuführen:

      Für MySQL 8.0.26 und höhere MySQL 8.0-Versionen

      SELECT SOURCE_POS_WAIT('file', position);

      Für MySQL 5.7-Versionen

      SELECT MASTER_POS_WAIT('file', position);

      Wenn der Dateiname beispielsweise lautet mysql-bin-changelog.000031 und die Position lautet107, führen Sie die folgende Anweisung aus:

      Für MySQL 8.0.26 und höhere MySQL 8.0-Versionen

      SELECT SOURCE_POS_WAIT('mysql-bin-changelog.000031', 107);

      Für MySQL 5.7-Versionen

      SELECT MASTER_POS_WAIT('mysql-bin-changelog.000031', 107);
  5. Setzen Sie die GTID-Parameter zurück, um die GTID-basierte Replikation zu deaktivieren.

    1. Die Parametergruppe, die der MySQL-DB-Instance zugeordnet ist, und jedes Read Replica muss die folgenden Parametereinstellungen haben:

      • gtid_modeOFF

      • enforce_gtid_consistencyOFF

    2. Starten Sie die MySQL-DB-Instance und jedes Read Replica neu.