Externe Replikate konfigurieren

Auf dieser Seite wird beschrieben, wie Sie eine Cloud SQL-Instanz konfigurieren, die auf Replikate außerhalb von Cloud SQL repliziert werden kann. Außerdem wird erläutert, wie Sie die primäre Instanz in einer Konfiguration externer Replikate zurückstufen, um die Konfiguration umzukehren.

Weitere Informationen zur Konfiguration von externen Replikaten finden Sie unter Informationen zur externen Replikation.

Konfiguration externer Replikate einrichten

Hinweis

Bevor Sie mit dieser Aufgabe starten, sollten Sie eine Cloud SQL-Instanz und eine externe MySQL-Instanz haben, die die Anforderungen für externe Replikate erfüllen.

Primäre Instanz konfigurieren

  1. Rufen Sie in der Google Cloud Console die Seite Cloud SQL-Instanzen auf.
  2. Aktivieren Sie den Zugang für die IP-Adresse des externen Replikats auf der primären Instanz.

    Weitere Informationen zur Aktivierung des IP-Zugriffs finden Sie unter Zugriff für IP-Verbindungen konfigurieren.

  3. Notieren Sie sich die öffentliche IP-Adresse und die öffentliche ausgehende IP-Adresse der primären Instanz zur späteren Verwendung. Sie finden diese Werte auf der Seite Übersicht der Instanz.
  4. Klicken Sie rechts oben auf das Cloud Shell-Symbol ().
  5. Stellen Sie über die Cloud Shell-Eingabeaufforderung mit dem integrierten MySQL-Client eine Verbindung zur primären Instanz her:
       
    gcloud sql connect PRIMARY_INSTANCE_NAME \
    --user=root
       
       
  6. Geben Sie das Rootpasswort ein. Anschließend sollten Sie die mysql-Eingabeaufforderung sehen.
  7. Erstellen Sie einen speziellen Nutzer für die Replikation und gewähren Sie Replikationsberechtigungen:
    CREATE USER 'REPLICATION_USER'@'%' IDENTIFIED BY 'REPLICATION_USER_PASSWORD';
    GRANT REPLICATION SLAVE ON *.* TO 'REPLICATION_USER'@'%';
       
  8. Wenn Sie mit einer neuen Datenbank beginnen, erstellen Sie dieselbe Datenbank und dieselben Tabellen sowohl auf der primären Instanz als auch auf der Replikatinstanz. Beispiel:
    CREATE DATABASE test;
    
    USE test;
    
    CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);
    INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
    
  9. Wenn auf der primären Instanz bereits eine Datenbank vorhanden ist, müssen Sie dieselbe auf dem Replikat erstellen. Exportieren Sie dazu die Datenbank aus der primären Instanz in einen Cloud Storage-Bucket und importieren Sie sie in das Replikat. Daten aus Cloud SQL in eine SQL-Dumpdatei in Cloud Storage exportieren.

Externes Replikat konfigurieren

Warnung: Bei diesem Vorgang werden alle Daten, einschließlich Nutzer und Passwörter, die in einer MySQL-Datenbank auf dem Replikat gehostet werden, mit den Einstellungen und Daten aus der primären Instanz überschrieben.
  1. Siedeln Sie die neue externe MySQL-Instanz mit der Exportdatei, die Sie aus der primären Instanz erstellt haben, auf der Maschine an, die das Replikat hostet.

    Der folgende Befehl lädt beispielsweise eine exportierte Datei mit dem Namen mydump.sql:

    mysql --user=root --password < mydump.sql
    
  2. Bestimmen Sie die Server-ID für dieses Paar aus Replikat und primärer Instanz.

    Die Server-ID ist ein numerischer Wert (z. B. "3"), der in der gesamten Konfiguration von externen Replikaten einmalig sein muss, das heißt, jedes Replikat muss eine einmalige Server-ID haben.

  3. Fügen Sie der Optionsdatei my.cnf des Replikats die folgenden Optionen hinzu:
    [mysqld]
    server-id=[SERVER_ID]
    gtid_mode=ON
    enforce_gtid_consistency=ON
    log_slave_updates=ON
    replicate-ignore-db=mysql
    binlog-format=ROW
    log_bin=mysql-bin
    expire_logs_days=1
    read_only=ON
    

    Weitere Informationen zu den MySQL-Replikationsoptionen finden Sie unter Optionen zu Replikation und binärem Logging.

  4. Starten Sie den Prozess mysqld neu, damit die Konfigurationsdatei gelesen werden kann.
  5. Geben Sie in einem mysql-Client auf dem Replikat den folgenden Befehl ein:
    CHANGE MASTER TO MASTER_HOST='MASTER_IP_ADDRESS', MASTER_USER='REPLICATION_USER',
    MASTER_PASSWORD='REPLICATION_PASSWORD', MASTER_AUTO_POSITION=1;
    
  6. Starten Sie die Replikation auf dem Replikat:
    START SLAVE;
    
  7. Bestätigen Sie den Replikationsstatus:

    SHOW SLAVE STATUS\G;
    

    Wenn "Waiting for master to send event" angezeigt wird, funktioniert die Replikation.

