Von einem externen Server in Cloud SQL replizieren (Version 1.1)

Auf dieser Seite wird beschrieben, wie Sie von Daten auf einem externen Server ein Cloud SQL-Replikat erstellen. Sie können Daten mit einer verwalteten Dumpdatei replizieren oder aus einer Dumpdatei hochladen. Hier wird veranschaulicht, wie Sie beides mit einem externen Server ausführen können, der über seine IP-Adresse oder DNS-Adresse erreichbar ist.

Eine Alternative zu den auf dieser Seite beschriebenen Verfahren ist der Database Migration Service, der eine kontinuierliche Replikation oder einmalige Datenbankmigration von einem Quelldatenbankserver zu Cloud SQL bietet.

Hinweis

Terminologie

  • Quelldatenbankserver: Der von Ihnen verwaltete MySQL-Server. Dieser wird auch als externer primärer externer Server, Quelldatenbankserver oder externer Datenbankserver bezeichnet. Wenn Sie den Amazon Relational Database Service (RDS) nutzen, ist der Quelldatenbankserver enthalten.

  • Quelldarstellungsinstanz: Eine Cloud SQL-Instanz, die den Quelldatenbankserver für das Cloud SQL-Replikat darstellt. Sie ist in der Cloud Console sichtbar und sieht wie eine normale Cloud SQL-Instanz aus, enthält jedoch keine Daten, erfordert keine Konfiguration oder Wartung und wirkt sich nicht auf die Abrechnung aus. Sie enthält die Konfiguration des Quelldatenbankservers.

  • Cloud SQL-Replikat: Cloud SQL-Instanz, die vom Quelldatenbankserver repliziert wird. Wird auch als externes primäres Lesereplikat bezeichnet.

  • Nutzerkonto für die Replikation: MySQL-Nutzerkonto auf dem Quelldatenbankserver mit ausreichenden Berechtigungen für die Replikation zwischen dem Quelldatenbankserver und dem Google Cloud-Server.

  • Verwalteter Dump: Das direkte Kopieren von Daten vom Quelldatenbankserver in das Cloud SQL-Replikat. In diesem Fall stellt Cloud SQL über das Nutzerkonto der Replikation eine Verbindung zum Quelldatenbankserver her und führt mysqldump direkt auf dem Quelldatenbankserver aus, um Daten in das Cloud SQL-Replikat zu importieren.

Checkliste für Quelldatenbankserver

Alle

  • Auf dem Quelldatenbankserver muss MySQL 5.5, 5.6, 5.7 oder 8.0 installiert sein. Unterstützt werden MySQL Community Edition, Cloud SQL MySQL und MySQL auf Amazon RDS.

    • Wenn MySQL 8.0 auf dem Quelldatenbankserver installiert ist, können Sie Cloud SQL MySQL 8.0 mit Ihrem Cloud SQL-Replikat verwenden.
    • Wenn MySQL 5.7 auf dem Quelldatenbankserver installiert ist, können Sie Cloud SQL MySQL 8.0 mit Ihrem Cloud SQL-Replikat verwenden. Der SQL-Modus des Quelldatenbankservers darf NO_AUTO_CREATE_USER nicht enthalten. Wenn Trigger, Funktionen oder gespeicherte Prozeduren mit NO_AUTO_CREATE_USER erstellt wurden, müssen diese entfernt und ohne NO_AUTO_CREATE_USER neu erstellt werden.
    • Wenn MySQL 5.5 auf dem Quelldatenbankserver installiert ist, wird GTID nicht unterstützt.
  • Achten Sie darauf, dass binäre Logs aktiviert und folgende Voraussetzungen erfüllt sind:

  • Prüfen Sie, ob auf Ihrem Quelldatenbankserver GTID aktiviert ist. Dies wirkt sich auf die Vorgehensweise zum Einrichten der Replikation aus.

  • Prüfen Sie, ob der Quelldatenbankserver globale Lesesperr-Berechtigungen hat. Dies wirkt sich auf die Vorgehensweise zum Einrichten der Replikation aus.

  • Wenn das Cloud SQL-Replikat private IP-Adressen verwenden soll, muss der Quelldatenbankserver für den Zugriff über die VPC des Cloud SQL-Replikats konfiguriert werden. Richten Sie diese Konfiguration ein, bevor Sie die Schritte in dieser Anleitung ausführen.

  • Wenn die Quelldatenbank DEFINER-Klauseln (Ansichten, Ereignisse, Trigger oder gespeicherte Prozeduren) enthält, kann die Replikation fehlschlagen, je nachdem, wann die Anweisungen ausgeführt werden. Weitere Informationen zur Nutzung von DEFINER und zu möglichen Problemumgehungen in Cloud SQL

Amazon RDS

  • MySQL für Amazon RDS muss auf Ihrem Quelldatenbankserver installiert sein.

  • Beachten Sie, dass ein Quelldatenbankserver mit Amazon RDS in den meisten Fällen GTID nicht unterstützt, jedoch GTID für MySQL 5.7 unterstützt.

  • Beachten Sie, dass ein Quelldatenbankserver mit Amazon RDS keine globalen Lesesperr-Berechtigungen unterstützt.

Replikation einrichten

Sie können die Replikation aus einer Cloud Storage-Datei oder einem verwalteten Dump initiieren.

