Diagnostica i problemi nelle migrazioni da PostgreSQL ad AlloyDB

Risolvere gli errori di migrazione

Il processo del job di migrazione potrebbe generare errori durante il runtime.

  • Alcuni errori, ad esempio una password errata nel database di origine, sono recuperabili, il che significa che possono essere corretti e il job di migrazione riprende automaticamente.
  • Alcuni sono irrecuperabili, ad esempio gli errori nella replica dei dati, il che significa che il job di migrazione deve essere riavviato dall'inizio.

Quando si verifica un errore, lo stato del job di migrazione cambia in Failed e il sottostato riflette l'ultimo stato prima dell'errore.

Per risolvere un errore, vai al job di migrazione non riuscito per visualizzare l'errore e segui i passaggi descritti nel messaggio di errore.

Per visualizzare ulteriori dettagli sull'errore, vai a Cloud Monitoring utilizzando il link nel job di migrazione. I log vengono filtrati in base al job di migrazione specifico.

Nella tabella seguente sono riportati alcuni esempi di problemi e come possono essere risolti:

Sintomo Cause possibili Cose da provare
Errore di connessione all'istanza del database di origine. Si è verificato un problema di connettività tra l'istanza del database di origine e l'istanza di destinazione. Segui i passaggi descritti in Debug della connettività.
Errore durante l'esecuzione del job di migrazione a causa di versioni del database di origine e di destinazione incompatibili. Le versioni del database di origine e di destinazione non sono una combinazione supportata. Nello specifico, la versione del database di origine fornita non è compatibile con la versione del database di destinazione. Assicurati che la versione del database di destinazione sia uguale o una versione principale superiore a quella del database di origine. Poi, crea un nuovo job di migrazione.
I Data Definition Language (DDL) o i Data Manipulation Language (DML) sono bloccati nell'origine. Le DDL che richiedono il ACCESS EXCLUSIVE blocco e sono in esecuzione durante la fase di dump completo vengono bloccate.

Durante il processo di sincronizzazione iniziale (dump completo), è necessario evitare DDL o programmi che richiedono ACCESS EXCLUSIVE blocchi come ALTER TABLE o DROP TABLE nelle tabelle. In caso contrario, le DLL o i programmi attenderanno il completamento della sincronizzazione iniziale.

Ad esempio, se una tabella è ancora in fase di sincronizzazione iniziale e viene eseguito un comando ALTER TABLE sulla stessa tabella, il comando non verrà eseguito e i successivi comandi DDL e DML verranno bloccati fino al termine della sincronizzazione iniziale.

Messaggio di errore: No pglogical extension installed on databases (X) Uno o più database di origine non hanno installato pglogical. Segui queste linee guida per installare pglogical sui database dell'istanza di origine.
Messaggio di errore: Replication user 'x' doesn't have sufficient privileges. L'utente che utilizza Database Migration Service non dispone dei privilegi necessari per eseguire l'operazione designata. Segui queste linee guida per assicurarti che l'utente disponga dei privilegi necessari.
Messaggio di errore: Unable to connect to source database server. Database Migration Service non può stabilire una connessione al server del database di origine. Assicurati che le istanze del database di origine e di destinazione possano comunicare tra loro e di aver completato tutti i prerequisiti richiesti visualizzati quando hai definito le impostazioni per il job di migrazione.
Messaggio di errore: The source database 'wal_level' configuration must be equal to 'logical'. Il valore di wal_level per il database di origine è impostato su un valore diverso da logical. Imposta wal_level su logical.
Messaggio di errore: The source database 'max_replication_slots' configuration is not sufficient. Il parametro max_replication_slots non è stato configurato correttamente. Segui queste linee guida per impostare correttamente questo parametro.
Messaggio di errore: The source database 'max_wal_senders' configuration is not sufficient. Il parametro max_wal_senders non è stato configurato correttamente. Segui queste linee guida per impostare correttamente questo parametro.
Messaggio di errore: The source database 'max_worker_processes' configuration is not sufficient. Il parametro max_worker_processes non è stato configurato correttamente. Segui queste linee guida per impostare correttamente questo parametro.

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

OPPURE

Messaggio di errore: Error promoting EM replica: finished drop replication with errors.

Le impostazioni necessarie per la replica non possono essere pulite durante la promozione di un job di migrazione.

