Best Practices zum Importieren und Exportieren von Daten

Auf dieser Seite finden Sie Best Practices zum Import und Export von Daten mit Cloud SQL. Eine schrittweise Anleitung zum Import von Daten in Cloud SQL finden Sie unter Daten importieren.

Informationen zum Exportieren von Daten aus Cloud SQL zur Verwendung in einer von Ihnen verwalteten MySQL-Instanz finden Sie unter Daten exportieren.

Best Practices für den Import und Export

Die folgenden Best Practices sollten beim Importieren und Exportieren von Daten berücksichtigt werden:

Denselben SQL-Modus für Import und Export verwenden

Die Einstellung "SQL-Modus" wirkt sich darauf aus, wie Cloud SQL SQL-Abfragen interpretiert. Wenn Sie beispielsweise Daten aus einer Datenbank exportieren, in der Strict SQL nicht aktiviert ist, und diese dann nach Cloud SQL importieren möchten, wo Strict SQL standardmäßig aktiviert ist, kann der Import fehlschlagen. Es empfiehlt sich, beim Import denselben SQL-Modus zu verwenden, den Sie für den Export verwendet haben.

Prüfen Sie den SQL-Modus der Quell- und der Zieldatenbank auf deren Kompatibilität. Achten Sie dabei besonders auf die Flags, die den Strict SQL-Modus aktivieren. Wenn Strict SQL NICHT für Ihre Datenbank festgelegt ist, sollten Sie das Flag in Cloud SQL entfernen. Wenn Sie Strict SQL entfernen, müssen Sie ein anderes Flag festlegen.

Wenn Sie prüfen möchten, ob für Ihre Cloud SQL-Instanz der gewünschte Modus festgelegt ist, führen Sie SELECT @@GLOBAL.sql_mode; aus.

Keine Cloud Storage-Buckets "Anforderer bezahlt" verwenden

Sie können keinen Cloud Storage-Bucket verwenden, für den Anforderer bezahlt für Importe und Exporte aus Cloud SQL aktiviert ist.

Mit serverlosem Export den Exportvorgang von der primären Instanz auslagern

Bei einem Standardexport aus Cloud SQL wird der Export ausgeführt, während die Datenbank online ist. Wenn die zu exportierenden Datenbanken kleiner sind, ist die Auswirkung wahrscheinlich minimal. Falls Datenbanken jedoch groß sind oder große Objekte wie BLOBs enthalten, besteht die Möglichkeit, dass der Export die Datenbankleistung beeinträchtigt. Dies kann sich auf die Dauer von Datenbankabfragen und -vorgängen auswirken, die für die Datenbank ausgeführt werden. Sobald Sie einen Export gestartet haben, kann er nicht mehr abgebrochen werden, wenn die Datenbank langsam reagiert.

Mit dem serverlosen Export können Sie langsame Antworten während eines Exports vermeiden. Beim serverlosen Export erstellt Cloud SQL eine separate temporäre Instanz, um den Exportvorgang auszulagern. Damit können Datenbanken auf der primären Instanz weiterhin Abfragen verarbeiten und Vorgänge mit der üblichen Leistungsrate ausführen. Wenn der Datenexport abgeschlossen ist, wird die temporäre Instanz automatisch gelöscht.

Verwenden Sie die gcloud-Exportfunktionen oder die der REST API mit dem Flag offload, um einen serverlosen Exportvorgang auszuführen.

Während eines serverlosen Exportvorgangs können Sie verschiedene andere Vorgänge ausführen, z. B. Instanzbearbeitung, Import und Failover. Wenn Sie allerdings delete auswählen, wird der Exportvorgang einige Zeit nach dem Löschen der Instanz beendet und es werden keine Daten exportiert.

Ein serverloser Export dauert länger als ein Standardexport, da das Erstellen der temporären Instanz einige Zeit in Anspruch nimmt. Er kann mindestens fünf Minuten länger dauern, bei größeren Datenbanken allerdings noch länger. Berücksichtigen Sie die Auswirkungen auf Zeit und Leistung, bevor Sie den zu verwendenden Exporttyp bestimmen.

