Probleme bei homogenen Migrationen zu Cloud SQL for PostgreSQL diagnostizieren

Beim Migrationsjob können während der Laufzeit Fehler auftreten.

  • Einige Fehler, wie z. B. ein ungültiges Passwort in der Quelldatenbank, sind wiederherstellbar. Dies bedeutet, dass diese Fehler behoben werden können und der Migrationsjob anschließend automatisch fortgesetzt wird.
  • Einige Fehler sind nicht wiederherstellbar, z. B. Fehler bei der Datenreplikation. In diesem Fall muss der Migrationsjob von Anfang an neu gestartet werden.

Wenn ein Fehler auftritt, ändert sich der Status des Migrationsjobs in Failed und der Unterstatus spiegelt den letzten Status vor dem Fehler wider.

Zum Beheben eines Fehlers rufen Sie den fehlgeschlagenen Migrationsjob auf, um den Fehler anzuzeigen, und folgen dann den Schritten in der Fehlermeldung.

Weitere Informationen zum Fehler finden Sie in Cloud Monitoring. Klicken Sie dazu auf den Link im Migrationsjob. Die Logs werden nach dem jeweiligen Migrationsjob gefiltert.

In der folgenden Tabelle finden Sie einige Beispiele für Probleme und deren Lösungen:

Problem Mögliche Ursache Lösungsvorschlag
Wenn Sie zu einer vorhandenen Zielinstanz migrieren, erhalten Sie die folgende Fehlermeldung: The destination instance contains existing data or user defined entities (for example databases, tables, or functions). You can only migrate to empty instances. Clear your destination instance and retry the migration job. Ihre Cloud SQL-Zielinstanz enthält zusätzliche Daten. Sie können nur zu vorhandenen Instanzen migrieren, die leer sind. Weitere Informationen finden Sie unter Bekannte Einschränkungen. Stufen Sie Ihre Zielinstanz hoch, um sie zu einer Lese-/Schreibinstanz zu machen, entfernen Sie die zusätzlichen Daten und versuchen Sie es noch einmal. Weitere Informationen finden Sie unter Zusätzliche Daten aus einer vorhandenen Zielinstanz entfernen.
Fehler beim Herstellen einer Verbindung zur Quelldatenbankinstanz. Es gab ein Verbindungsproblem zwischen der Quelldatenbankinstanz und der Zielinstanz. Folgen Sie der Anleitung unter Verbindungsprobleme beheben.
Fehler beim Ausführen des Migrationsjobs aufgrund inkompatibler Versionen von Quelldatenbank und Ziel. Die Versionen der Quell- und Zieldatenbank sind keine unterstützte Kombination. Insbesondere ist die angegebene Version der Quelldatenbank nicht mit der Version der Zieldatenbank kompatibel. Achten Sie darauf, dass die Version der Zieldatenbank mit der Version der Quelldatenbank identisch ist oder eine Hauptversion höher liegt. Erstellen Sie dann einen neuen Migrationsjob.
Datendefinitionssprachen (DDLs) oder Datenbearbeitungssprachen (DMLs) sind in der Quelle blockiert. DDLs, für die die ACCESS EXCLUSIVE Sperre erforderlich ist und die während der vollständigen Dump-Phase ausgeführt werden, sind blockiert.

Während der ersten Synchronisierung (vollständiger Dump) sollten DDLs oder Programme, für die ACCESS EXCLUSIVE Sperren erforderlich sind, z. B. ALTER TABLE oder DROP TABLE, in den Tabellen vermieden werden. Andernfalls warten die DDLs oder Programme, bis die erste Synchronisierung abgeschlossen ist.

Wenn sich eine Tabelle beispielsweise noch in der ersten Synchronisierung befindet und ein ALTER TABLE-Befehl für dieselbe Tabelle ausgeführt wird, wird der Befehl nicht ausgeführt und nachfolgende DDL- und DML-Befehle werden blockiert, bis die erste Synchronisierung abgeschlossen ist.

