Replikation aus externen Datenbanken mithilfe einer Dumpdatei einrichten

Auf dieser Seite wird gezeigt, wie Sie die Replikation mithilfe einer Dumpdatei einrichten, die von Ihrem externen Server erstellt wurde.

Es müssen dafür alle Schritte auf dieser Seite ausgeführt werden. Nach Abschluss können Sie die Quelldarstellungsinstanz auf die gleiche Weise verwalten und überwachen wie jede andere Cloud SQL-Instanz.

Hinweis

Für diesen Vorgang muss der externe Server konfiguriert, die Quelldarstellungsinstanz erstellt und das Cloud SQL-Replikat eingerichtet sein.

Berechtigungen für den Replikationsnutzer aktualisieren

Das Nutzerkonto für die Replikation auf dem externen Server ist so konfiguriert, dass Verbindungen von jedem Host (%) akzeptiert werden. Aktualisieren Sie dieses Nutzerkonto so, dass es nur mit dem Cloud SQL-Replikat verwendet werden kann. Öffnen Sie ein Terminal auf dem externen Server und geben Sie die folgenden Befehle ein:

MYSQL-Client

    UPDATE mysql.user
      SET Host='NEW_HOST'
      WHERE Host='OLD_HOST'
      AND User='USERNAME';
      GRANT REPLICATION SLAVE, EXECUTE
      ON *.* TO 'GCP_USERNAME'@'HOST';
    FLUSH PRIVILEGES;

example

    UPDATE mysql.user
      SET Host='192.0.2.0'
      WHERE Host='%'
      AND User='replicationUser';
      GRANT REPLICATION SLAVE, EXECUTE
      ON *.* TO 'gcp_user'@'gmail.com';
    FLUSH PRIVILEGES;
Attribut Beschreibung
NEW_HOST Geben Sie die ausgehende IP des Cloud SQL-Replikats an.
OLD_HOST Der aktuelle, dem Host zugewiesene Wert, den Sie ändern möchten.
USERNAME Das Nutzerkonto für die Replikation auf dem externen Server.
GCP_USERNAME Der Nutzername für das GCP-Nutzerkonto (Google Cloud Platform).
HOST Der Hostname für das GCP-Nutzerkonto (Google Cloud Platform).

Replikationseinstellungen prüfen

Prüfen Sie nach Abschluss der Einrichtung, ob das Cloud SQL-Replikat aus Daten vom externen Server erstellt werden kann.

Prüfen Sie zuerst, ob die Einstellungen für die externe Synchronisierung korrekt sind. Führen Sie dazu die Befehle unten aus, um Folgendes zu prüfen:

  • Verbindung zwischen dem Cloud SQL-Replikat und dem externen Server
  • Berechtigungen für den Replikationsnutzer
  • Versionskompatibilität
  • Das Cloud SQL-Replikat wurde noch nicht repliziert
  • Binäre Logs sind auf dem externen Server aktiviert
  • Eine globale Transaktions-ID (GTID) ist aktiviert

Öffnen Sie ein Terminal und prüfen Sie mit den folgenden Befehlen, ob die Einstellungen für die externe Synchronisierung korrekt sind:

curl

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "SYNC_MODE",
         "skipVerification": "SKIP_VERIFICATION"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE/verifyExternalSyncSettings

example

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "online",
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/myproject/instances/myreplica/verifyExternalSyncSettings
Attribut Beschreibung
SYNC_MODE verifyExternalSyncSettings prüft, ob das Cloud SQL-Replikat und der externe Server nach der Einrichtung der Replikation synchronisiert werden können. Zu den möglichen Synchronisierungsmodi gehören EXTERNAL_SYNC_MODE_UNSPECIFIED, ONLINE und OFFLINE.
SKIP_VERIFICATION Gibt an, ob der integrierte Prüfungsschritt vor der Synchronisierung der Daten übersprungen wird. Dies wird nur empfohlen, wenn Sie Ihre Replikationseinstellungen bereits geprüft haben.
PROJECT_ID Die ID Ihres Projekts in Google Cloud.
REPLICA_INSTANCE Die ID des Cloud SQL-Replikats.

Datenbank in einen Cloud Storage-Bucket exportieren