Sie können den serverlosen Export auf einer primären Instanz oder einem Lesereplikat ausführen.

Beim Erstellen einer SQL-Dumpdatei die korrekten Flags verwenden

Wenn Sie beim Exportieren Ihrer Daten in eine SQL-Dumpdatei nicht die richtigen Flags verwenden, kann der Import fehlschlagen. Informationen zum Erstellen einer SQL-Dumpdatei für den Import in Cloud SQL finden Sie unter SQL-Dumpdatei erstellen.

Daten komprimieren, um Kosten zu sparen

Cloud SQL unterstützt den Import und Export sowohl komprimierter als auch unkomprimierter Dateien. Durch die Komprimierung können Sie insbesondere beim Exportieren großer Instanzen viel Speicherplatz in Cloud Storage und somit Speicherkosten einsparen.

Verwenden Sie beim Exportieren einer SQL-Dumpdatei oder einer CSV-Datei die Dateiendung .gz, um die Daten zu komprimieren. Beim Importieren einer Datei mit der Erweiterung .gz wird die Datei automatisch dekomprimiert.

Lang andauernde Import- und Exportprozesse reduzieren

Importe in und Exporte aus Cloud SQL mithilfe der Importfunktion (mit einem Cloud Storage-Bucket) können je nach Größe der Datenbank sehr viel Zeit beanspruchen. Dies kann folgende Auswirkungen haben:

  • Sie können einen Cloud SQL-Instanzvorgang mit langer Ausführungszeit nicht beenden.
  • Sie können jeweils nur einen Import- oder Exportvorgang für jede Instanz ausführen.

Sie können den Zeitaufwand für die Ausführung der einzelnen Vorgänge verringern, indem Sie die Import- oder -Exportfunktion von Cloud SQL mit kleineren Datensätzen verwenden.

Bei Exporten können Sie den serverlosen Export verwenden, um die Auswirkungen auf die Datenbankleistung zu minimieren und die Ausführung anderer Vorgänge auf Ihrer Instanz während des Exports zu ermöglichen.

Weitere Tipps finden Sie unter Fehlerdiagnose bei Cloud SQL-Instanzen.

InnoDB verwenden

InnoDB ist die einzige unterstützte Speicher-Engine für MySQL-Instanzen.

Sie können Ihre Tabellen von MyISAM zu InnoDB konvertieren. Dazu leiten Sie die Ausgabe von mysqldump so über eine Pipe durch ein sed-Skript:

mysqldump --databases [DATABASE_NAME] \
-h [INSTANCE_IP] -u [USERNAME] -p [PASSWORD] \
--hex-blob --default-character-set=utf8mb4 | sed 's/ENGINE=MyISAM/ENGINE=InnoDB/g' > [DATABASE_FILE].sql

MySQL-Import- und -Migrationsjobs mit Metadaten mit DEFINER-Klausel

Da bei einem MySQL-Import- oder Migrationsjob keine Nutzerdaten migriert werden, können Quell- und Dumpdateien, die von Nutzern mit der DEFINER-Klausel definierte Metadaten enthalten, nicht importiert oder migriert werden, da hier noch keine Nutzer vorhanden sind.

Um festzustellen, welche DEFINER-Werte in Ihren Metadaten vorhanden sind, verwenden Sie die folgenden Abfragen oder suchen Sie in Ihrer Dumpdatei. Prüfen Sie, ob es Einträge für root%localhost oder für Nutzer gibt, die in der Zielinstanz nicht vorhanden sind.

SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.EVENTS;
SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.ROUTINES;
SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.TRIGGERS;
SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.VIEWS;

Um einen Import- oder Migrationsjob von einer Quelle auszuführen, die solche Metadaten enthält, haben Sie folgende Möglichkeiten:

  • Erstellen Sie die Nutzer in Ihrer Cloud SQL-Zielinstanz, bevor Sie den Import- oder Migrationsjob starten.
  • Aktualisieren Sie die DEFINER-Klausel auf INVOKER für die Quell-MySQL-Instanz oder die Dumpdatei, bevor Sie mit dem Import- oder Migrationsjob beginnen.

