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;
Beispiel
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
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://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:
- Erstellen Sie einen Cloud Storage-Bucket in Google Cloud.
- Ö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 \ | gcloud storage 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 \ | gcloud storage 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" }
Beispiel
{ "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
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 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
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", "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 |
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 Führen Sie den Befehl |
Die Datenmigration verlief anfangs erfolgreich, danach jedoch nicht mehr. | Versuchen Sie Folgendes:
|
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:
Rufen Sie in der Google Cloud Console die Loganzeige auf.
- Wählen Sie aus dem Drop-down-Menü Instanz das Cloud SQL-Replikat aus.
- 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
- Aktualisieren einer Instanzvorlage
- Verwalten von Replikaten
- Überwachen von Instanzen
- Mehr darüber erfahren, wie Sie das Cloud SQL-Replikat hochstufen und damit als eine eigenständige Instanz definieren sowie wie Sie die Replikation vom externen Server beenden