Replikation mit einer MySQL oder MariaDB-Instance, die außerhalb von Amazon RDS ausgeführt wird - Amazon Relational Database Service

Replikation mit einer MySQL oder MariaDB-Instance, die außerhalb von Amazon RDS ausgeführt wird

Sie können eine Replikation zwischen einer Amazon RDS-MySQL- oder MariaDB-DB-Instance und einer MySQL- oder MariaDB-Instance, die außerhalb von Amazon RDS ausgeführt wird, einrichten.

Bevor Sie beginnen

Sie konfigurieren die Replikation mithilfe der Position der Binärprotokolldatei von replizierten Transaktionen. Bei Amazon RDS-MySQL Version 5.7.23 und höheren MySQL 5.7 Versionen können Sie die Replikation auch über globale Transaktionskennungen (GTIDs) konfigurieren.

Die erforderlichen Berechtigungen für das Starten einer Replikation in einer Amazon RDS-DB-Instance sind beschränkt und für Ihre Amazon RDS-Hauptbenutzer nicht verfügbar. Stellen Sie deshalb sicher, dass Sie die Amazon RDS-Befehle mysql.rds_set_external_master und mysql.rds_start_replication verwenden, um eine Replikation zwischen Ihrer Live-Datenbank und Ihrer Amazon RDS-Datenbank einzurichten.

Aktualisieren Sie den Parameter binlog_format, um das binäre Protokollierungsformat für eine MySQL- oder MariaDB-Datenbank festzulegen. Erstellen Sie zum Ändern der binlog_format-Einstellungen eine neue DB-Parametergruppe, wenn Ihre DB-Instance die standardmäßige DB-Instance-Parametergruppe verwendet. Wir empfehlen, die Standardeinstellung für binlog_format zu verwenden. Diese lautet MIXED. Jedoch können Sie binlog_format auch auf ROW oder auf STATEMENT einstellen, wenn Sie ein spezifisches Format des Binärprotokolls benötigen. Starten Sie Ihre DB-Instance neu, damit die Änderungen übernommen werden.

Informationen zum Einstellen des Parameters binlog_format erhalten Sie unter Binäres Protokollformat. Informationen über die Auswirkungen der Verwendung unterschiedlicher MySQL-Replikationstypen finden Sie unter Vor- und Nachteile einer auf Anweisungen und einer auf Zeilen basierenden Replikation in der MySQL-Dokumentation.

Anmerkung

Verwenden Sie die Prozedur aus diesem Thema, um eine Replikation in allen Fällen zu konfigurieren, außer wenn die externe Instance vom Typ MariaDB-Version 10.0.2 oder höher und die Amazon RDS-Instance vom Typ MariaDB ist. Verwenden Sie in diesem Fall die in Konfigurieren einer GTID-basierten Replikation in einer Amazon RDS MariaDB-DB-Instance beschriebene Prozedur, um eine GTID-basierte Replikation einzurichten.

Konfigurieren der Replikation der Binärprotokolldateiposition mit einer externen Quell-Instance

Befolgen Sie diese Richtlinien, wenn Sie eine externe Quellinstance und ein Replikat auf Amazon RDS einrichten:

  • Überwachen Sie Failover-Ereignisse für die Amazon RDS-DB-Instance, die Ihr Replica ist. Tritt ein Failover auf, kann die DB-Instance, die Ihr Replikat ist, auf einem neuen Host mit einer anderen Netzwerkadresse wiederhergestellt werden. Weitere Informationen zum Überwachen von Failover-Ereignissen finden Sie unter Verwenden von Amazon RDS-Ereignisbenachrichtigungen.

  • Behalten Sie die Binärprotokolle auf Ihrer Quell-Instance, bis sichergestellt ist, dass sie auf das Replikat angewendet wurden. Durch das Aufbewahren können Sie sicherstellen, dass Sie Ihre Quell-Instance im Fall eines Ausfalls wiederherstellen können.

  • Schalten Sie automatische Backups in Ihrer Amazon RDS-DB-Instance ein. Das Einschalten automatischer Sicherungen stellt sicher, dass Sie Ihr Replikat zu einem bestimmten Zeitpunkt wiederherstellen können, wenn Sie die Quell-Instance und das Replikat neu synchronisieren müssen. Weitere Informationen zu Backups und zur zeitbezogenen Wiederherstellung finden Sie unter Sichern und Wiederherstellen einer Amazon RDS-DB-Instance.