Importierte Datenbank prüfen

Stellen Sie nach Abschluss eines Importvorgangs eine Verbindung zu Ihrer Datenbank her und führen Sie die entsprechenden Datenbankbefehle aus, um sicherzustellen, dass der Inhalt korrekt ist. Beispiel: Stellen Sie ein Verbindung her und listen Sie die Datenbanken, Tabellen und spezifischen Einträge auf.

Bekannte Einschränkungen

Cloud Storage unterstützt Einzelobjekte bis zu einer Größe von 5 Terabyte. Bei Datenbanken mit mehr als 5 TB schlägt der Export nach Cloud Storage fehl. In diesem Fall müssen Sie die Exportdateien in kleinere Segmente unterteilen.

Fehlerbehebung

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

Problem Mögliche Ursache Lösungsvorschlag
Import dauert zu lange. Zu viele aktive Verbindungen können Importvorgänge beeinträchtigen. Schließen Sie nicht verwendete Verbindungen oder starten Sie die Cloud SQL-Instanz neu, bevor Sie einen Importvorgang starten.
Import schlägt fehl. Die exportierte Datei kann Datenbanknutzer enthalten, die noch nicht vorhanden sind. Bereinigen Sie die fehlgeschlagene Datenbank, bevor Sie den Import wiederholen. Erstellen Sie die Datenbanknutzer, bevor Sie den Import ausführen.
Fehler beim Import: Tabelle ist nicht vorhanden. Eine erforderliche Tabelle ist derzeit nicht vorhanden. Deaktivieren Sie FOREIGN_KEY_CHECKS zu Beginn des Imports.
Fehlermeldung: ERROR 1045 (28000) at line {line_number}: Access denied for user 'cloudsqlimport'@'localhost'. In der Dumpdatei ist ein DEFINER vorhanden, den es in der Datenbank nicht gibt. Weitere Informationen zur Verwendung von DEFINER in Cloud SQL und zu möglichen Problemumgehungen finden Sie in diesem Artikel.
Fehlermeldung: Unknown table 'COLUMN_STATISTICS' in information_schema. Dies geschieht, wenn Sie die Binärdatei mysqldump von MySQL 8.0 verwenden, um Daten aus einer MySQL 5.7-Datenbank zu dumpen und in eine MySQL 8.0-Datenbank zu importieren. Wenn Sie Daten aus einer MySQL 5.7-Datenbank ausgeben und in eine MySQL 8.0-Datenbank importieren, müssen Sie die Binärprogramm mysqldump von MySQL 5.7 verwenden. Wenn Sie die Binärprogramm mysqldump von MySQL 8.0 verwenden, müssen Sie das Flag --column-statistics=0 hinzufügen.

Import dauert zu lange

Der Import dauert zu lange und blockiert andere Vorgänge.

Mögliche Ursache

Zu viele aktive Verbindungen können Importvorgänge beeinträchtigen. Verbindungen beanspruchen CPU und Arbeitsspeicher, was die verfügbaren Ressourcen begrenzt.

Lösungsvorschlag

Schließen Sie nicht verwendete Vorgänge. Prüfen Sie die CPU- und Arbeitsspeichernutzung, um dafür zu sorgen, dass genügend Ressourcen verfügbar sind. Die beste Methode, maximale Ressourcen für den Importvorgang zu gewährleisten, ist ein Neustart der Instanz vor Beginn des Vorgangs. Ein Neustart

  • beendet alle Verbindungen und
  • beendet alle Aufgaben, die möglicherweise Ressourcen nutzen.


Import schlägt fehl

Der Import schlägt fehl, wenn ein oder mehrere Nutzer, auf die in der exportierten SQL-Dumpdatei verwiesen wird, nicht vorhanden sind.

Mögliche Ursache