Fehlermeldung: No pglogical extension installed on databases (X) In einer oder mehreren Quelldatenbanken ist pglogical nicht installiert. Folgen Sie dieser Anleitung, um pglogical in den Datenbanken der Quellinstanz zu installieren.
Wenn Sie zu PostgreSQL Version 15 migrieren, tritt nach mehreren aufeinanderfolgenden Versuchen, eine Verbindung herzustellen, eines der folgenden Symptome auf:
  • Sie erhalten die Fehlermeldung Cannot connect to invalid database.
  • Der Migrationsjob-Messwert „Speichernutzung“ zeigt nach langer Zeit keinen Fortschritt, obwohl der Migrationsjob den vollständigen Datenbankdump ausführt.
Dieses Problem wird häufig auf das Deadlock-Problem in der pglogical Erweiterung zurückgeführt. Weitere Informationen finden Sie im pglogical Issue-Tracker auf GitHub. Versuchen Sie es noch einmal oder migrieren Sie zuerst zu einer Zwischenversion von PostgreSQL. Weitere Informationen finden Sie unter Fehlermeldung: Cannot connect to invalid database.
Fehlermeldung: Replication user 'x' doesn't have sufficient privileges. Der Nutzer, der Database Migration Service verwendet, hat nicht die erforderlichen Berechtigungen, um den angegebenen Vorgang auszuführen. Folgen Sie dieser Anleitung, um sicherzustellen, dass dieser Nutzer die erforderlichen Berechtigungen hat.
Fehlermeldung: Unable to connect to source database server. Database Migration Service kann keine Verbindung zum Quelldatenbankserver herstellen. Achten Sie darauf, dass die Quell- und Zieldatenbankinstanzen miteinander kommunizieren können und dass Sie alle erforderlichen Voraussetzungen erfüllt haben, die beim Definieren der Einstellungen für den Migrationsjob angezeigt wurden.
Fehlermeldung: The source database 'wal_level' configuration must be equal to 'logical'. Der wal_level für die Quelldatenbank ist auf einen anderen Wert als logical gesetzt. Setzen Sie wal_level auf logical.
Fehlermeldung: The source database 'max_replication_slots' configuration is not sufficient. Der Parameter max_replication_slots wurde nicht richtig konfiguriert. Folgen Sie dieser Anleitung, um diesen Parameter richtig festzulegen.
Fehlermeldung: The source database 'max_wal_senders' configuration is not sufficient. Der Parameter max_wal_senders wurde nicht richtig konfiguriert. Folgen Sie dieser Anleitung, um diesen Parameter richtig festzulegen.
Fehlermeldung: The source database 'max_worker_processes' configuration is not sufficient. Der Parameter max_worker_processes wurde nicht richtig konfiguriert. Folgen Sie dieser Anleitung, um diesen Parameter richtig festzulegen.

Fehlermeldung: Cleanup may have failed on source due to error: generic::unknown: failed to connect to on-premises database.

ODER

Fehlermeldung: Error promoting EM replica: finished drop replication with errors.

Die für die Replikation erforderlichen Einstellungen können während der Hochstufung eines Migrationsjobs nicht bereinigt werden.

Führen Sie für jede Datenbank Befehle als Nutzer mit der Berechtigung superuser aus.

Weitere Informationen zu den auszuführenden Befehlen finden Sie unter Replikationsslots bereinigen.

Fehlermeldung: x509 certificate signed by unknown authority.

Das für Database Migration Service bereitgestellte CA-Zertifikat der Quelle enthält möglicherweise nur das Root-Zertifikat. Für das Quellzertifikat sind jedoch sowohl das Root-Zertifikat als auch alle Zwischenzertifikate erforderlich.

Bei Amazon Relational Database Service kann beispielsweise die Verwendung des Zertifikats rds-ca-2019-root.pem zu diesem Problem führen.