Per ogni database, esegui i comandi come utente con il privilegio superuser.

Per ulteriori informazioni sui comandi da eseguire, vedi Pulizia degli slot di replica.

Messaggio di errore: x509 certificate signed by unknown authority.

Il certificato CA di origine fornito a Database Migration Service potrebbe contenere solo il certificato radice. Tuttavia, il certificato di origine richiede sia il certificato radice sia tutti i certificati intermedi.

Ad esempio, per Amazon Relational Database Service, l'utilizzo del certificato rds-ca-2019-root.pem potrebbe causare questo problema.

Crea un certificato CA di origine combinato che contenga sia il certificato radice sia tutti i certificati intermedi richiesti.

Per il caso d'uso di Amazon Relational Database Service, utilizza il certificato rds-combined-ca-bundle.pem anziché il certificato rds-ca-2019-root.pem.

Messaggio di errore: ERROR: Out of shared memory HINT: You might need to increase max_locks_per_transaction.

Il valore impostato per il parametro max_locks_per_transaction non è sufficiente. Imposta il valore di questo parametro in modo che sia almeno {max_number_of_tables_per_database}/(max_connections + max_prepared_transactions).

Messaggio di errore: ERROR: no data left in message.

Il pacchetto pglogical non è installato correttamente sull'istanza di origine. Per saperne di più su come installare correttamente questo pacchetto, consulta Installare il pacchetto pglogical sull'istanza di origine.

Messaggio di errore: Cannot assign TransactionIds during recovery.

L'origine configurata è in modalità di ripristino. Configura un'origine che non è in modalità di recupero.
Il dump completo è lento. L'importazione di grandi quantità di dati dal database di origine nella destinazione AlloyDB potrebbe essere lenta.
  • Scegli un livello superiore per la destinazione AlloyDB per ottenere la larghezza di banda di rete e del disco massima disponibile.
  • Ottimizza il flag max_wal_size della destinazione AlloyDB. In genere, 32 GB o 64 GB sono un buon valore da impostare per questo flag. L'aggiornamento di questo flag non richiede il riavvio del server.
Messaggio di errore: subscriber {subscriber_name} initialization failed during nonrecoverable step (d), please try the setup again

Il job di migrazione non è riuscito durante la fase di dump completo e non è recuperabile. L'istanza del database di origine è stata riavviata o è in modalità di recupero oppure le connessioni di replica sono terminate a causa di un valore insufficiente impostato per il parametro wal_sender_timeout.

Per trovare la causa principale del problema:

  1. Vai alla pagina Esplora log nella console Google Cloud .
  2. Dall'elenco delle risorse, seleziona l'istanza AlloyDB. Viene visualizzato un elenco dei log più recenti per l'istanza.
  3. Dai nomi dei file di log, seleziona postgres.log.
  4. Imposta il livello di gravità del log su tutti i livelli superiori a Warning. I primi log degli errori potrebbero essere la causa principale del problema.
  • Assicurati che Database Migration Service possa sempre connettersi all'istanza del database di origine durante la fase di dump completo.
  • Verifica che il valore del parametro wal_sender_timeout sia impostato su un numero maggiore (ad esempio 0) nell'istanza del database di origine.
  • Riavvia il job di migrazione e riprova.
Messaggio di errore: ERROR: unknown column name {column_name}

Una colonna è stata aggiunta a una tabella replicata sul nodo primario, ma non sul nodo di replica.

Solo le modifiche DML (Data Manipulation Language) vengono aggiornate automaticamente durante le migrazioni continue. La gestione delle modifiche al Data Definition Language (DDL) in modo che i database di origine e di destinazione rimangano compatibili è responsabilità dell'utente e può essere eseguita in due modi:

  • Interrompi le scritture sul database di origine ed esegui i comandi DDL sia sull'origine che sulla destinazione. Prima di eseguire i comandi DDL sulla destinazione, concedi il ruolo cloudsqlexternalsync all'utente Cloud SQL che applica le modifiche DDL.
  • Utilizza pglogical.replicate_ddl_command per consentire l'esecuzione dei comandi DDL su origine e destinazione in un punto coerente. L'utente che esegue i comandi deve avere lo stesso nome utente sia nell'origine che nella destinazione e deve essere il superutente o il proprietario dell'artefatto di cui viene eseguita la migrazione (ad esempio, la tabella, la sequenza, la vista o il database).
  • Consulta Migrazione continua per trovare gli esempi di utilizzo di pglogical.replicate_ddl_command.