Vor dem Import eines SQL-Dumps müssen alle Datenbanknutzer vorhanden sein, die Inhaber von Objekten sind oder Berechtigungen für Objekte in der gespeicherten Datenbank erhalten haben. Andernfalls werden die Objekte mit den ursprünglichen Inhaberrechten und/oder Berechtigungen nicht wiederhergestellt.

Lösungsvorschlag

Bereinigen Sie die fehlgeschlagene Datenbank, bevor Sie den Import wiederholen. Erstellen Sie die Datenbanknutzer, bevor Sie den SQL-Dump importieren.


Fehler beim Import: Tabelle ist nicht vorhanden

Ein Importvorgang schlägt mit der Fehlermeldung fehl, dass keine Tabelle vorhanden ist.

Mögliche Ursache

Tabellen können Fremdschlüsselabhängigkeiten von anderen Tabellen haben. Abhängig von der Reihenfolge der Vorgänge kann eine oder mehrere dieser Tabellen während des Importvorgangs noch nicht vorhanden sein.

Lösungsvorschlag

Fügen Sie am Anfang der Dumpdatei die folgende Zeile hinzu:

  SET FOREIGN_KEY_CHECKS=0;

Fügen Sie außerdem am Ende der Dumpdatei die folgende Zeile hinzu:

  SET FOREIGN_KEY_CHECKS=1;

Mit diesen Einstellungen werden Datenintegritätsprüfungen während des Importvorgangs deaktiviert und nach dem Laden der Daten wieder aktiviert. Dies wirkt sich nicht auf die Integrität der Daten in der Datenbank aus, da die Daten bereits beim Erstellen der Dumpdatei validiert wurden.


Fehlermeldung: ERROR 1045 (28000) at line {line_number}: Access denied for user 'cloudsqlimport'@'localhost'

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

Mögliche Ursache

Die Ursache ist, dass ein Nutzer in der Dumpdatei mit der DEFINER-Klausel nicht in der Datenbank vorhanden ist und dass auf diesen Nutzer in den Objektdefinitionen der Datenbank verwiesen wird.

Lösungsvorschlag

Informationen dazu finden Sie in diesem Dokument zum Importieren einer Datenbank mit DEFINER-Klauseln in der Dumpdatei. Möglicherweise müssen Sie zuerst einen oder mehrere Nutzer in der Datenbank erstellen.


Fehlermeldung: Unbekannte Tabelle „COLUMN_STATISTICS“ in information_schema

Die Fehlermeldung Unknown table 'COLUMN_STATISTICS' in information_schema wird angezeigt.

Mögliche Ursache

Dies geschieht, wenn Sie die Binärdatei mysqldump von MySQL 8.0 verwenden, um Daten aus einer MySQL 5.7-Datenbank zu dumpen und in eine MySQL 8.0-Datenbank zu importieren.

Lösungsvorschlag

Wenn Sie Daten aus einer MySQL 5.7-Datenbank ausgeben und in eine MySQL 8.0-Datenbank importieren, müssen Sie die Binärprogramm mysqldump von MySQL 5.7 verwenden. Wenn Sie die Binärprogramm mysqldump von MySQL 8.0 verwenden, müssen Sie das Flag --column-statistics=0 hinzufügen.

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