So konfigurieren Sie die Replikation der Binärprotokolldateiposition mit einer externen Quell-Instance

  1. Legen Sie die Quell-MySQL- oder MariaDB-Instance als schreibgeschützt fest.

    mysql> FLUSH TABLES WITH READ LOCK; mysql> SET GLOBAL read_only = ON;
  2. Führen Sie den Befehl SHOW MASTER STATUS in der MySQL- oder MariaDB-Quell-Instance aus, um die Position des Binärprotokolls zu ermitteln.

    Sie erhalten eine Ausgabe, ähnlich der im folgenden Beispiel.

    File Position ------------------------------------ mysql-bin-changelog.000031 107 ------------------------------------
  3. Kopieren Sie die Datenbank aus der externen Instance in die Amazon RDS-DB-Instance mithilfe von mysqldump. Für große Datenbanken empfiehlt es sich, die Prozedur in Importieren von Daten in eine Amazon RDS-MySQL oder MariaDB-DB-Instance mit reduzierter Ausfallzeit zu verwenden.

    Für Linux, macOS oder Unix:

    mysqldump --databases database_name \ --single-transaction \ --compress \ --order-by-primary \ -u local_user \ -plocal_password | mysql \ --host=hostname \ --port=3306 \ -u RDS_user_name \ -pRDS_password

    Für Windows:

    mysqldump --databases database_name ^ --single-transaction ^ --compress ^ --order-by-primary ^ -u local_user ^ -plocal_password | mysql ^ --host=hostname ^ --port=3306 ^ -u RDS_user_name ^ -pRDS_password
    Anmerkung

    Zwischen der Option -p und dem eingegebenen Passwort darf kein Leerzeichen vorhanden sein.

    Zum Festlegen von Host-Name, Benutzername, Port und Passwort für die Verbindung mit Ihrer Amazon RDS-DB-Instance verwenden Sie die Optionen --host, --user (-u), --port und -p im Befehl mysql. Der Hostname ist der DNS-Name (Domain Name Service) aus dem Endpunkt der Amazon RDS-DB-Instance, z. B. myinstance.123456789012.us-east-1.rds.amazonaws.com. Sie finden den Endpunktwert in den Instance-Details in der AWS Management Console.

  4. Legen Sie die Quell-MySQL- oder MariaDB-Instance als wieder beschreibbar fest.

    mysql> SET GLOBAL read_only = OFF; mysql> UNLOCK TABLES;

    Weitere Informationen zum Erstellen von Backups zur Verwendung mit der Replikation finden Sie unter in der MySQL-Dokumentation.

  5. Fügen Sie in der AWS Management Console die IP-Adresse des Servers, der die externe Datenbank hostet, zu der VPC-Sicherheitsgruppe dieser Amazon RDS-DB-Instance hinzu. Weitere Informationen zum Ändern einer VPC-Sicherheitsgruppe finden Sie unter Sicherheitsgruppen für Ihre VPC im Amazon Virtual Private Cloud-Benutzerhandbuch.

    Die IP-Adresse kann sich ändern, wenn die folgenden Bedingungen erfüllt sind:

    • Sie verwenden eine öffentliche IP-Adresse für die Kommunikation zwischen der externen Quell-Instance und der DB-Instance.

    • Die externe Quell-Instance wurde gestoppt und neu gestartet.

    Wenn diese Bedingungen erfüllt sind, überprüfen Sie die IP-Adresse, bevor Sie sie hinzufügen.

    Es könnte sein, dass Sie Ihr lokales Netzwerk so konfigurieren müssen, dass es Verbindungen von der IP-Adresse Ihrer Amazon RDS-DB-Instance zulässt. Sie tun dies, damit Ihr lokales Netzwerk mit Ihrer externen MySQL- oder MariaDB-Instance kommunizieren kann. Verwenden Sie den Befehl host, um die IP-Adresse Ihrer Amazon RDS-DB-Instance herauszufinden.

    host db_instance_endpoint

    Der Hostname ist der DNS-Name aus dem Endpunkt der Amazon RDS-DB-Instance.

  6. Stellen Sie mit einem Client Ihrer Wahl eine Verbindung zur Quell-Instance her und erstellen Sie den für die Replikation zu verwendenden Benutzer. Verwenden Sie dieses Konto ausschließlich für die Replikation und beschränken Sie es auf Ihre Domäne, um die Sicherheit zu erhöhen. Im Folgenden wird ein Beispiel gezeigt.

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
  7. Erteilen Sie für die externe Instance die Sonderrechte REPLICATION CLIENT und REPLICATION SLAVE für Ihren Replikationsbenutzer. Erteilen Sie beispielsweise die Sonderrechte REPLICATION CLIENT und REPLICATION SLAVE in allen Datenbank für den 'repl_user'-Benutzer für Ihre Domäne, mit dem folgenden Befehl.

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
  8. Machen Sie die Amazon RDS-DB-Instance zum Replica. Stellen Sie dazu zunächst als Master-Benutzer eine Verbindung zur Amazon RDS-DB-Instance her. Identifizieren Sie dann die externe MySQL- oder MariaDB-Datenbank als Quell-Instance mithilfe des Befehls mysql.rds_set_external_master. Verwenden Sie den Namen und die Position der Protokolldatei, die Sie in Schritt 2 festgelegt haben. Im Folgenden wird ein Beispiel gezeigt.

    CALL mysql.rds_set_external_master ('mymasterserver.mydomain.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 0);
    Anmerkung

    Unter Amazon RDS-MySQL können Sie stattdessen die Verwendung der verzögerten Replikation wählen, indem Sie die gespeicherte Prozedur mysql.rds_set_external_master_with_delay ausführen. Ein Grund für die Nutzung der verzögerten Replikation besteht in der Möglichkeit zur Notfallwiederherstellung mit der gespeicherten Prozedur mysql.rds_start_replication_until. Derzeit wird die verzögerte Replikation für Amazon RDS MariaDB nicht unterstützt.

  9. Verwenden Sie für die Amazon RDS-DB-Instance den Befehl mysql.rds_start_replication, um die Replikation zu starten:

    CALL mysql.rds_start_replication;

Konfigurieren der GTID-basierten Replikation einer externen Quell-Instance

Wenn Sie eine externe Quell-Instance und ein Replikat in Amazon RDS eingerichtet haben, müssen Sie Failover-Ereignisse für die Amazon RDS-DB-Instance überwachen, dir Ihr Replikat ist. Tritt ein Failover auf, kann die DB-Instance, die Ihr Replikat ist, auf einem neuen Host mit einer anderen Netzwerkadresse wiederhergestellt werden. Weitere Informationen zum Überwachen von Failover-Ereignissen finden Sie unter Verwenden von Amazon RDS-Ereignisbenachrichtigungen.

Wichtig

GTID-basierte Replikation wird nur für Amazon RDS-MySQL Version 5.7.23 und höhere Versionen von MySQL 5.7 unterstützt. Die GTID-basierte Replikation wird für Amazon RDS-MySQL 5.5, 5.6 oder 8.0 nicht unterstützt.

So konfigurieren Sie die GTID-basierte Replikation mit einer externen Quell-Instance

  1. Bereiten Sie sich auf die GTID-basierte Replikation vor:

    1. Bei der externen MySQL- oder MariaDB-Datenbank muss GTID-basierte Replikation aktiviert sein. Dazu müssen für die externe Datenbank die folgenden Parameter auf die angegebenen Werte festgelegt sein:

      gtid_modeON

      enforce_gtid_consistencyON

      Weitere Informationen finden Sie unter Replikation mit globalen Transaktionskennungen in der MySQL-Dokumentation oder unter Globale Transaktions-ID in der MariaDB-Dokumentation.

    2. Die Parametergruppe, die der DB-Instance zugeordnet ist, muss über die folgenden Parametereinstellungen verfügen:

      • gtid_modeON, ON_PERMISSIVE oder OFF_PERMISSIVE.

      • enforce_gtid_consistencyON

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

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

  2. Legen Sie die Quell-MySQL- oder MariaDB-Instance als schreibgeschützt fest.

    mysql> FLUSH TABLES WITH READ LOCK; mysql> SET GLOBAL read_only = ON;
  3. Kopieren Sie die Datenbank aus der externen Instance in die Amazon RDS-DB-Instance mithilfe von mysqldump. Für große Datenbanken empfiehlt es sich, die Prozedur in Importieren von Daten in eine Amazon RDS-MySQL oder MariaDB-DB-Instance mit reduzierter Ausfallzeit zu verwenden.

    Für Linux, macOS oder Unix:

    mysqldump --databases database_name \ --single-transaction \ --compress \ --order-by-primary \ -u local_user \ -plocal_password | mysql \ --host=hostname \ --port=3306 \ -u RDS_user_name \ -pRDS_password

    Für Windows:

    mysqldump --databases database_name ^ --single-transaction ^ --compress ^ --order-by-primary ^ -u local_user ^ -plocal_password | mysql ^ --host=hostname ^ --port=3306 ^ -u RDS_user_name ^ -pRDS_password
    Anmerkung

    Stellen Sie sicher, dass kein Leezeichen zwischen der Option -p und dem eingegebenen Passwort vorhanden ist.

    Zum Festlegen von Host-Name, Benutzername, Port und Passwort für die Verbindung mit Ihrer Amazon RDS-DB-Instance verwenden Sie die Optionen --host, --user (-u), --port und -p im Befehl mysql. Der Hostname ist der DNS-Name aus dem Endpunkt der Amazon RDS-DB-Instance, z. B. myinstance.123456789012.us-east-1.rds.amazonaws.com. Sie finden den Endpunktwert in den Instance-Details in der AWS Management Console.

  4. Legen Sie die Quell-MySQL- oder MariaDB-Instance als wieder beschreibbar fest.

    mysql> SET GLOBAL read_only = OFF; mysql> UNLOCK TABLES;

    Weitere Informationen zum Erstellen von Backups zur Verwendung mit der Replikation finden Sie unter in der MySQL-Dokumentation.

  5. Fügen Sie in der AWS Management Console die IP-Adresse des Servers, der die externe Datenbank hostet, zu der VPC-Sicherheitsgruppe dieser Amazon RDS-DB-Instance hinzu. Weitere Informationen zum Ändern einer VPC-Sicherheitsgruppe finden Sie unter Sicherheitsgruppen für Ihre VPC im Amazon Virtual Private Cloud-Benutzerhandbuch.

    Die IP-Adresse kann sich ändern, wenn die folgenden Bedingungen erfüllt sind:

    • Sie verwenden eine öffentliche IP-Adresse für die Kommunikation zwischen der externen Quell-Instance und der DB-Instance.

    • Die externe Quell-Instance wurde gestoppt und neu gestartet.

    Wenn diese Bedingungen erfüllt sind, überprüfen Sie die IP-Adresse, bevor Sie sie hinzufügen.

    Es könnte sein, dass Sie Ihr lokales Netzwerk so konfigurieren müssen, dass es Verbindungen von der IP-Adresse Ihrer Amazon RDS-DB-Instance zulässt. Sie tun dies, damit Ihr lokales Netzwerk mit Ihrer externen MySQL- oder MariaDB-Instance kommunizieren kann. Verwenden Sie den Befehl host, um die IP-Adresse Ihrer Amazon RDS-DB-Instance herauszufinden.

    host db_instance_endpoint

    Der Hostname ist der DNS-Name aus dem Endpunkt der Amazon RDS-DB-Instance.

  6. Stellen Sie mit einem Client Ihrer Wahl eine Verbindung zur Quell-Instance her und erstellen Sie den für die Replikation zu verwendenden Benutzer. Verwenden Sie dieses Konto ausschließlich für die Replikation und beschränken Sie es auf Ihre Domäne, um die Sicherheit zu erhöhen. Im Folgenden wird ein Beispiel gezeigt.

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
  7. Erteilen Sie für die externe Instance die Sonderrechte REPLICATION CLIENT und REPLICATION SLAVE für Ihren Replikationsbenutzer. Erteilen Sie beispielsweise die Sonderrechte REPLICATION CLIENT und REPLICATION SLAVE in allen Datenbank für den 'repl_user'-Benutzer für Ihre Domäne, mit dem folgenden Befehl.

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
  8. Machen Sie die Amazon RDS-DB-Instance zum Replica. Stellen Sie dazu zunächst als Master-Benutzer eine Verbindung zur Amazon RDS-DB-Instance her. Identifizieren Sie dann die externe MySQL- oder MariaDB-Datenbank als primäre Replikationsinstance mithilfe des Befehls mysql.rds_set_external_master_with_auto_position. Im Folgenden wird ein Beispiel gezeigt.

    CALL mysql.rds_set_external_master_with_auto_position ('mymasterserver.mydomain.com', 3306, 'repl_user', 'password', 0, 0);
    Anmerkung

    Unter Amazon RDS-MySQL können Sie stattdessen die Verwendung der verzögerten Replikation wählen, indem Sie die gespeicherte Prozedur mysql.rds_set_external_master_with_delay ausführen. Ein Grund für die Nutzung der verzögerten Replikation besteht in der Möglichkeit zur Notfallwiederherstellung mit der gespeicherten Prozedur mysql.rds_start_replication_until_gtid. Derzeit wird die verzögerte Replikation für Amazon RDS MariaDB nicht unterstützt.

  9. Verwenden Sie für die Amazon RDS-DB-Instance den Befehl mysql.rds_start_replication, um die Replikation zu starten.

    CALL mysql.rds_start_replication;