Probleme bei der Migration von PostgreSQL zu AlloyDB diagnostizieren

Migrationsfehler beheben

Während der Laufzeit des Migrationsjobs können Fehler auftreten.

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

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

Wenn Sie einen Fehler beheben möchten, rufen Sie den fehlgeschlagenen Migrationsjob auf, um den Fehler anzuzeigen, und folgen Sie der Anleitung in der Fehlermeldung.

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

In der folgenden Tabelle finden Sie einige Beispiele für Probleme und wie sie behoben werden können:

Symptom Mögliche Ursachen Lösungsvorschlag
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 Quell- und Zieldatenbank. Die Kombination der Quell- und Zieldatenbankversionen wird nicht unterstützt. Insbesondere ist die angegebene Quelldatenbankversion nicht mit der Zieldatenbankversion kompatibel. Die Version der Zieldatenbank muss mit der Version der Quelldatenbank identisch sein oder eine Hauptversion darüber liegen. Erstellen Sie dann einen neuen Migrationsjob.
Datendefinitionssprachen (DDLs) oder Datenbearbeitungssprachen (DMLs) sind an 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, werden blockiert.

Während der anfänglichen Synchronisierung (Full Dump) sollten DDLs oder Programme, die ACCESS EXCLUSIVE Sperren wie ALTER TABLE oder DROP TABLE erfordern, in den Tabellen vermieden werden. Andernfalls warten die DDLs oder Programme, bis die anfängliche Synchronisierung abgeschlossen ist.

Wenn sich eine Tabelle beispielsweise noch in der anfänglichen 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 anfängliche Synchronisierung abgeschlossen ist.

Fehlermeldung: No pglogical extension installed on databases (X) In mindestens einer Quelldatenbank ist pglogical nicht installiert. Folgen Sie diesen Richtlinien, um pglogical in den Datenbanken der Quellinstanz zu installieren.
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 diesen Richtlinien, 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'. Für die Quelldatenbank ist ein anderer Wert als logical für wal_level festgelegt. Legen Sie den Wert wal_level auf logical fest.
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 beim Promoten eines Migrationsjobs nicht beseitigt werden.

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

Weitere Informationen zu den auszuführen 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 Stammzertifikat. Für das Quellzertifikat sind jedoch sowohl das Stamm- 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 Zertifikat der Zertifizierungsstelle der Quelle, das sowohl das Stammzertifikat als auch alle erforderlichen Zwischenzertifikate enthält.

Verwenden Sie für den Anwendungsfall des 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. Legen Sie für diesen Parameter einen Wert von mindestens {max_number_of_tables_per_database}/(max_connections + max_prepared_transactions) fest.

Fehlermeldung: ERROR: no data left in message.

Das pglogical-Paket ist auf der Quellinstanz nicht richtig 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 die AlloyDB-Zieldatenbank kann langsam sein.
  • Legen Sie beim Erstellen des Ziels die Größe des Datenlaufwerks so fest, dass sie der endgültigen Größe nahekommt. In der vollständigen Dumpphase wird eine schreibintensive E/A-Arbeitslast verwendet. Eine größere Laufwerksgröße führt zu einer besseren E/A-Leistung. Weitere Informationen finden Sie unter Blockspeicherleistung.
  • Wählen Sie eine höhere Stufe für das AlloyDB-Ziel aus, um die maximal verfügbare Netzwerk- und Laufwerkbandbreite zu erhalten.
  • Passen Sie das Flag max_wal_size des AlloyDB-Ziels an. Normalerweise ist 32 GB oder 64 GB ein guter Wert für dieses Flag. Sie müssen den Server nicht neu starten, um dieses Flag zu aktualisieren.
Fehlermeldung: subscriber {subscriber_name} initialization failed during nonrecoverable step (d), please try the setup again

Der Migrationsjob ist während der Phase des vollständigen Dumps fehlgeschlagen und kann nicht wiederhergestellt werden. Die Quelldatenbankinstanz wurde neu gestartet oder befindet sich im Wiederherstellungsmodus oder die Replikationsverbindungen wurden aufgrund eines unzureichenden Werts für den Parameter wal_sender_timeout beendet.

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 Ihre AlloyDB-Instanz aus. Eine Liste der neuesten Protokolle für die Instanz wird angezeigt.
  3. Wählen Sie aus den Logdateinamen postgres.log aus.
  4. Legen Sie den Schweregrad des Logs auf alle Ebenen über Warning fest. Die ersten Fehlerprotokolle können die Ursache des Fehlers sein.
  • Achten Sie darauf, dass der Database Migration Service während der vollständigen Dumpphase 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 (z. B. 0) festgelegt ist.
  • Starten Sie den Migrationsjob neu und versuchen Sie es noch einmal.