Sie können ein Cloud SQL-Replikat mit einer mysqldump-Datei in einem Cloud Storage-Bucket füllen. Dabei gelten folgende Bedingungen:

  • Sie müssen das in MySQL enthaltene Dienstprogramm mysqldump verwenden.
  • Während der Ausführung von mysqldump dürfen keine DDL-Vorgänge auf dem externen Server ausgeführt werden. Dies kann zu Inkonsistenzen in der Exportdatei führen.

So exportieren Sie Ihre Datenbank in einen Cloud Storage-Bucket:

  1. Erstellen Sie einen Cloud Storage-Bucket in Google Cloud.
  2. Öffnen Sie ein Terminal mit einem Client, der eine Verbindung zum externen Datenbankserver herstellt, und führen Sie den folgenden Befehl aus.

mysqldump

    mysqldump \
        --host=EXTERNAL_HOST \
        --port=EXTERNAL_PORT \
        --user=USERNAME\
        --password=PASSWORD \
        --databases=DATABASE_LIST  \
        --hex-blob \
        SOURCE_DATA  \
        --no-autocommit \
        --default-character-set=utf8mb4 \
        --single-transaction \
        --set-gtid-purged=on \
        ADD_DROP_TABLE \
        ROUTINES \
        COMPRESS \
        GZIP \
        | gsutil cp - gs://BUCKET/DUMP_FILENAME

Beispiel

    mysqldump \
        --host=192.0.2.1 \
        --port=3306 \
        --user=replicationUser \
        --password \
        --databases guestbook journal \
        --hex-blob \
        --master-data=1 \
        --no-autocommit \
        --default-character-set=utf8mb4 \
        --single-transaction \
        --compress \
        | gzip \
        | gsutil cp - gs://replica-bucket/external-database.sql.gz
Attribut Beschreibung
EXTERNAL_HOST Die IPv4- oder DNS-Adresse des externen Servers.
EXTERNAL_PORT Der Port für den externen Server. Wenn der externe Server in Cloud SQL gehostet wird, lautet dieser Port 3306.
USERNAME Der Name des Nutzerkontos für die Replikation oder der Name des Nutzerkontos mit Datenbankleseberechtigungen auf dem externen Server.
PASSWORD Nutzerpasswort für die Replikation.
DATABASE_LIST Durch Leerzeichen getrennte Liste aller Datenbanken auf dem externen Server mit Ausnahme der Systemdatenbanken (sys, mysql, performance_schema und information_schema). Verwenden Sie den MySQL-Befehl SHOW DATABASES, um Ihre Datenbanken aufzulisten.
SOURCE_DATA Wenn Sie eine ältere Version von MySQL als 8.0.26 verwenden, verwenden Sie --master-data als Wert für diesen Parameter. Bei Versionen von MySQL ab Version 8.0.26 legen Sie den Wert dieses Parameters auf --source-data fest.
ADD_DROP_TABLE Wenn Sie vor jeder CREATE TABLE-Anweisung eine DROP TABLE-Anweisung einfügen möchten, fügen Sie --add-drop-table hinzu.
ROUTINES Wenn Sie gespeicherte Routinen wie Prozeduren und Funktionen anzeigen lassen möchten, geben Sie in der Ausgabe für Dumpdatenbanken --routines an.
COMPRESS Um alle Informationen zu komprimieren, die zwischen dem Cloud SQL-Replikat und dem externen Server gesendet werden, verwenden Sie --compress.
GZIP Wenn Sie die Dumpdatei noch stärker komprimieren möchten, verwenden Sie | gzip. Verwenden Sie dies nicht, wenn Ihre Datenbank Daten enthält, die sich nicht gut komprimieren lassen, z. B. nicht komprimierbare Binärdaten oder JPG-Bilder.
BUCKET Der Name des Buckets, den Sie in Schritt 1 erstellt haben, um darin die Dumpdatei aufzunehmen.
DUMP_FILENAME Im Bucket wird eine Datei mit diesem Namen erstellt. Diese Datei enthält den Inhalt der Datenbank auf Ihrem externen Server.

Quelldarstellungsinstanz mit dem Dateipfad des Cloud Storage-Buckets aktualisieren

