Verwenden der GTID-basierten Replikation für Amazon RDS-MySQL - Amazon Relational Database Service

Verwenden der GTID-basierten Replikation für Amazon RDS-MySQL

Nachstehend wird beschrieben, wie Sie globale Transaktionskennungen (Global Transaction Identifiers, GTIDs) mit Binärprotokoll (binlog)-Replikation unter Amazon RDS MySQL-DB-Instances verwenden.

Wenn Sie die binlog-Replikation verwenden und nicht mit der GTID-basierten Replikation mit MySQL vertraut sind, finden Sie unter Replication with Global Transaction Identifiers in der MySQL-Dokumentation Hintergrundinformationen.

Anmerkung

Die GTID-basierte Replikation wird für RDS MySQL-Version 5.7.23 und höhere Versionen von MySQL 5.7 unterstützt. Alle RDS MySQL-DB-Instances in einer Replikationskonfiguration müssen diese Anforderung erfüllen. Die GTID-basierte Replikation wird für RDS MySQL 5.5, 5.6 oder 8.0 nicht unterstützt.

Anmerkung

Informationen zum Konfigurieren der GTID-basierten Replikation mit einer externen Datenbank finden Sie unter Replikation mit einer MySQL oder MariaDB-Instance, die außerhalb von Amazon RDS ausgeführt wird.

Ü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 Amazon RDS-MySQL-Lesereplikaten oder mit einer externen MySQL-Datenbank können Sie die GTID-basierte Replikation verwenden. Für RDS-MySQL-Lesereplikate können Sie 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 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 AWS Management Console erscheint der Parameter gtid_mode als 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 oder einem Aurora MySQL-Cluster. Beide dieser Werte bewirken, dass Ihre RDS-DB-Instance oder Ihr Aurora-DB-Cluster GTIDs für Transaktionen verwenden, die zu einer externen Datenbank repliziert werden. ON erfordert, dass die externe Datenbank ebenfalls die GTID-basierte Replikation verwendet. ON_PERMISSIVE macht die GTID-basierte Replikation auf der externen Datenbank optional.

  • Wenn OFF_PERMISSIVE eingestellt ist, bedeutet dies, dass Ihre RDS-DB-Instances oder Ihr Aurora-DB-Cluster die eingehende Replikation von einer externen Datenbank akzeptieren können. Dies ist ungeachtet davon möglich, ob die externe Datenbank eine GTID-basierte Replikation verwendet oder ob nicht.

  • Wenn OFF eingestellt ist, können RDS-DB-Instances oder Ihr Aurora-DB-Cluster nur eingehende Replikation von externen Datenbanken akzeptieren, die keine GTID-basierte Replikation verwenden.

Weitere Informationen zu Parametergruppen finden Sie unter Arbeiten mit DB-Parametergruppen.

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

Wenn die GTID-basierte Replikation für eine RDS-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 DB-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 MASTER_AUTO_POSITION eine GTID-basierte Replikation zwischen der MySQL-DB-Instance und den Lesereplikaten herzustellen. 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 RDS-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 ein beliebiges Lesereplikat RDS-MySQL-Version 5.7.22 oder niedriger ausführt, aktualisieren Sie die DB-Instance oder das Lesereplikat. Führen Sie ein Upgrade auf RDS MySQL-Version 5.7.23 oder auf höhere Versionen von MySQL 5.7 durch.

    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 DB-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 Ihrer normalen Arbeitslast 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 RDS MySQL-DB-Instance mit Read Replicas

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

So deaktivieren Sie die GTID-basierte Replikation für eine RDS-MySQL-DB-Instance mit Lesereplikaten

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

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

    1. Stellen Sie sicher, dass bei der Parametergruppe, die der RDS-MySQL-DB-Instance und jedem Lesereplikat zugeordnet ist, gtid_mode auf ON_PERMISSIVE eingestellt ist.

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

    2. Starten Sie die RDS-MySQL-DB-Instance und jedes Lesereplikat 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. Stellen Sie sicher, dass bei der Parametergruppe, die der RDS-MySQL-DB-Instance und jedem Lesereplikat zugeordnet ist, gtid_mode auf OFF_PERMISSIVE eingestellt ist.

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

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

    Warten Sie, bis alle GTID-Transaktionen auf die primäre Aurora-Instance angewendet wurden. Um zu überprüfen, ob diese angewendet werden, gehen Sie wie folgt vor:

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

      Die Ausgabe sollte in etwa wie folgt aussehen.

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

      Notieren Sie die Datei und Position in Ihrer Ausgabe.

    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. Wenn die Abfrage für alle Lesereplikate zurückgegeben wird, fahren Sie mit dem nächsten Schritt fort.

  5. Setzen Sie die GTID-Parameter zurück, um die GTID-basierte Replikation zu deaktivieren:

    1. Die Parametergruppe, die der RDS-MySQL-DB-Instance und jedem Lesereplikat zugeordnet ist, muss über die folgenden Parametereinstellungen verfügen:

      • gtid_modeOFF

      • enforce_gtid_consistencyOFF

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