Bei der Einrichtung der Replikationseinstellungen können Sie auch festlegen, ob das Cloud SQL-Replikat nach Abschluss des ersten Imports mit dem Quelldatenbankserver synchronisiert bleiben soll. Ein Replikat, das synchronisiert werden soll, ist online. Ein Replikat, das nur einmal aktualisiert wird, ist offline.

Online + Datei

Zum Einrichten dieser Replikationsart muss Ihr Quelldatenbankserver mindestens eine der folgenden Berechtigungen haben: GTID-aktivierte oder globale Lesesperr-Berechtigungen.

  1. Richten Sie in Google Cloud ein Projekt ein.
  2. Installieren Sie das Google Cloud SDK für den Quelldatenbankserver.
  3. Erstellen Sie auf dem Quelldatenbankserver einen Nutzer für die Replikation.
  4. Exportieren Sie die Daten vom Quelldatenbankserver in einen Google Cloud-Bucket.
  5. Richten Sie die Quelldarstellungsinstanz ein.
  6. Richten Sie das Cloud SQL-Replikat ein.
  7. Prüfen Sie, ob die Instanzen korrekt zu Cloud SQL hinzugefügt wurden.
  8. Fügen Sie Nutzer dem Cloud SQL-Replikat hinzu.
  9. Aktualisieren Sie auf dem Quelldatenbankserver die Berechtigungen für den Replikationsnutzer.
  10. Lassen Sie eingehende Verbindungen auf dem Quelldatenbankserver zu.
  11. Prüfen Sie die Replikationseinstellungen.
  12. Prüfen Sie die Replikationslogs (optional).
  13. Replizieren Sie die Daten.
  14. Bestätigen Sie den Replikationsstatus.
  15. Speicher bereinigen

Online + verwalteter Dump

  1. Richten Sie in Google Cloud ein Projekt ein.
  2. Installieren Sie das Google Cloud SDK für den Quelldatenbankserver.
  3. Erstellen Sie auf dem Quelldatenbankserver einen Nutzer für die Replikation.
  4. Richten Sie die Quelldarstellungsinstanz ein.
  5. Richten Sie das Cloud SQL-Replikat ein.
  6. Prüfen Sie, ob die Instanzen korrekt zu Cloud SQL hinzugefügt wurden.
  7. Fügen Sie Nutzer dem Cloud SQL-Replikat hinzu.
  8. Aktualisieren Sie auf dem Quelldatenbankserver die Berechtigungen für den Replikationsnutzer.
  9. Lassen Sie eingehende Verbindungen auf dem Quelldatenbankserver zu.
  10. Prüfen Sie die Replikationseinstellungen.
  11. Prüfen Sie die Replikationslogs (optional).
  12. Replizieren Sie die Daten.
  13. Bestätigen Sie den Replikationsstatus.

Offline + Datei

  1. Richten Sie in Google Cloud ein Projekt ein.
  2. Installieren Sie das Google Cloud SDK für den Quelldatenbankserver.
  3. Erstellen Sie auf dem Quelldatenbankserver einen Nutzer für die Replikation.
  4. Exportieren Sie die Daten vom Quelldatenbankserver in einen Google Cloud-Bucket.
  5. Richten Sie die Quelldarstellungsinstanz ein.
  6. Richten Sie das Cloud SQL-Replikat ein.
  7. Prüfen Sie, ob die Instanzen korrekt zu Cloud SQL hinzugefügt wurden.
  8. Fügen Sie Nutzer dem Cloud SQL-Replikat hinzu.
  9. Aktualisieren Sie auf dem Quelldatenbankserver die Berechtigungen für den Replikationsnutzer.
  10. Lassen Sie eingehende Verbindungen auf dem Quelldatenbankserver zu.
  11. Replizieren Sie die Daten.
  12. Bestätigen Sie den Replikationsstatus.
  13. Speicher bereinigen

Offline + verwalteter Dump

  1. Richten Sie in Google Cloud ein Projekt ein.
  2. Installieren Sie das Google Cloud SDK für den Quelldatenbankserver.
  3. Erstellen Sie auf dem Quelldatenbankserver einen Nutzer für die Replikation.
  4. Richten Sie die Quelldarstellungsinstanz ein.
  5. Richten Sie das Cloud SQL-Replikat ein.
  6. Prüfen Sie, ob die Instanzen korrekt zu Cloud SQL hinzugefügt wurden.
  7. Fügen Sie Nutzer dem Cloud SQL-Replikat hinzu.
  8. Aktualisieren Sie auf dem Quelldatenbankserver die Berechtigungen für den Replikationsnutzer.
  9. Lassen Sie eingehende Verbindungen auf dem Quelldatenbankserver zu.
  10. Prüfen Sie die Replikationseinstellungen.
  11. Prüfen Sie die Replikationslogs (optional).
  12. Replizieren Sie die Daten.

Konfigurationsverfahren

Folgen Sie den nachstehenden Anleitungen entsprechend der gewählten Replikationskonfiguration.

Google Cloud-Projekt einrichten

  1. Melden Sie sich bei Ihrem Google-Konto an.

    Wenn Sie noch kein Konto haben, melden Sie sich hier für ein neues Konto an.

  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

  4. Aktivieren Sie die Cloud SQL Admin API.

    Aktivieren Sie die API

  5. Sie benötigen für Ihr Nutzerkonto die Rollen „Cloud SQL-Administrator“, „Storage-Administrator“ und „Compute-Betrachter“.

    Zur IAM-Seite

  6. Aktivieren Sie die Cloud SQL Admin API.

    Aktivieren Sie die API

Google Cloud SDK installieren