Die Quelldarstellungsinstanz ist eine Cloud SQL-Instanz, die den Quelldatenbankserver für das Cloud SQL-Replikat darstellt. Sie wird in der Google Cloud Console wie eine herkömmliche Cloud SQL-Instanz dargestellt. Die Instanz enthält aber keine Daten, erfordert keine Konfiguration oder Wartung und wirkt sich nicht auf die Abrechnung aus.

Die Datei source.json enthält Informationen zur Quelldarstellungsinstanz.

REST

{
  "name": "PRIMARY_INSTANCE_NAME",
  "region": "REGION_NAME",
  "databaseVersion": "DB_NAME_AND_VERSION",
  "onPremisesConfiguration": {
    "hostPort": "IP_ADDRESS_AND_PORT",
    "username": "USERNAME",
    "password": "PASSWORD"
  }
  "dumpFilePath" :"DUMP_FILE_PATH"
}

example

{
  "name": "cloudsql-source-instance",
  "region": "us-central1",
  "databaseVersion": "MYSQL_5_7",
  "onPremisesConfiguration": {
    "hostPort": "192.0.2.0:3306",
    "username": "replicationUser",
    "password": "486#@%*@"
  }
  "dumpFilePath" :"gs://replica-bucket/source-database.sql.gz"
}
Attribut Beschreibung
PRIMARY_INSTANCE_NAME Der Name der Cloud SQL-Instanz, die der Quelldarstellungsinstanz zugeordnet ist.
REGION_NAME Der Name der Region, die der Quelldarstellungsinstanz zugewiesen ist.
DB_NAME_AND_VERSION Der Name und die Versionsnummer der Datenbank, die der Quelldarstellungsinstanz zugeordnet ist.
IP_ADDRESS_AND_PORT Die IP-Adresse und Portnummer, die für die Quelldarstellungsinstanz reserviert sind.
USERNAME Der Nutzername der Quelldarstellungsinstanz.
PASSWORD Das Passwort der Quelldarstellungsinstanz.
DUMP_FILE_PATH Der Pfad der Dumpdatei, die den Inhalt der Datenbank auf Ihrem externen Server enthält.

Nachdem Sie das Cloud SQL-Replikat eingerichtet haben, müssen Sie die Quelldarstellungsinstanz mit dem Dateipfad des Cloud Storage-Buckets aktualisieren.

REST

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @JSON_PATH \
         -X PATCH \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/SOURCE_REPRESENTATION_INSTANCE

example

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @./source.json \
         -X PATCH \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/cloudsql-source-instance
Attribut Beschreibung
JSON_PATH Der Pfad der Datei JSON, die im Cloud Storage-Bucket gespeichert ist. Diese Datei enthält Daten zur Quelldarstellungsinstanz.
PROJECT_ID Die ID Ihres Projekts in Google Cloud.
SOURCE_REPRESENTATION_INSTANCE Der Name der Quelldarstellungsinstanz.

Replikation auf dem externen Server starten

Nachdem Sie festgestellt haben, dass es möglich ist, Daten vom externen Server zu replizieren, können Sie die Replikation ausführen.

Führen Sie beim ersten Import keine DDL-Vorgänge auf dem externen Server aus. Dies kann während des Imports zu Inkonsistenzen führen. Nach Abschluss des Importvorgangs wird das Replikat mithilfe der binären Logs auf dem externen Server auf den aktuellen Stand des externen Servers gebracht.

Öffnen Sie ein Terminal, melden Sie sich mit gcloud an und geben Sie dann den Befehl curl ein, um ein Replikat vom externen Server zu erstellen.

REST

  gcloud auth login
  ACCESS_TOKEN="$(gcloud auth print-access-token)"
  curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
       --header 'Content-Type: application/json' \
       --data '{
           "syncMode": "SYNC_MODE",
           "skipVerification": "SKIP_VERIFICATION"
         }' \
       -X POST \
       https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE/startExternalSync

example

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data '{
             "syncMode": "online",
             "skipVerification": false
           }' \
         -X POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/startExternalSync