Erstellen Sie ein kombiniertes CA-Zertifikat der Quelle, das sowohl das Root-Zertifikat als auch alle erforderlichen Zwischenzertifikate enthält.

Verwenden Sie für den Anwendungsfall von Amazon Relational Database Service anstelle des Zertifikats rds-ca-2019-root.pem das Zertifikat rds-combined-ca-bundle.pem.

Fehlermeldung: ERROR: Out of shared memory HINT: You might need to increase max_locks_per_transaction.

Der für den Parameter max_locks_per_transaction festgelegte Wert ist nicht ausreichend. Setzen Sie den Wert für diesen Parameter auf mindestens {max_number_of_tables_per_database}/(max_connections + max_prepared_transactions).

Fehlermeldung: ERROR: no data left in message.

Das pglogical-Paket ist nicht richtig auf der Quellinstanz installiert. Weitere Informationen zur korrekten Installation dieses Pakets finden Sie unter pglogical-Paket auf der Quellinstanz installieren.

Fehlermeldung: Cannot assign TransactionIds during recovery.

Die konfigurierte Quelle befindet sich im Wiederherstellungsmodus. Konfigurieren Sie eine Quelle, die sich nicht im Wiederherstellungsmodus befindet.
Der vollständige Dump ist langsam. Der Import großer Datenmengen aus der Quelldatenbank in das Cloud SQL-Ziel kann langsam sein.
  • Legen Sie beim Erstellen des Ziels die Größe des Datenlaufwerks so fest, dass sie der endgültigen Größe entspricht. Die vollständige Dump-Phase verwendet eine E/A-schreibintensive Arbeitslast und eine größere Laufwerkgröße bietet eine bessere E/A-Leistung. Weitere Informationen finden Sie unter Block Storage-Leistung.
  • Wählen Sie für das Cloud SQL-Ziel eine höhere Stufe aus, um die maximal verfügbare Netzwerk- und Laufwerkbandbreite zu erhalten.
  • Optimieren Sie das Flag max_wal_size des Cloud SQL-Ziels. Normalerweise ist 32 GB oder 64 GB ein guter Wert für dieses Flag. Wenn Sie dieses Flag aktualisieren, müssen Sie den Server nicht neu starten.
Fehlermeldung: subscriber {subscriber_name} initialization failed during nonrecoverable step (d), please try the setup again

Der Migrationsjob ist während der vollständigen Dump-Phase fehlgeschlagen und kann nicht wiederhergestellt werden. Die Quelldatenbankinstanz wurde neu gestartet oder befindet sich im Wiederherstellungsmodus. Die Replikationsverbindungen wurden beendet, weil der Wert für den wal_sender_timeout Parameter nicht ausreichend war.

So ermitteln Sie die Grundursache des Problems:

  1. Rufen Sie in der Google Cloud Console die Seite Log-Explorer auf.
  2. Wählen Sie in der Ressourcenliste Ihr Cloud SQL-Replikat aus. Eine Liste der letzten Logs für das Replikat wird angezeigt.
  3. Wählen Sie in den Logdateinamen postgres.log aus.
  4. Setzen Sie die Schweregradstufe des Logs auf alle Stufen über Warning. Die ersten Fehlerlogs können die Grundursache des Fehlers sein.
  • Achten Sie darauf, dass Database Migration Service während der vollständigen Dump-Phase immer eine Verbindung zur Quelldatenbankinstanz herstellen kann.
  • Prüfen Sie, ob der Wert des Parameters wal_sender_timeout in der Quelldatenbankinstanz auf eine größere Zahl gesetzt ist (z. B. 0).
  • Starten Sie den Migrationsjob neu und versuchen Sie es noch einmal.
Fehlermeldung: ERROR: unknown column name {column_name}

In der replizierten Tabelle auf dem primären Knoten wurde eine Spalte hinzugefügt, nicht aber auf dem Replikatknoten.