Installieren Sie das Google Cloud SDK für Ihren Quelldatenbankserver, um die Replikation zu konfigurieren. Installieren Sie es auf Ihrem Quelldatenbankserver, sofern es nicht bereits an einem anderen Speicherort installiert ist.

Nutzerkonto für Replikation erstellen

Auf dem Quelldatenbankserver muss ein MySQL-Nutzerkonto mit der Berechtigung REPLICATION_SLAVE vorhanden sein. Dieses Nutzerkonto sollte nur zum Verwalten der Replikation verwendet werden. Öffnen Sie auf dem Quelldatenbankserver ein Terminal und geben Sie die folgenden MySQL-Befehle ein, um ein Nutzerkonto für die Replikation einzurichten:

MySQL

// Online migration with Cloud Storage file:
CREATE USER '[USERNAME]'@'%' IDENTIFIED BY '[PASSWORD]';
GRANT REPLICATION SLAVE, EXECUTE ON *.* TO '[USERNAME]'@'[HOST]';
FLUSH PRIVILEGES;

// Online migration with managed dump and GTID enabled:
CREATE USER '[USERNAME]'@'%' IDENTIFIED BY '[PASSWORD]';
GRANT REPLICATION SLAVE, EXECUTE, SELECT, SHOW VIEW ON *.* TO '[USERNAME]'@'[HOST]';
FLUSH PRIVILEGES;

// Online migration with managed dump and GTID disabled:
CREATE USER '[USERNAME]'@'%' IDENTIFIED BY '[PASSWORD]';
GRANT REPLICATION SLAVE, EXECUTE, SELECT, SHOW VIEW, REPLICATION CLIENT,
RELOAD ON *.* TO '[USERNAME]'@'[HOST]';
FLUSH PRIVILEGES;

// Offline migration with managed dump:
CREATE USER '[USERNAME]'@'%' IDENTIFIED BY '[PASSWORD]';
GRANT SELECT, SHOW VIEW ON *.* TO '[USERNAME]'@'[HOST]';
FLUSH PRIVILEGES;

Beispiel

CREATE USER 'bluewing'@'%' IDENTIFIED BY '8*&fwwd';
GRANT REPLICATION SLAVE ON *.* TO 'bluewing'@'%';
FLUSH PRIVILEGES;
Attribut Wert
[USERNAME] Das Nutzerkonto für die Replikation auf dem Quelldatenbankserver.
[PASSWORD] Das Passwort des Nutzerkontos für die Replikation.
[HOST] Legen Sie diese Option auf % fest, um alle Verbindungen von jedem Host zu akzeptieren. In einem späteren Schritt wird dies geändert, sodass nur Verbindungen vom Cloud SQL-Replikat akzeptiert werden.

Daten in einen Google Cloud-Bucket exportieren

Sie können ein Cloud SQL-Replikat mit Daten aus einem Google Cloud-Bucket füllen. Dabei gelten folgende Bedingungen:

  • Sie müssen das in MySQL enthaltene Dienstprogramm mysqldump verwenden.
  • Führen Sie während der Ausführung von mysqldump auf dem Quelldatenbankserver keine DDL-Vorgänge aus. Dies kann zu Inkonsistenzen in der Exportdatei führen.

So laden Sie Ihre Daten in einen Bucket hoch:

  1. Erstellen Sie einen Bucket in Google Cloud.
  2. Öffnen Sie auf dem Quelldatenbankserver ein Terminal und führen Sie den folgenden Befehl aus.

mysqldump