Problem Mögliche Ursache Lösungsvorschlag
Der Status des Vorgangs wird nicht angezeigt. Auf der Benutzeroberfläche wird nur Erfolg oder Fehler angezeigt. Verwenden Sie diese Datenbankbefehle, um mehr zu erfahren.
408 Error (Timeout) beim Exportieren. Der SQL-Export kann je nach Datenbankgröße und Exportinhalt lange dauern. Verwenden Sie mehrere CSV-Exporte, um die Größe der einzelnen Vorgänge zu reduzieren.
CSV-Export funktioniert, SQL-Export schlägt jedoch fehl. Beim SQL-Export treten mit größerer Wahrscheinlichkeit Kompatibilitätsprobleme mit Cloud SQL auf. Verwenden Sie CSV-Exporte, um nur das zu exportieren, was Sie benötigen.
Export dauert zu lange. Cloud SQL unterstützt keine gleichzeitigen synchronen Vorgänge. Verwenden Sie die Exportauslagerung. Weitere Informationen
Error 1412: Table definition has changed. Die Tabelle wurde während des Exports geändert. Entfernen Sie alle Tabellenänderungsanweisungen aus dem Dump-Vorgang.
Verbindung während des Exportvorgangs getrennt. Die Abfrage muss innerhalb der ersten sieben Minuten Daten liefern. Testen Sie die Abfrage manuell. Weitere Informationen
Unbekannter Fehler beim Export. Mögliches Bandbreitenproblem. Die Instanz und der Cloud Storage-Bucket müssen sich in derselben Region befinden.
Sie möchten Exporte automatisieren. Cloud SQL bietet keine Möglichkeit, Exporte zu automatisieren. Erstellen Sie Ihre eigene Pipeline, um diese Funktion zu nutzen. Mehr erfahren
Fehlermeldung: Access denied; you need (at least one of) the SUPER privilege(s) for this operation. Es kann ein Ereignis, eine Ansicht, eine Funktion oder eine Prozedur in der Dumpdatei mit superuser@localhost (wie root@localhost) vorhanden sein. Dies wird von Cloud SQL nicht unterstützt. Weitere Informationen zur Verwendung von DEFINER in Cloud SQL und zu möglichen Problemumgehungen finden Sie in diesem Artikel.

Status des Vorgangs wird nicht angezeigt

Sie können den Status eines laufenden Vorgangs nicht sehen.

Mögliche Ursache

Die Google Cloud Console meldet nur erfolgreiche oder fehlgeschlagene Vorgänge und gibt keine Warnungen zurück.

Lösungsvorschlag

Stellen Sie eine Verbindung zur Datenbank her und führen Sie SHOW WARNINGS aus.


Fehler 408: (Zeitüberschreitung) beim Export

Beim Ausführen eines Exportjobs in Cloud SQL ist die Fehlermeldung 408 Error (Timeout) zu sehen.

Mögliche Ursache

CSV- und SQL-Formate werden auf unterschiedliche Weise exportiert. Im SQL-Format wird die gesamte Datenbank exportiert, was wahrscheinlich länger dauert. Mit dem CSV-Format können Sie festlegen, welche Elemente der Datenbank in den Export einbezogen werden sollen.

Lösungsvorschlag

Verwenden Sie das CSV-Format und führen Sie mehrere kleinere Exportjobs aus, um die Größe und Länge der einzelnen Vorgänge zu reduzieren.


CSV-Export funktioniert, SQL-Export schlägt jedoch fehl

Der CSV-Export funktioniert, der SQL-Export schlägt jedoch fehl.

Mögliche Ursache

CSV- und SQL-Formate werden auf unterschiedliche Weise exportiert. Im SQL-Format wird die gesamte Datenbank exportiert, was wahrscheinlich länger dauert. Mit dem CSV-Format können Sie festlegen, welche Elemente der Datenbank in den Export einbezogen werden sollen.

Lösungsvorschlag

Verwenden Sie CSV-Exporte, um nur das zu exportieren, was Sie benötigen.


Export dauert zu lange

Der Export dauert zu lange und andere Vorgänge werden blockiert.

Mögliche Ursache

Cloud SQL unterstützt keine gleichzeitigen synchronen Vorgänge.

Lösungsvorschlag

Versuchen Sie, kleinere Datasets nacheinander zu exportieren.


mysqldump: Fehler 1412: Die Tabellendefinition wurde geändert

Die Fehlermeldung mysqldump: Error 1412: Table definition has changed, retry transaction when dumping the table wird angezeigt.

Mögliche Ursache

Während des Exportvorgangs wurde die Tabelle geändert.

Lösungsvorschlag

