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
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.
Themen
- Übersicht über globale Transaktionskennungen (GTIDs)
- Parameter für die GTID-basierte Replikation
- Konfigurieren der GTID-basierten Replikation für neue Read Replicas
- Konfigurieren der GTID-basierten Replikation für bestehende Read Replicas
- Deaktivieren einer GTID-basierten Replikation für eine MySQL-DB-Instance mit Read Replicas
Ü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 |
---|---|---|
|
|
|
|
|
|
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
undON_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. MitON_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
-
Die Parametergruppe, die der DB-Instance zugeordnet ist, muss über die folgenden Parametereinstellungen verfügen:
-
gtid_mode
–ON
oderON_PERMISSIVE
-
enforce_gtid_consistency
–ON
Weitere Informationen zum Einstellen von Konfigurationsparametern unter Verwendung von Parametergruppen finden Sie unter Arbeiten mit Parametergruppen.
-
-
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.
-
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
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
-
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.
-
(Optional) Setzen Sie die GTID-Parameter zurück und testen Sie das Verhalten der DB-Instance und der Lesereplikate:
-
Die Parametergruppe, die der DB-Instance zugeordnet ist, und jedes Lesereplikat muss den Wert für den Parameter
enforce_gtid_consistency
aufWARN
gesetzt haben.Weitere Informationen zum Einstellen von Konfigurationsparametern unter Verwendung von Parametergruppen finden Sie unter Arbeiten mit Parametergruppen.
-
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.
-
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.
-
-
Setzen Sie die GTID-Parameter für die GTID-basierte Replikation zurück, die anonyme Transaktionen erlaubt, bis die Lesereplikate alle verarbeitet haben.
-
Die Parametergruppe, die der DB-Instance zugeordnet ist, und jedes Lesereplikat muss die folgenden Parametereinstellungen haben:
-
gtid_mode
–ON_PERMISSIVE
-
enforce_gtid_consistency
–ON
-
-
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.
-
-
Warten Sie, bis alle anonymen Transaktionen abgeschlossen sind. Um zu überprüfen, ob diese repliziert sind, gehen Sie wie folgt vor:
-
Führen Sie die folgende Anweisung auf Ihrer Quell-DB-Instance aus.
SHOW MASTER STATUS;
Notieren Sie die Werte in den Spalten
File
undPosition
. -
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 Position107
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.
-
-
Setzen Sie die GTID-Parameter ausschließlich für die GTID-basierte Replikation zurück.
-
Die Parametergruppe, die der DB-Instance zugeordnet ist, und jedes Lesereplikat muss die folgenden Parametereinstellungen haben:
-
gtid_mode
–ON
-
enforce_gtid_consistency
–ON
-
-
Starten Sie die DB-Instance und jedes Lesereplikat neu.
-
-
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
-
Führen Sie für jedes Read Replica das folgende Verfahren aus:
CALL mysql.rds_set_master_auto_position(0);
-
Setzen Sie den Wert für
gtid_mode
aufON_PERMISSIVE
zurück.-
Die Parametergruppe, die der MySQL-DB-Instance zugeordnet ist, und jedes Read Replica muss den Wert für den Parameter
gtid_mode
aufON_PERMISSIVE
gesetzt haben.Weitere Informationen zum Einstellen von Konfigurationsparametern unter Verwendung von Parametergruppen finden Sie unter Arbeiten mit Parametergruppen.
-
Starten Sie die MySQL-DB-Instance und jedes Read Replica neu. Weitere Informationen zum Neustarten finden Sie unter Neustarten einer DB-Instance.
-
-
Setzen Sie den Wert für
gtid_mode
aufOFF_PERMISSIVE
zurück.-
Die Parametergruppe, die der MySQL-DB-Instance zugeordnet ist, und jedes Read Replica muss den Wert für den Parameter
gtid_mode
aufOFF_PERMISSIVE
gesetzt haben. -
Starten Sie die MySQL-DB-Instance und jedes Read Replica neu.
-
-
Warten Sie, bis alle GTID-Transaktionen auf alle Lesereplikate angewendet wurden. Gehen Sie wie folgt vor, um zu überprüfen, ob diese angewendet werden:
-
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.
-
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);
-
-
Setzen Sie die GTID-Parameter zurück, um die GTID-basierte Replikation zu deaktivieren.
-
Die Parametergruppe, die der MySQL-DB-Instance zugeordnet ist, und jedes Read Replica muss die folgenden Parametereinstellungen haben:
-
gtid_mode
–OFF
-
enforce_gtid_consistency
–OFF
-
-
Starten Sie die MySQL-DB-Instance und jedes Read Replica neu.
-