mysqldump \
    --host=[SOURCE_HOST] \
    --port=[SOURCE_PORT] \
    --user=[USERNAME]\
    --password \
    [DATABASE_LIST]  \
    --hex-blob \
    [SOURCE_DATA]  \
    --no-autocommit \
    --default-character-set=utf8mb4 \
    --single-transaction \
    [GTID_PURGED] \
    [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/source-database.sql.gz
Attribut Wert
[SOURCE_HOST] Die IPv4- oder DNS-Adresse des Quelldatenbankservers.
[SOURCE_PORT] Der Port für den Quelldatenbankserver. Wenn der Quelldatenbankserver in Cloud SQL gehostet wird, ist dies 3306.
[USERNAME] Name des Nutzerkontos für die Replikation oder des Nutzerkontos mit Datenbankleseberechtigungen auf dem Quelldatenbankserver.
[DATABASE_LIST] Die Datenbanken auf dem Quelldatenbankserver, die in diesem Format enthalten sein sollen: --databases database_name1 <database_name2 ...>
[SOURCE_DATA] Wenn der Quelldatenbankserver GTID nicht unterstützt und Sie berechtigt sind, auf dessen globale Lesesperre zuzugreifen, verwenden Sie --master-data=1. Verwenden Sie andernfalls dieses Attribut nicht.
[GTID_PURGED] Wenn der Quelldatenbankserver GTID unterstützt, verwenden Sie --set-gtid-purged=on. Verwenden Sie andernfalls dieses Attribut nicht.
[ADD_DROP_TABLE] Wenn Sie vor jeder CREATE TABLE-Anweisung eine DROP TABLE-Anweisung einfügen möchten, fügen Sie --add-drop-table ein.
[ROUTINES] Wenn Sie gespeicherte Routinen, wie Verfahren und Funktionen, anzeigen lassen möchten, geben Sie in der Ausgabe für Dumpdatenbanken --routines an.
[COMPRESS] Wenn Sie alle zwischen dem Cloud SQL-Replikat und dem Quelldatenbankserver übertragenen Informationen komprimieren möchten, 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 im ersten Schritt erstellt haben und der die Dumpdatei enthalten soll.
[DUMP_FILENAME] Im Bucket wird eine Datei mit diesem Namen erstellt. In dieser Datei werden die Inhalte der Datenbank auf dem Quelldatenbankserver gespeichert.

Quelldarstellungsinstanz einrichten

Die Quelldarstellungsinstanz verweist auf den Quelldatenbankserver. Sie enthält nur die Anfragedaten vom Quelldatenbankserver. In diesem Schritt erstellen Sie die Anfragedaten und verwenden diese in einem cURL-Befehl, mit dem die Quelldarstellungsinstanz in Cloud SQL erstellt wird.

Anfragedaten erstellen

Die Anfragedaten enthalten grundlegende Informationen zu Ihrem Quelldatenbankserver im JSON-Format. Die Anfragedaten können für ein Cloud SQL-Replikat in einem öffentlichen oder privaten Netzwerk konfiguriert werden und sollten folgende Informationen enthalten:

source.json

{
  "name": "[SOURCE_NAME]",
  "region": "[REGION]",
  "databaseVersion": "[MYSQL_VERSION]",
  "onPremisesConfiguration": {
    "hostPort": "[SOURCE_HOST]",
    "username": "[USERNAME]",
    "password": "[PASSWORD]",
    "dumpFilePath": "gs://[BUCKET]/[DUMP_FILE]",
    "caCertificate": "[SOURCE_CERT]",
    "clientCertificate": "[CLIENT_CERT]",
    "clientKey": "[CLIENT_KEY]"
  }
}

Beispiel für verwalteten Dump

// example of source.json for source database server that
// - initiates replication from a Cloud SQL managed dump
// - does not use SSL/TSL

{
  "name": "cloudsql-source-instance",
  "region": "us-central1",
  "databaseVersion": "MYSQL_5_7",
  "onPremisesConfiguration": {
    "hostPort": "192.0.2.0:3306",
    "username": "replicationUser",
    "password": "486#@%*@"
  }
}

Beispiel für Dumpdatei

// example of source.json for source database server that
// - initiates replication from a file
// - uses SSL/TSL

{
  "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",
    "caCertificate": "content of your certificate",
    "clientCertificate": "content of your certificate",
    "clientKey": "content of your client key"
  }
}
Optionale Felder Hinweise
dumpFilePath Nur einschließen, wenn Sie die Replikation mit einer Dumpdatei einrichten, die in einem Cloud SQL-Bucket vorhanden ist.
caCertificate Nur einschließen, wenn auf dem Quelldatenbankserver SSL/TLS verwendet wird.
clientCertificate Nur einschließen, wenn auf dem Quelldatenbankserver SSL/TLS verwendet wird.
clientKey Nur einschließen, wenn auf dem Quelldatenbankserver SSL/TLS verwendet wird.
Attribut Wert
[SOURCE_NAME] Der Name der zu erstellenden Quelldarstellungsinstanz.
[REGION] Die Region, in der sich die Quelldarstellungsinstanz befinden soll.
[MYSQL_VERSION] Die auf dem Quelldatenbankserver ausgeführte MySQL-Version. Die Auswahlmöglichkeiten sind MYSQL_5_5, MYSQL_5_6, MYSQL_5_7 oder MYSQL_8_0.
[SOURCE HOST] Die IPv4-Adresse und der Port für den Quelldatenbankserver oder die DNS-Adresse des Quelldatenbankservers. Eine DNS-Adresse kann bis zu 60 Zeichen enthalten. Wenn der Quelldatenbankserver in Cloud SQL gehostet wird, ist der Port 3306.
[USERNAME] Das Nutzerkonto für die Replikation auf dem Quelldatenbankserver.
[PASSWORD] Das Passwort des Nutzerkontos für die Replikation.
[BUCKET] Der Name des Buckets, der die Dumpdatei enthält.
[DUMP_FILE] Eine Datei in dem Bucket, die die Daten vom Quelldatenbankserver enthält.
[CLIENT_CA_CERT] Das CA-Zertifikat auf dem Quellserver.
[CLIENT_CERT] Das Clientzertifikat auf dem Quellserver. Nur für die Server-Client-Authentifizierung erforderlich.
[CLIENT_KEY] Die private Schlüsseldatei für das Clientzertifikat auf dem Quelldatenbankserver. Nur für die Server-Client-Authentifizierung erforderlich.

Quelldarstellungsinstanz erstellen

Erstellen Sie vor diesem Schritt eine JSON-Datei, die die Quellanfragedaten enthält. Öffnen Sie anschließend ein Terminal und erstellen Sie mit den folgenden Befehlen eine Quelldarstellungsinstanz in Cloud SQL:

cURL

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 POST \
     https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances

Beispiel

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 POST \
     https://www.googleapis.com/sql/v1beta4/projects/MyProject/instances
Attribut Wert
[PROJECT_ID] Die ID Ihres Projekts in Google Cloud.
[JSON_PATH] Der Pfad zur JSON-Datei, die die Anfragedaten für den Quelldatenbankserver enthält.

Cloud SQL-Replikat einrichten

Das Cloud SQL-Replikat wird die Daten aus dem Quelldatenbankserver enthalten. In diesem Schritt erstellen Sie die Anfragedaten und verwenden sie in einem cURL-Befehl, mit dem das Cloud SQL-Replikat in Cloud SQL erstellt wird.