Fehlermeldung: ERROR: unknown column name {column_name}

Einer replizierten Tabelle wurde auf dem primären Knoten eine Spalte hinzugefügt, aber nicht auf dem Replikationsknoten.

Bei kontinuierlichen Migrationen werden nur DML-Änderungen (Data Manipulation Language, Datenbearbeitungssprache) automatisch aktualisiert. Die Verwaltung von Änderungen an der Datendefinitionssprache (DDL), damit die Quell- und Zieldatenbanken kompatibel bleiben, liegt in der Verantwortung des Nutzers. Dies kann auf zwei Arten erfolgen:

  • Beenden Sie Schreibvorgänge in die Quelldatenbank und führen Sie die DDL-Befehle in der Quelle und dem Ziel aus. Gewähren Sie dem Cloud SQL-Nutzer, der die DDL-Änderungen anwendet, die Rolle cloudsqlexternalsync, bevor die DDL-Befehle für das Ziel ausgeführt werden.
  • 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 an der Quelle als auch am Ziel denselben Nutzernamen haben. Außerdem sollte er der Superuser oder Inhaber des zu migrierenden Artefakts sein (z. B. der Tabelle, Sequenz, Ansicht oder Datenbank).
  • Beispiele für die Verwendung von pglogical.replicate_ddl_command. finden Sie unter Kontinuierliche Migration.

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

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

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 aufgrund eines unzureichenden Werts für wal_sender_timeout parameter beendet. Der Fehler tritt in der Regel während der Replikationsphase nach dem erfolgreichen ersten Dump auf.

Erhöhen Sie den Parameterwert wal_sender_timeout oder deaktivieren Sie den Zeitüberschreitungsmechanismus, indem Sie den Wert in der Quelldatenbankinstanz auf 0 festlegen.

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 Ursachen

Wenn Sie eine AlloyDB-Instanz hochstufen und die Quellinstanz von der AlloyDB-Instanz aus nicht erreichbar ist (z. B. weil die Quellinstanz nicht ausgeführt wird oder Sie die AlloyDB-Instanz aus der Zulassungsliste der Quellinstanzen entfernt haben), können die für die Replikation erforderlichen Einstellungen beim Hochstufen 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 nicht in der Fehlermeldung enthalten sind, führen Sie den folgenden Befehl aus, um nach den vorhandenen Replikationsslots zu suchen:

    select pg_drop_replication_slot(slot_name) from pg_replication_slots where slot_name like '%alloydb%' and active = 'f';
  3. Wenn es keine AlloyDB-Replikate gibt, die 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 'alloydb';
  4. Wenn die pglogical-Erweiterung nicht mehr benötigt wird, führen Sie den folgenden Befehl aus, um sie zu deinstallieren:

    DROP EXTENSION IF EXISTS pglogical;

Verwaiste AlloyDB-Cluster im Bootstrapping-Modus löschen

In seltenen Grenzfällen kann es vorkommen, dass Ihr Migrationsjob gelöscht wurde, der zugehörige AlloyDB-Cluster jedoch nicht und sich noch im Bootstrapping-Modus befindet. Sie können den Cluster mit dem gcloud-Befehl von AlloyDB zum Löschen eines Clusters in Kombination mit der Option --force löschen.

Wenn Sie einen Bootstrapping-Cluster löschen, während er von einem Migrationsjob verwendet wird, führt dies zu undefiniertem Verhalten.

Nutzer und Rollen verwalten

Vorhandene Nutzer migrieren

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

Nutzer von alloydbexternalsync

Während der Migration sind alle Objekte in der primären AlloyDB-Instanz dem Nutzer alloydbexternalsync zugewiesen. Nach der Migration können Sie die Inhaberschaft der Objekte auf andere Nutzer übertragen. Gehen Sie dazu so vor:

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