Bei fortlaufenden Migrationen werden nur Änderungen der Datenbearbeitungssprache (DML) automatisch aktualisiert. Der Nutzer ist für die Verwaltung von Änderungen der Datendefinitionssprache (DDL) verantwortlich, damit die Quell- und Zieldatenbanken kompatibel bleiben. Dies kann auf zwei Arten erreicht werden:

  • Beenden Sie Schreibvorgänge in die Quelldatenbank und führen Sie die DDL-Befehle in der Quelle und dem Ziel aus. Bevor Sie die DDL-Befehle im Ziel ausführen, gewähren Sie dem Cloud SQL-Nutzer, der die DDL-Änderungen vornimmt, die Rolle cloudsqlexternalsync.
  • Verwenden Sie pglogical.replicate_ddl_command, damit DDL-Befehle an der Quelle und am Ziel an einem konsistenten Punkt ausgeführt werden können. Der Nutzer, der die Befehle ausführt, muss sowohl in der Quelle als auch im Ziel denselben Nutzernamen haben und der Superuser oder der Eigentümer des zu migrierenden Artefakts sein (z. B. die Tabelle, Sequenz, Ansicht oder Datenbank).
  • Beispiele für die Verwendung von pglogical.replicate_ddl_command. finden Sie unter Fortlaufende Migration.

Fehlermeldung: ERROR: cannot truncate a table referenced in a foreign key constraint

Der Nutzer hat versucht, eine Tabelle zu kürzen, die eine Fremdschlüsseleinschränkung hat.

Entfernen Sie zuerst die Fremdschlüsseleinschränkung und kürzen Sie dann die Tabelle.

Fehlermeldung: ERROR: connection to other side has died

Die Replikationsverbindung wurde beendet, weil der Wert für den wal_sender_timeout parameter nicht ausreichend war. Der Fehler tritt normalerweise während der Replikationsphase nach dem erfolgreichen ersten Dump auf.

Erwägen Sie, den Wert des Parameters wal_sender_timeout zu erhöhen oder den Timeout-Mechanismus zu deaktivieren, indem Sie seinen Wert in der Quelldatenbankinstanz auf 0 setzen.

Warnmeldung: migration job test configuration has returned the following warnings: Some table(s) have limited support.

Die Quelle enthält Tabellen mit eingeschränkter Unterstützung, z. B. Tabellen ohne Primärschlüssel.

Dies ist eine Warnmeldung. Sie können mit der Migration fortfahren, aber beachten Sie dass nicht unterstützte Entitäten (z. B. Tabellen ohne Primärschlüssel) nicht migriert werden. Weitere Informationen finden Sie unter Quelldatenbanken konfigurieren.

Wenn Sie ausgewählte Datenbanken migrieren und der Migrationsjob Daten nicht in eine oder mehrere Datenbanken replizieren kann, wird in der Liste der Datenbanken der Status Fehlgeschlagen angezeigt. Verschiedene Migrationsjobfehler.

Klicken Sie in der Spalte Fehler auf Fehler ansehen und beheben Sie sie. Sie können die fehlgeschlagenen Datenbanken auch aus dem Migrationsjob entfernen.

Weitere Informationen zum Entfernen einer fehlgeschlagenen Datenbank aus einem Migrationsjob finden Sie unter Migrationsjobs verwalten.

Zusätzliche Daten aus einer vorhandenen Zielinstanz entfernen

Wenn Sie zu einer vorhandenen Zielinstanz migrieren, erhalten Sie die folgende Fehlermeldung: The destination instance contains existing data or user defined entities (for example databases, tables, or functions). You can only migrate to empty instances. Clear your destination instance and retry the migration job.

Dieses Problem kann auftreten, wenn Ihre Zielinstanz zusätzliche Daten enthält. Sie können nur zu vorhandenen Instanzen migrieren, die leer sind. Weitere Informationen finden Sie unter Bekannte Einschränkungen.

Lösungsvorschlag