Anfragedaten erstellen

Die Anfragedaten enthalten grundlegende Informationen zu Ihrem Quelldatenbankserver und Cloud SQL-Replikat im JSON-Format. Die Anfragedaten für ein Cloud SQL-Replikat können in einem öffentlichen oder privaten Netzwerk konfiguriert werden und sollten folgende Informationen enthalten:

replica.json

{
    "settings": {
        "tier": "[TIER]",
        "dataDiskSizeGb": "[DISK_SIZE]",
        "ipConfiguration": {
            "privateNetwork": "projects/[PROJECT_ID]/global/networks/[NETWORK_NAME]"
         }
    },
    "masterInstanceName": "[SOURCE_NAME]",
    "region": "[SOURCE_REGION]",
    "databaseVersion": "[MYSQL_VERSION]",
    "name": "[REPLICA_NAME]"
}

Beispiel

{
    "settings": {
        "tier": "db-n1-standard-4",
        "dataDiskSizeGb": "100"
    },
    "masterInstanceName": "source-instance",
    "region": "us-central1",
    "databaseVersion": "MYSQL_5_7",
    "name": "replica-instance"
}
Optionale Felder Hinweise
ipConfiguration Geben Sie dies nur an, wenn sich das Cloud SQL-Replikat in einem privaten Netzwerk befindet.
Attribut Wert
[TIER] Der Maschinentyp zum Hosten der Replikatinstanz. Wenn Sie nicht wissen, welchen Maschinentyp Sie verwenden sollen, beginnen Sie mit db-n1-standard-2. Bei Bedarf können Sie die Größe und andere Parameter ändern.
[DISK_SIZE] Die Speichergröße für das Cloud SQL-Replikat in GB.
[SOURCE_NAME] Der Name der Quelldarstellungsinstanz.
[SOURCE_REGION] Die Region, die der Quelldarstellungsinstanz zugewiesen ist.
[MYSQL_VERSION] Die MySQL-Version, die mit dem Cloud SQL-Replikat verwendet werden soll. Zur Auswahl stehen MYSQL_5_6, MYSQL_5_7 und MYSQL_8_0. Die hier ausgewählte Version muss mindestens der MySQL-Version entsprechen, die auf dem Quelldatenbankserver ausgeführt wird, oder kann neuer sein. Wenn Sie beispielsweise auf Ihrem Quelldatenbankserver MySQL 5.5 verwenden, können Sie MySQL 5.6 mit dem Cloud SQL-Replikat verwenden.
[REPLICA_NAME] Der Name des zu erstellenden Cloud SQL-Replikats.
[PROJECT_ID] Die ID Ihres Projekts in Google Cloud.
[NETWORK_NAME] Der Name des privaten Netzwerks, das mit dem Cloud SQL-Replikat verwendet werden soll.

Cloud SQL-Replikat erstellen

Erstellen Sie vor diesem Schritt eine JSON-Datei, die die Anfragedaten für das Replikat enthält. Öffnen Sie anschließend ein Terminal und erstellen Sie mit den folgenden Befehlen ein Cloud SQL-Replikat in Cloud SQL:

cURL

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 POST \
     https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances

Beispiel

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data @./replica.json \
     -X POST \
     https://www.googleapis.com/sql/v1beta4/projects/MyProject/instances
Attribut Wert
[PROJECT_ID] Die ID Ihres Projekts in Google Cloud.
[JSON_PATH] Der Pfad zur JSON-Datei, die die Anfragedaten für das Cloud SQL-Replikat enthält.

Was Sie nach dem Abschluss sehen sollten

Rufen Sie die Seite Cloud SQL-Instanzen auf, um zu prüfen, ob die Instanzen korrekt eingerichtet wurden. Sie sollten die Quelldarstellungsinstanz und das Cloud SQL-Replikat sehen. Diese sehen etwa so aus:

Instanz-ID Typ Öffentliche IP-Adresse
(-) source-representation-instance Externe primäre MySQL-Instanz 10.68.48.3:3306
     Replikatinstanz MySQL-Lesereplikat 34.66.48.59

Berechtigungen für den Replikationsnutzer aktualisieren

Das Nutzerkonto der Replikation auf dem Quelldatenbankserver 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 auf dem Quelldatenbankserver ein Terminal und geben Sie die folgenden Befehle ein:

MySQL

UPDATE mysql.user
  SET Host='[NEW_HOST]' WHERE Host='[OLD_HOST]' AND User='[USERNAME]';
FLUSH PRIVILEGES;

Beispiel

UPDATE mysql.user
  SET Host='192.0.2.0' WHERE Host='%' AND User='replicationUser';
FLUSH PRIVILEGES;
Attribut Wert
[USERNAME] Das Nutzerkonto für die Replikation auf dem Quelldatenbankserver.
[NEW_HOST] Geben Sie die ausgehende IP des Cloud SQL-Replikats an.
[OLD_HOST] Der aktuelle, dem Host zugewiesene Wert, den Sie ändern.

Eingehende Verbindungen auf dem Quelldatenbankserver zulassen

Das Cloud SQL-Replikat muss eine Verbindung zum Quelldatenbankserver herstellen, damit die Replikation möglich ist. Dafür müssen Sie die Netzwerkfirewall für den Quelldatenbankserver so konfigurieren, dass Verbindungen von der ausgehenden IP-Adresse des Cloud SQL-Replikats zugelassen werden, wenn Folgendes zutrifft:

  • Der Quelldatenbankserver ist hinter einer Firewall oder untersteht einer anderen Netzwerkbeschränkung.
  • Ihr Cloud SQL-Replikat verwendet eine öffentliche IP-Adresse.