Primäre Instanz eines externen Replikats zurückstufen

Wenn Sie eine Cloud SQL-Instanz mit einem externen Replikat haben, können Sie die Konfiguration umkehren. Dabei ändert sich Folgendes:

  • Das externe Replikat wird zur neuen primären Instanz.
  • Die Cloud SQL-Instanz wird zu einem Lesereplikat, das von dem Server repliziert wird, der zuvor das externe Replikat war und jetzt zum Quelldatenbankserver wird

So kehren Sie die Konfiguration externer Replikate um:

  1. Erstellen Sie eine Quelldarstellungsinstanz.

    Diese Instanz stellt den Quelldatenbankserver für das Cloud SQL-Replikat dar, nachdem der Rückstufungsvorgang abgeschlossen wurde.

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data '{
             "name": "SOURCE_REPRESENTATION_NAME",
             "region": "REGION",
             "databaseVersion": "EXTERNAL_SERVER_DATABASE_VERSION",
             "onPremisesConfiguration": {
                 "hostPort": "EXTERNAL_SERVER_IP:EXTERNAL_SERVER_PORT"
             }
         }' \
         -X POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances
    

    Verwenden Sie die Region, in der das Cloud SQL-Replikat gespeichert werden soll.

  2. Starten Sie den Rückstufungsprozess.

    Da Sie für diesen API-Aufruf vertrauliche Informationen angeben müssen, sollten Sie die Daten für cURL nicht in der Befehlszeile eingeben, sondern eine JSON-Datei verwenden.

    Erstellen Sie die Datendatei:

    {
        "demoteMasterContext": {
            "replicaConfiguration": {
                "mysqlReplicaConfiguration": {
                    "username": "REPLICATION_USERNAME",
                    "password": "PASSWORD",
                    "caCertificate": "EXTERNAL_SERVER_CA",
                    "clientCertificate": "CLIENT_CERT",
                    "clientKey": "PRIVATE_KEY"
                }
            },
            "masterInstanceName": "SOURCE_REPRESENTATION_NAME",
        },
    }
    

    Rufen Sie dann die API auf.

    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @PATH_TO_DATA_FILE \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_NAME/demoteMaster
    

    Weitere Informationen zu den Optionen für SSL/TLS finden Sie unter SSL/TLS-Optionen. Weitere Informationen zu den vom Objekt replicaConfiguration verwendeten Attributen finden Sie unter Von externem Server replizieren.

  3. Warten Sie, bis das externe Replikat alle ausstehenden Transaktionen von der primären Instanz abgeschlossen hat.

    Wenn das Replikat aktuell ist, zeigt der Befehl SHOW SLAVE STATUS für Seconds Behind Master 0 an und der Wert Executed_Gtid_Set ist für das externe Replikat und die primäre Cloud SQL-Instanz identisch.

  4. Verwenden Sie den mysql-Client, um die Replikation für das externe Replikat zu beenden:

    STOP SLAVE
    RESET SLAVE ALL
    
  5. Warten Sie, bis die Cloud SQL-Instanz mit der Replikation vom externen Server aus begonnen hat, der nun der Quelldatenbankserver ist.

    Bei Ausführung des Befehls SHOW SLAVE STATUS für die Cloud SQL-Instanz wird der Replikationsstatus angegeben.

  6. Wenn die Cloud SQL-Instanz erfolgreich vom Quelldatenbankserver repliziert wird, setzen Sie das Flag read_only für den Quelldatenbankserver auf off und aktualisieren Sie Ihre Anwendungen so, dass sie auf den Quelldatenbankserver zeigen.

Fehlerbehebung

Problem Fehlerbehebung
Fehlermeldung: The slave is connecting ... master has purged binary logs containing GTIDs that the slave requires. Die primäre Cloud SQL-Instanz umfasst automatische Sicherungen und binäre Logs. Außerdem wird die Wiederherstellung zu einem bestimmten Zeitpunkt aktiviert. Sie sollte deshalb genügend Logs haben, damit das Replikat aufholen kann. In diesem Fall weiß das Replikat jedoch nicht, ab welcher Zeile mit dem Lesen begonnen werden soll, obwohl die Binärlogs vorhanden sind.

Erstellen Sie eine neue Dumpdatei mit den richtigen Flag-Einstellungen und konfigurieren Sie das externe Replikat mithilfe dieser Datei.

  1. Stellen Sie über eine Compute Engine-Instanz eine Verbindung zum MySQL-Client her.
  2. Führen Sie mysqldump aus und verwenden Sie die Flags --master-data=1 und --flush-privileges.

    Wichtig: Fügen Sie nicht das Flag --set-gtid-purged=OFF ein.

    Weitere Informationen.

  3. Prüfen Sie, ob die soeben erstellte Dumpdatei die Zeile SET @@GLOBAL.GTID_PURGED='...' enthält.
  4. Laden Sie die Dumpdatei in einen Cloud Storage-Bucket hoch und konfigurieren Sie das Replikat mit der Dumpdatei.

Nächste Schritte