Entfernen Sie zusätzliche Daten aus Ihrer Zielinstanz und starten Sie den Migrationsjob noch einmal. Gehen Sie dazu so vor:

  1. Stoppen Sie den Migrationsjob.
  2. An diesem Punkt befindet sich Ihre Cloud SQL-Zielinstanz im Modus `read-only`. Stufen Sie die Zielinstanz hoch, um Schreibzugriff zu erhalten.
  3. Stellen Sie eine Verbindung zu Ihrer Cloud SQL-Zielinstanz her.
  4. Entfernen Sie zusätzliche Daten aus den Datenbanken Ihrer Zielinstanz. Ihr Ziel darf nur Systemkonfigurationsdaten enthalten. Zieldatenbanken dürfen keine Nutzerdaten (z. B. Tabellen) enthalten. Es gibt verschiedene SQL-Anweisungen , die Sie in Ihren Datenbanken ausführen können, um Nicht-Systemdaten zu finden, z. B.:

    Beispiel für eine SQL-Anweisung zum Abrufen von Nicht-Systemdatenbanken (zum Maximieren klicken)

    SELECT datname FROM pg_catalog.pg_database
    WHERE datname NOT IN ('cloudsqladmin', 'template1', 'template0', 'postgres');

    Beispiel für eine SQL-Anweisung zum Abrufen von Nicht-Systemdaten in der Datenbank postgres (zum Maximieren klicken)

    Die postgres Datenbank ist eine Systemdatenbank, kann aber Nicht-Systemdaten enthalten. Achten Sie darauf, dass Sie diese Anweisungen in der postgres Datenbank ausführen. Wenn Sie den psql Client verwenden, um eine Verbindung zur Zielinstanz herzustellen, können Sie mit dem Befehl \connect {database_name_here} zu einer anderen Datenbank wechseln, ohne die Verbindung zurückzusetzen.

    SELECT table_schema, table_name FROM information_schema.tables
    WHERE table_schema != 'information_schema' AND table_schema not like 'pg\_%';
    
    SELECT routine_schema, routine_name FROM information_schema.routines
    WHERE routine_schema != 'information_schema' AND routine_schema not like 'pg\_%';
    
    SELECT extname FROM pg_extension WHERE extname != 'plpgsql';
        
  5. Starten Sie den Migrationsjob.

Replikationsslots bereinigen

Es wird eine der folgenden Meldungen angezeigt:

  • Cleanup may have failed on source due to error: generic::unknown: failed to connect to on-premises database.
  • Error promoting EM replica: finished drop replication with errors.

Mögliche Ursache

Wenn Sie eine Cloud SQL-Instanz hochstufen und die Quellinstanz nicht von der Cloud SQL-Instanz aus erreichbar ist (z. B. die Quellinstanz wird nicht ausgeführt oder Sie haben die Cloud SQL-Instanz aus der Zulassungsliste der Quellinstanzen entfernt), können die für die Replikation erforderlichen Einstellungen während der Hochstufung eines Migrationsjobs nicht bereinigt werden. Sie müssen die Replikationsslots manuell bereinigen.

Lösungsvorschlag

Führen Sie für jede Datenbank die folgenden Befehle als Nutzer mit der Berechtigung superuser aus:

  1. Rufen Sie die Namen der Replikationsslots aus der Fehlermeldung ab und führen Sie dann den folgenden Befehl aus, um die Slots einzeln zu löschen:

    select pg_drop_replication_slot({slot_name});
  2. Wenn die Namen der Replikationsslots in der Fehlermeldung nicht verfügbar sind, führen Sie den folgenden Befehl aus, um die vorhandenen Replikationsslots abzufragen:

    select pg_drop_replication_slot(slot_name) from pg_replication_slots where slot_name like '%cloudsql%' and active = 'f';
  3. Wenn keine Cloud SQL-Replikate die Quellinstanz verwenden, führen Sie den folgenden Befehl aus, um die pglogical-Einstellungen zu bereinigen:

    select pglogical.drop_node(node_name) from pglogical.node where node_name like 'cloudsql';
  4. Wenn die pglogical-Erweiterung nicht mehr benötigt wird, führen Sie den folgenden Befehl aus, um die Erweiterung zu deinstallieren:

    DROP EXTENSION IF EXISTS pglogical;