Eine Anleitung finden Sie unter Autorisierte Adresse oder Adressbereich hinzufügen. Verwenden Sie die primäre IP-Adresse des Replikats, um eine Verbindung zum Cloud SQL-Replikat herzustellen. Diese IP-Adresse wird in der Cloud Console angezeigt.

Replikationseinstellungen prüfen

Prüfen Sie nach dem Abschluss der Einrichtung, ob das Cloud SQL-Replikat aus Daten von dem Quelldatenbankserver 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 Quelldatenbankserver
  • Berechtigungen für den Replikationsnutzer
  • Versionskompatibilität

Wenn Sie eine Onlinesynchronisierung ausführen, wird mit den nachstehenden Befehlen auch Folgendes geprüft:

  • Das Cloud SQL-Replikat wird noch nicht repliziert.
  • Binäre Logs sind auf dem Quelldatenbankserver aktiviert.
  • GTID ist aktiviert, wenn Sie versuchen, eine externe Synchronisierung von einem RDS-Quelldatenbankserver auszuführen und dafür einen Google Cloud-Bucket verwenden.

Ö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]"
       }' \
     -X POST \
     https://www.googleapis.com/sql/v1beta4/projects/[PROJECT_ID]/instances/[REPLICA_INSTANCE]/verifyExternalSyncSettings

Beispiel

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://www.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/verifyExternalSyncSettings
Attribut Wert
[SYNC_MODE] Dies kann online oder offline sein. Wenn online verwendet wird, prüft verifyExternalSyncSettings, ob Sie das Cloud SQL-Replikat und den Quelldatenbankserver nach der Einrichtung der Replikation synchron halten können.
[PROJECT_ID] Die ID Ihres Projekts in Google Cloud.
[REPLICA_INSTANCE] Die ID des Cloud SQL-Replikats.

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.

    Wenn das Cloud SQL-Replikat keine Verbindung zum Quelldatenbankserver herstellen kann, prüfen Sie Folgendes:

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

Quelldatenbankserver replizieren

Nachdem Sie festgestellt haben, dass es möglich ist, Daten vom Quelldatenbankserver zu replizieren, können Sie die Replikation ausführen. Gehen Sie davon aus, dass mit dem Replikat etwa 25–50 GB pro Stunde importiert werden.

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

Wenn Sie nicht berechtigt sind, auf die globale Lesesperre für den Quelldatenbankserver zuzugreifen und GTID deaktiviert ist, wie es bei Amazon RDS der Fall sein kann, finden Sie weitere Informationen unter Schritte mit Logs oder unter Schritte.

Schritte

Öffnen Sie ein Terminal und geben Sie die folgenden Befehle ein, um ein Replikat aus Daten vom Quelldatenbankserver zu erstellen.

Schritte mit Logs

  1. Rufen Sie die Loganzeige auf und wählen Sie aus der Ressourcenliste Ihr Cloud SQL-Replikat aus. Sie sollten eine Liste der neuesten Logs für das Cloud SQL-Replikat sehen. Diese können sie vorerst ignorieren.
  2. Öffnen Sie ein Terminal und geben Sie die Befehle unterhalb dieser Schritte ein, um aus Daten vom Quelldatenbankserver ein Replikat zu erstellen.
  3. Kehren Sie zur Loganzeige zurück. Wenn Sie das Log unten sehen, beenden Sie das Schreiben in die Datenbank auf dem Quelldatenbankserver. In den meisten Fällen beansprucht dies nur einige Sekunden.

    DUMP_IMPORT(START): Start importing data, please pause any write to the external primary database.
    
  4. Wenn Sie in der Loganzeige das folgende Log sehen, aktivieren Sie das Schreiben in die Datenbank auf dem Quelldatenbankserver wieder.

    DUMP_IMPORT(SYNC): Consistent state on primary and replica. Writes to the external primary may resume.
    

Mit den folgenden Befehlen erstellen Sie ein Replikat aus Daten vom Quelldatenbankserver:

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]"
       }' \
     -X POST \
     https://www.googleapis.com/sql/v1beta4/projects/[PROJECT_ID]/instances/[REPLICA_INSTANCE]/startExternalSync

Beispiel

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://www.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/startExternalSync
Attribut Wert
[SYNC_MODE] Dies kann online oder offline sein. Wenn online, werden zukünftige Änderungen am Quelldatenbankserver in das Cloud SQL-Replikat übernommen. Bei offline werden zukünftige Änderungen nicht in das Cloud SQL-Replikat übernommen.
[PROJECT_ID] Die ID Ihres Projekts in Google Cloud.
[REPLICA_INSTANCE] Die ID des Cloud SQL-Replikats.

Replikationsstatus prüfen

Nachdem das Cloud SQL-Replikat fertig erstellt wurde, stellt es eine Verbindung zum Quelldatenbankserver her und aktualisiert alle Daten, die nach dem Export geändert wurden. Führen Sie diese Schritte aus, um den Replikationsstatus zu bestätigen.

Es ist wichtig, dass Sie den Replikationsstatus prüfen, bevor Sie das Replikat zu einer eigenständigen Instanz hochstufen. Wenn der Replikationsvorgang nicht erfolgreich abgeschlossen wurde, enthält ein hochgestuftes Replikat nicht alle Änderungen aus der Quelldarstellungsinstanz.