Die Dump-Transaktion kann fehlschlagen, wenn Sie während des Exportvorgangs die folgenden Anweisungen verwenden:

  • ALTER TABLE
  • CREATE TABLE
  • DROP TABLE
  • RENAME TABLE
  • TRUNCATE TABLE
Entfernen Sie alle diese Anweisungen aus dem Dump-Vorgang.


Verbindung während des Exportvorgangs getrennt

Die Verbindung wurde während des Exportvorgangs getrennt.

Mögliche Ursache

Bei der Verbindung zu Cloud Storage kann es zu einer Zeitüberschreitung kommen, da die im Export ausgeführte Abfrage innerhalb der ersten sieben Minuten nach dem Start des Exports keine Daten erzeugt.

Lösungsvorschlag

Testen Sie die Abfrage manuell. Stellen Sie dazu eine Verbindung von einem beliebigen Client aus her und senden Sie die Ausgabe der Abfrage mit dem folgenden Befehl an STDOUT:

COPY (INSERT_YOUR_QUERY_HERE) TO STDOUT WITH ( FORMAT csv, DELIMITER ',', ENCODING 'UTF8', QUOTE '"', ESCAPE '"' )

Dies ist das erwartete Verhalten, da der Client sofort nach dem Start des Exports mit dem Senden von Daten beginnen soll. Werden keine Daten gesendet, wird die Verbindung getrennt. Dies führt dazu, dass der Export fehlschlägt und der Vorgang in einem unsicheren Zustand bleibt. Dies ist auch in der Fehlermeldung von gcloud zu sehen:

operation is taking longer than expected


Unbekannter Fehler beim Export

Beim Exportieren einer Datenbank in einen Cloud Storage-Bucket ist die Fehlermeldung Unknown error zu sehen.

Mögliche Ursache

Die Übertragung kann aufgrund eines Bandbreitenproblems fehlschlagen.

Die Cloud SQL-Instanz befindet sich möglicherweise in einer anderen Region als der Cloud Storage-Bucket. Das Lesen und Schreiben von Daten von einem Kontinent auf einen anderen verursacht eine hohe Netzwerkauslastung, wodurch zeitweise Probleme wie diese auftreten können. Prüfen Sie die Regionen Ihrer Instanz und Ihres Buckets.

Lösungsvorschlag

Mit serverlosem Export den Export von der primären Instanz auslagern.

Sie möchten Exporte automatisieren

Sie möchten Exporte automatisieren.

Mögliche Ursache

Cloud SQL bietet keine Möglichkeit, Exporte zu automatisieren.

Lösungsvorschlag

Sie können Ihr eigenes automatisiertes Exportsystem mit Google Cloud-Produkten wie Cloud Scheduler, Pub/Sub und Cloud Functions erstellen.


Systemfehler "ERROR_RDBMS"

Folgende Fehlermeldung ist zu sehen: [ERROR_RDBMS] system error occurred.

Mögliche Ursache

  • Der Nutzer hat eventuell nicht alle erforderlichen Cloud Storage-Berechtigungen.
  • Die Datenbanktabelle ist möglicherweise nicht vorhanden.

Lösungsvorschlag

  1. Prüfen Sie, ob Sie mindestens WRITER-Berechtigungen für den Bucket und READER-Berechtigungen für die Exportdatei haben. Weitere Informationen zum Konfigurieren der Zugriffssteuerung in Cloud Storage finden Sie unter Access Control Lists (ACLs) erstellen und verwalten.
  2. Prüfen Sie, ob die Tabelle vorhanden ist. Falls die Tabelle vorhanden ist, sollten Sie nachsehen, ob Sie die richtigen Berechtigungen für den Bucket haben.

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

Es kann ein Ereignis, eine Ansicht, eine Funktion oder eine Prozedur in der Dumpdatei mit superuser@localhost (wie root@localhost) vorhanden sein. Dies wird von Cloud SQL nicht unterstützt.

Lösungsvorschlag

Informationen dazu finden Sie in diesem Dokument zum Importieren einer Datenbank mit DEFINER-Klauseln.

Nächste Schritte