Fehlermeldung: Cannot connect to invalid database

Wenn Sie zu PostgreSQL Version 15 migrieren, tritt nach mehreren aufeinanderfolgenden Versuchen, eine Verbindung herzustellen, eines der folgenden Symptome auf:

  • Sie erhalten die Fehlermeldung Cannot connect to invalid database.
  • Der Migrationsjob-Messwert „Speichernutzung“ zeigt nach langer Zeit keinen Fortschritt, obwohl der Migrationsjob den vollständigen Datenbankdump ausführt.

Mögliche Ursache

Dieses Problem wird häufig auf das Deadlock-Problem in der pglogical-Erweiterung zurückgeführt. Weitere Informationen finden Sie im pglogical Issue-Tracker auf GitHub.

Lösungsvorschlag

Führen Sie den Migrationsjob noch einmal mit einer neuen Zielinstanz aus

Löschen Sie die Zieldatenbank, in der das Problem aufgetreten ist, und erstellen Sie den Migrationsjob neu. Gehen Sie so vor:

  1. Löschen Sie die Zielinstanz, in der die Probleme aufgetreten sind. Weitere Informationen finden Sie unter Instanzen in Cloud SQL for PostgreSQL löschen.
  2. Löschen Sie den fehlgeschlagenen Migrationsjob. Weitere Informationen finden Sie unter Migrationsjob prüfen.
  3. Erstellen Sie den Migrationsjob neu. Weitere Informationen finden Sie unter Migrationsjob erstellen.

Zu einer Zwischenversion migrieren

Migrieren Sie zu einer früheren PostgreSQL-Version, z. B. PostgreSQL 14. Nach einer erfolgreichen Migration können Sie versuchen, ein Upgrade auf die gewünschte PostgreSQL 15-Instanz durchzuführen. Weitere Informationen finden Sie unter Datenbankhauptversion durch Migration von Daten aktualisieren in Cloud SQL for PostgreSQL.

Nutzer und Rollen verwalten

Vorhandene Nutzer migrieren

Derzeit unterstützt Database Migration Service nicht die Migration vorhandener Nutzer von einer Quellinstanz zu einer Cloud SQL-Zielinstanz. Sie können diese Migration verwalten, indem Sie die Nutzer manuell in Cloud SQL erstellen.

Informationen zum Nutzer cloudsqlexternalsync

Während der Migration gehören alle Objekte im Cloud SQL-Replikat dem Nutzer cloudsqlexternalsync. Nachdem die Daten migriert wurden, können Sie den Eigentümer der Objekte ändern. Gehen Sie dazu so vor:

  • Führen Sie den Befehl GRANT cloudsqlexternalsync to {USER} aus.
  • Führen Sie in jeder Datenbank den reassign owned by cloudsqlexternalsync to {USER}; Befehl aus.
  • Wenn Sie den Nutzer cloudsqlexternalsync entfernen möchten, führen Sie den Befehl drop role cloudsqlexternalsync aus.

Daten in eine neue Cloud SQL-Instanz importieren

Wenn Sie zuerst Daten exportieren aus einer Cloud SQL-Instanz, die von Database Migration Service in Cloud Storage migriert wurde, und die Daten dann importieren aus Cloud Storage in eine eigenständige Cloud SQL-Instanz, kann der Import fehlschlagen, weil der Nutzer cloudsqlexternalsync in der Zielinstanz nicht vorhanden ist.

Um das Problem zu beheben, erstellen Sie entweder den Nutzer cloudsqlexternalsync in der Zielinstanz oder entfernen Sie den Nutzer aus der migrierten Instanz.