Wenn die Replikationsverzögerung nicht gegen 0 tendiert, nehmen Sie entsprechende Korrekturen vor.

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.

Ergänzende Verfahren

Diese Verfahren können beim Einrichten der Replikation hilfreich sein.

Aufbewahrung von binären Logs konfigurieren

Konfigurieren Sie den Quelldatenbankserver so, dass binäre Logs mindestens 24 Stunden lang aufbewahrt werden.

MySQL Community

Wenn der Quelldatenbankserver die MySQL Community Edition verwendet, können Sie mithilfe dieser MySQL-Befehle die Einstellungen für die Aufbewahrung der binären Logs aktualisieren.

Cloud MySQL

Wenn der Quelldatenbankserver Cloud SQL MySQL verwendet, werden die binären Logs sieben Tage lang aufbewahrt. Diese Einstellung kann nicht geändert werden.

Amazon RDS

Wenn der Quelldatenbankserver eine Amazon RDS-Instanz ist, können Sie mit diesem Befehl die Einstellungen für die Aufbewahrung der binären Logs aktualisieren:

call mysql.rds_set_configuration('binlog retention hours', 24);

Nutzer dem Cloud SQL-Replikat hinzufügen

MySQL-Nutzerkonten können nicht vom Quelldatenbankserver importiert werden. Sie können jedoch auf einem Cloud SQL-Replikat erstellt werden. Legen Sie diese Nutzer an, bevor Sie ein Replikat vom Quelldatenbankserver erstellen.

Ausgehende IP-Adresse des Cloud SQL-Replikats abrufen

Sie können die ausgehende IP-Adresse des Cloud SQL-Replikats verwenden, um eine sichere Verbindung zwischen dem Quelldatenbankserver und dem Cloud SQL-Replikat herzustellen. Es gibt verschiedene Möglichkeiten, diese ausgehende IP-Adresse abzurufen:

gcloud

gcloud sql instances describe [REPLICA_NAME] --format="default(ipAddresses)"

Cloud SQL

  1. Öffnen Sie die Seite „Cloud SQL-Instanzen“.
  2. Bewegen Sie den Mauszeiger neben der öffentlichen IP-Adresse des Cloud SQL-Replikats auf die Kurzinfo Weitere Informationen und rufen Sie die ausgehende IP-Adresse ab. Beachten Sie, dass die ausgehende IP-Adresse nicht die IP-Adresse ist, die in der Hauptliste für das Replikat in der Cloud Console angezeigt wird.

Quelldarstellung oder Cloud SQL-Replikat aktualisieren

Nachdem Sie eine Quelldarstellung oder ein Cloud SQL-Replikat eingerichtet haben, können Sie es mit diesen Konfigurationen aktualisieren. Unter den folgenden Voraussetzungen müssen Ihre Konfigurationen beispielsweise aktualisiert werden:

  • Der Host, der Port oder die IP des Quelldatenbankservers ändert sich.
  • Sie möchten einen anderen Nutzer für MySQL-Replikate verwenden.
  • Das Passwort des Nutzers für MySQL-Replikate wurde geändert.
  • Die SSL-Zertifikate, die zur sicheren Verbindung mit dem Quelldatenbankserver verwendet wurden, wurden geändert.

Fehlerbehebung

Klicken Sie auf die Links in der Tabelle, um weitere Informationen zu erhalten:

Problem Mögliche Ursache Lösungsvorschlag
Specified key was too long; max key length is 767 bytes. Für die externe primäre Instanz ist möglicherweise die Variable innodb_large_prefix festgelegt. Setzen Sie das Flag innodb_large_prefix beim Erstellen des Replikats auf ON oder aktualisieren Sie das vorhandene Replikat mit dem Flag.
Table definition has changed. Während des Dumpprozesses wurden DDL-Änderungen (Data Definition Language, Datendefinitionssprache) vorgenommen. Vermeiden Sie DDL-Änderungen während des Dumpprozesses.
Fehlermeldung: Access denied; you need (at least one of) the SUPER privilege(s) for this operation. Es kann eine Ansicht, eine Funktion oder eine Prozedur in der Quelldatenbank sein, die DEFINER auf eine Weise verweist, die von Cloud SQL nicht unterstützt wird. Lesen Sie weitere Informationen zur DEFINER-Nutzung in Cloud SQL.
Fehlermeldung: ERROR 1045 (28000) at line {line_number}: Access denied for user 'cloudsqlimport'@'localhost In der Quelldatenbank ist ein DEFINER vorhanden, das im Replikat nicht vorhanden ist. Lesen Sie weitere Informationen zur DEFINER-Nutzung in Cloud SQL.
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. Gewährleisten Sie, dass die externe primäre Instanz zur Verbindungsherstellung verfügbar ist oder verwenden Sie „mysqldump“ mit der Option max_allowed_packet.
Got packet bigger than 'max_allowed_packet' bytes when dumping table. Das Paket war größer als der eingestellte zulässige Wert. Verwenden Sie „mysqldump“ mit der Option max_allowed_packet.
Die erste Datenmigration war erfolgreich, es werden jedoch keine Daten repliziert. Möglicherweise gibt es in Konflikt stehende Replikations-Flags. Prüfen Sie diese Flag-Einstellungen.
Die erste Datenmigration war erfolgreich, aber die Datenreplikation funktioniert nach einer Weile nicht mehr. Dafür gibt es viele Gründe. Probieren Sie diese Lösungsvorschläge aus.
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.