Attribut Beschreibung
SYNC_MODE Prüft, ob das Cloud SQL-Replikat und der externe Server nach der Einrichtung der Replikation synchronisiert werden können.
SKIP_VERIFICATION Gibt an, ob der integrierte Prüfungsschritt vor der Synchronisierung der Daten übersprungen wird. Dies wird nur empfohlen, wenn Sie Ihre Replikationseinstellungen bereits geprüft haben.
PROJECT_ID Die ID Ihres Projekts in Google Cloud.
REPLICA_INSTANCE Die ID des Cloud SQL-Replikats.

Speicher bereinigen

Wenn Sie aus einer Datei in einem Bucket repliziert haben, können Sie diese Datei und diesen Bucket entfernen. Weitere Informationen finden Sie in der Cloud Storage-Dokumentation unter Objekte löschen und Buckets löschen.

Mit Replikation fortfahren

Nachdem Sie die Replikation vom externen Server gestartet haben, müssen Sie die Replikation überwachen und dann die Migration ausführen. Weitere Informationen finden Sie unter Replikation überwachen.

Fehlerbehebung

Problem Fehlerbehebung
Lost connection to MySQL server during query when dumping table. Die Quelle war möglicherweise nicht mehr verfügbar oder der Dump enthielt zu große Pakete.

Sorgen Sie dafür, dass die externe primäre Instanz für die Verbindungsherstellung verfügbar ist. Sie können die Werte der Flags net_read_timeout und net_write_timeout auf der Quellinstanz auch ändern, um den Fehler zu beenden. Weitere Informationen zu den zulässigen Werten für diese Flags finden Sie unter Datenbank-Flags konfigurieren.

Weitere Informationen zur Verwendung von mysqldump-Flags für die verwaltete Importmigration finden Sie unter Zulässige und standardmäßige Flags für die erste Synchronisierung.

Die erste Datenmigration war erfolgreich, aber es werden keine Daten repliziert. Dies kann daran liegen, dass in der Quelldatenbank bestimmte Replikations-Flags definiert sind, die die Replikation von manchen oder allen Datenbankänderungen verhindern.

Achten Sie darauf, dass Replikations-Flags wie binlog-do-db, binlog-ignore-db, replicate-do-db und replicate-ignore-db nicht so festgelegt sind, dass sie Konflikte verursachen.

Führen Sie den Befehl show master status in der primären Instanz aus, um die aktuellen Einstellungen aufzurufen.

Die Datenmigration verlief anfangs erfolgreich, danach jedoch nicht mehr. Versuchen Sie Folgendes:

  • Prüfen Sie die Replikationsmesswerte für Ihre Replikatinstanz im Bereich "Cloud Monitoring" der Google Cloud Console.
  • Die Fehler aus dem MySQL-E/A-Thread oder dem SQL-Thread finden Sie unter Cloud Logging in den mysql.err log-Dateien.
  • Dieser Fehler kann auch auftreten, wenn eine Verbindung zur Replikatinstanz hergestellt wird. Führen Sie den Befehl SHOW SLAVE STATUS aus und suchen Sie in der Ausgabe nach folgenden Feldern:
    • Slave_IO_Running
    • Slave_SQL_Running
    • Last_IO_Error
    • Last_SQL_Error
mysqld check failed: data disk is full. Das Datenlaufwerk der Replikatinstanz ist voll.

Erhöhen Sie die Laufwerkgröße der Replikatinstanz. Sie können die Laufwerkgröße manuell erhöhen oder die automatische Speichererweiterung aktivieren.

Replikationslogs prüfen

Beim Prüfen der Replikationseinstellungen werden Logs erstellt.

So können Sie diese Logs abrufen:

  1. Rufen Sie in der Google Cloud Console die Loganzeige auf.

    Zur Loganzeige

  2. Wählen Sie aus dem Drop-down-Menü Instanz das Cloud SQL-Replikat aus.
  3. Wählen Sie die Logdatei replication-setup.log aus.

Prüfen Sie, ob Folgendes zutrifft, wenn das Cloud SQL-Replikat keine Verbindung zum externen Server herstellen kann.

  • Jede Firewall auf dem externen Server ist so konfiguriert, dass Verbindungen von der ausgehenden IP-Adresse des Cloud SQL-Replikats zugelassen sind.
  • Ihre SSL/TLS-Konfiguration ist korrekt.
  • Nutzername, Host und Passwort des Nutzerkontos für die Replikation sind korrekt.

Nächste Schritte