Messaggio di errore: ERROR: cannot truncate a table referenced in a foreign key constraint

L'utente ha tentato di troncare una tabella con un vincolo di chiave esterna.

Rimuovi prima il vincolo di chiave esterna, poi tronca la tabella.

Messaggio di errore: ERROR: connection to other side has died

La connessione di replica è stata interrotta a causa di un valore insufficiente impostato per wal_sender_timeout parameter. L'errore si verifica in genere durante la fase di replica dopo il successo del dump iniziale.

Valuta la possibilità di aumentare il valore parametro wal_sender_timeout o disattivare il meccanismo di timeout impostando il valore 0 nell'istanza del database di origine.

Quando esegui la migrazione dei database selezionati e il job di migrazione non è in grado di replicare i dati in uno o più database, nell'elenco dei database viene visualizzato lo stato Non riuscito. Vari errori del job di migrazione.

Nella colonna Errori, fai clic su Visualizza errori e correggili. Puoi anche rimuovere i database non riusciti dal job di migrazione.

Per ulteriori informazioni sulla rimozione di un database non riuscito da un job di migrazione, vedi Gestire i job di migrazione.

Pulire gli slot di replica

Viene visualizzato uno dei seguenti messaggi:

  • 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.

Cause possibili

Quando promuovi un'istanza AlloyDB, se l'istanza di origine non è raggiungibile dall'istanza AlloyDB (ad esempio, l'istanza di origine non è in esecuzione o hai rimosso l'istanza AlloyDB dall'elenco consentito delle istanze di origine), le impostazioni necessarie per la replica non possono essere pulite durante la promozione di un job di migrazione. Devi pulire manualmente gli slot di replica.

Cose da provare

Per ogni database, esegui i seguenti comandi come utente con il privilegio superuser:

  1. Recupera i nomi degli slot di replica dal messaggio di errore, quindi esegui il comando seguente per eliminare gli slot uno alla volta:

    select pg_drop_replication_slot({slot_name});
  2. Se i nomi degli slot di replica non sono disponibili nel messaggio di errore, esegui il seguente comando per eseguire una query sugli slot di replica esistenti:

    select pg_drop_replication_slot(slot_name) from pg_replication_slots where slot_name like '%alloydb%' and active = 'f';
  3. Se non sono presenti repliche AlloyDB che utilizzano l'istanza di origine, esegui il seguente comando per pulire le impostazioni di pglogical:

    select pglogical.drop_node(node_name) from pglogical.node where node_name like 'alloydb';
  4. Se l'estensione pglogical non è più necessaria, esegui il seguente comando per disinstallarla:

    DROP EXTENSION IF EXISTS pglogical;

Elimina i cluster AlloyDB orfani in modalità di bootstrapping

In rari casi limite, potresti scoprire che il job di migrazione è stato eliminato, mentre il cluster AlloyDB associato non è stato eliminato ed è ancora in modalità di bootstrapping. È possibile eliminare il cluster utilizzando il comando gcloud di AlloyDB per l'eliminazione di un cluster, combinato con l'opzione --force.

Tieni presente che l'eliminazione di un cluster di bootstrapping mentre viene utilizzato da un job di migrazione comporta un comportamento indefinito.

Gestire utenti e ruoli

Eseguire la migrazione degli utenti esistenti

Al momento, Database Migration Service non supporta la migrazione di utenti esistenti da un'istanza di origine a un'istanza AlloyDB di destinazione. Puoi gestire questa migrazione creando manualmente gli utenti in AlloyDB.

Informazioni sull'utente alloydbexternalsync

Durante la migrazione, tutti gli oggetti sul database primario AlloyDB sono di proprietà dell'utente alloydbexternalsync. Una volta eseguita la migrazione dei dati, puoi modificare la proprietà degli oggetti per altri utenti completando i seguenti passaggi:

  • Esegui il comando GRANT alloydbexternalsync to {USER}.
  • Su ogni database, esegui il comando reassign owned by alloydbexternalsync to {USER};.
  • Per rimuovere l'utente alloydbexternalsync, esegui il comando drop role alloydbexternalsync.