Der angegebene Schlüssel war zu lang. Die maximale Schlüssellänge beträgt 767 Byte.

Der Fehler Specified key was too long; max key length is 767 bytes. wird angezeigt.

Mögliche Ursache

Für die externe primäre Instanz ist möglicherweise die Variable innodb_large_prefix festgelegt. Dadurch können Indexschlüsselpräfixe länger als 767 Byte sein. Der Standardwert für MySQL 5.6 ist OFF.

Lösungsvorschlag

Setzen Sie das Flag innodb_large_prefix beim Erstellen des Replikats auf ON oder aktualisieren Sie das vorhandene Replikat mit dem Flag.


Tabellendefinition hat sich geändert

Der Fehler Table definition has changed wird angezeigt.

Mögliche Ursache

Während des Dumpprozesses wurden DDL-Änderungen vorgenommen.

Lösungsvorschlag

Ändern Sie während des Dumpprozesses keine Tabellen und nehmen Sie keine anderen DDL-Änderungen vor.


Zugriff verweigert. Sie benötigen für diesen Vorgang mindestens eine der SUPER-Berechtigungen

Der Fehler Access denied; you need (at least one of) the SUPER privilege(s) for this operation wird angezeigt.

Mögliche Ursache

Dies könnte daran liegen, dass der Kunde VIEW/FUNCTION/PROCEDURE hat und DEFINER superuser@localhost verwendet (z. B. root@localhost). Dies wird von Cloud SQL nicht unterstützt.

Lösungsvorschlag

Das Problem lässt sich dadurch umgehen, dass Sie den DEFINER in den externen Datenbanken aktualisieren, z. B. von root@localhost auf root@% oder einen Nicht-Superuser. Weitere Informationen finden Sie unter Stored Object Access Control.


ERROR 1045 (28000) in Zeile xxx: Zugriff verweigert für Nutzer „cloudsqlimport'@'localhost“

Der Fehler ERROR 1045 (28000) at line xxx: Access denied for user 'cloudsqlimport'@'localhost wird angezeigt.

Mögliche Ursache

Ein Nutzer in der Quelldatenbank mit der Klausel DEFINER existiert nicht in der Replikatdatenbank, und dieser Nutzer wird in den Objektdefinitionen in der Quelldatenbank querverwiesen.

Lösungsvorschlag

Nutzer werden nicht mit den Daten migriert. Erstellen Sie vor der Replikation die Quelldatenbanknutzer in der Replikatdatenbank.


Die Verbindung zu MySQL-Server wurde während der Abfrage beim Auslesen der Tabelle in eine Dumpdatei getrennt.

Der Fehler Lost connection to MySQL server during query when dumping table wird angezeigt.

Mögliche Ursache

  • Die Quelle ist möglicherweise nicht mehr verfügbar, sodass das Replikat keine Verbindung zu ihr herstellen kann.

  • Möglicherweise enthält die Quelldatenbank Tabellen mit großen Blobs oder langen Strings, für die max_allowed_packet auf eine größere Zahl in der Quelldatenbank festgelegt werden muss.

Lösungsvorschlag

  • Führen Sie einen Neustart aus und prüfen Sie, ob die externe primäre Instanz zur Verbindungsherstellung verfügbar ist.

  • Verwenden Sie „mysqldump“ mit der Option max_allowed_packet, um die Daten in eine Dumpdatei auszulesen und mit dieser zu migrieren.


Beim Auslesen der Tabelle in eine Dumpdatei war ein Paket erhalten, das den Wert von „max_allowed_packet“' überschritten hat.

Der Fehler Got packet bigger than 'max_allowed_packet' bytes when dumping table wird angezeigt.

Mögliche Ursache

Das Paket war größer als der eingestellte zulässige Wert.

Lösungsvorschlag

Verwenden Sie „mysqldump“ mit der Option max_allowed_packet, um die Daten in eine Dumpdatei auszulesen und mit dieser zu migrieren.


Es werden keine Daten repliziert.

Die erste Datenmigration war erfolgreich, aber es werden keine Daten repliziert.

Mögliche Ursache

Dies kann daran liegen, dass in der Quelldatenbank bestimmte Replikations-Flags definiert sind, die die Replikation von manchen oder allen Datenbankänderungen verhindern.

Lösungsvorschlag

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 erste Datenmigration war erfolgreich, aber die Datenreplikation funktioniert nach einer Weile nicht mehr.

Die Datenmigration verlief anfangs erfolgreich, danach jedoch nicht mehr.

Mögliche Ursache

Dieses Problem kann viele Ursachen haben.

Lösungsvorschlag

  • Prüfen Sie die Replikationsmesswerte für Ihre Replikatinstanz in der Cloud Monitoring-UI.

  • Die Fehler aus dem MySQL-E/A-Thread oder dem SQL-Thread finden Sie in Cloud Logging in den mysql.err-Logdateien.

  • 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-Prüfung fehlgeschlagen: Das Datenlaufwerk ist voll.

Der Fehler mysqld check failed: data disk is full wird angezeigt.

Mögliche Ursache

Wenn dieser Fehler bei einem DRAIN-Vorgang auftritt, ist das Datenlaufwerk der Replikatinstanz voll.

Lösungsvorschlag

Erhöhen Sie die Laufwerkgröße der Replikatinstanz.

Nächste Schritte