Il processo del job di migrazione potrebbe generare errori durante l'esecuzione.
- 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 non sono recuperabili, 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 diventa Failed
e lo stato secondario riflette l'ultimo stato prima dell'errore.
Per risolvere un problema, 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 le relative soluzioni:
Per questo problema… | Il problema potrebbe essere… | Prova a fare così… |
---|---|---|
Quando esegui la migrazione a
un'istanza di destinazione esistente, ricevi il seguente messaggio di errore:
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.
|
L'istanza Cloud SQL di destinazione contiene dati aggiuntivi. Puoi eseguire la migrazione solo a istanze esistenti vuote. Consulta Limitazioni note. | Esegui la promozione dell'istanza di destinazione in modo da renderla di lettura/scrittura, rimuovi i dati aggiuntivi e riprova a eseguire il job di migrazione. Consulta Eliminare i dati aggiuntivi dall'istanza di destinazione esistente. |
Impossibile connettersi 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 Eseguire il 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 la stessa o una versione principale superiore alla versione del database di origine. Quindi, crea un nuovo job di migrazione. |
I linguaggi di definizione dei dati (DDL) o di manipolazione dei dati (DML) sono bloccati nell'origine. | I comandi DDL che richiedono il ACCESS EXCLUSIVE blocco e sono in esecuzione durante la fase di dump completo sono bloccati. |
Durante la procedura di sincronizzazione iniziale (dump completo), è consigliabile evitare DDL o programmi che richiedono blocchi Ad esempio, se una tabella è ancora in fase di sincronizzazione iniziale e viene eseguito un comando |
Messaggio di errore: No pglogical extension installed on databases (X)
|
In uno o più database di origine non è installato pglogical . |
Segui queste linee guida per installare pglogical nei database dell'istanza di origine. |
Durante la migrazione alla versione 15 di PostgreSQL, dopo diversi tentativi di riconnessione si verifica uno dei seguenti sintomi:
|
Questo problema è spesso attribuito al
problema di deadlock nell'estensione pglogical . Per maggiori informazioni, consulta il
pglogical tracker dei problemi su GitHub.
|
Riprova il job di migrazione o esegui prima la migrazione a una versione intermedia di PostgreSQL. Per ulteriori dettagli, vedi
Messaggio di errore: Cannot connect to invalid database .
|
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 questo utente disponga dei privilegi richiesti. |
Messaggio di errore: Unable to connect to source database server.
|
Database Migration Service non riesce a 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 che tu abbia 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'.
|
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: OPPURE
Messaggio di errore: |
Le impostazioni necessarie per la replica non possono essere eliminate durante la promozione di un job di migrazione. | Per ogni database, esegui i comandi come utente con il privilegio Per ulteriori informazioni sui comandi da eseguire, consulta Eseguire la pulizia degli slot di replica. |
Messaggio di errore: |
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 eventuali 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, anziché il certificato rds-ca-2019-root.pem, utilizza il certificato rds-combined-ca-bundle.pem. |
Messaggio di errore: |
Il valore impostato per il parametro max_locks_per_transaction non è sufficiente. |
Imposta il valore di questo parametro su almeno {max_number_of_tables_per_database }/(max_connections + max_prepared_transactions ). |
Messaggio di errore: |
Il pacchetto pglogical non è installato correttamente nell'istanza di origine. | Per ulteriori informazioni su come installare correttamente questo pacchetto, consulta Installare il pacchetto pglogical sull'istanza di origine. |
Messaggio di errore: |
L'origine configurata è in modalità di recupero. | Configura un'origine non in modalità di recupero. |
Il dump completo è lento. | La destinazione Cloud SQL potrebbe essere lenta nell'importare dati di grandi dimensioni dal database di origine. |
|
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 Per trovare la causa principale del problema:
|
|
Messaggio di errore: ERROR: unknown column name {column_name} |
Una colonna è stata aggiunta a una tabella replicata sul nodo principale, ma non sul nodo di replica. |
Solo le modifiche data manipulation language (DML) vengono aggiornate automaticamente durante le migrazioni continue. La gestione delle modifiche al linguaggio di definizione dei dati (DDL) in modo che i database di origine e di destinazione rimangano compatibili è responsabilità dell'utente e può essere eseguita in due modi:
Consulta Migrazione continua per trovare esempi di utilizzo di |
Messaggio di errore: ERROR: cannot truncate a table referenced in a foreign key constraint |
L'utente ha tentato di troncare una tabella con una limitazione della chiave esterna. |
Rimuovi prima la limitazione della chiave esterna e poi tronca la tabella. |
Messaggio di errore: ERROR: connection to other side has died |
La connessione di replica è terminata a causa di un valore insufficiente impostato per |
Valuta la possibilità di aumentare il valore parametro |
Messaggio di avviso: migration job test configuration has returned the following warnings: Some table(s) have limited support. |
L'origine contiene tabelle con supporto limitato, ad esempio tabelle senza chiavi primarie. |
Questo è un messaggio di avviso. Puoi procedere con la migrazione, ma tieni presente che le entità non supportate (ad esempio le tabelle senza chiavi primarie) non vengono migrate. Per ulteriori informazioni, consulta Configurare i database di origine. |
Cancella i dati aggiuntivi dall'istanza di destinazione esistente
Quando esegui la migrazione a
un'istanza di destinazione esistente, ricevi il seguente messaggio di errore:
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.
Questo problema può verificarsi se l'istanza di destinazione contiene dati aggiuntivi. Puoi eseguire la migrazione solo a istanze esistenti vuote. Consulta Limitazioni note.
Cose da provare
Elimina i dati aggiuntivi dall'istanza di destinazione e avvia di nuovo il job di migrazione svolgendo i seguenti passaggi:
- Interrompi il job di migrazione.
- A questo punto, l'istanza Cloud SQL di destinazione è in modalità "sola lettura". Esegui la promozione dell'istanza di destinazione per ottenere l'accesso in scrittura.
- Connettiti all'istanza Cloud SQL di destinazione.
- Rimuovi i dati extra dai database delle istanze di destinazione. La destinazione può contenere solo dati di configurazione di sistema. I database di destinazione
non possono contenere dati utente (ad esempio tabelle). Esistono diversi comandi SQL che puoi eseguire sui tuoi database per trovare dati non di sistema, ad esempio:
Esempio di istruzione SQL per recuperare i database non di sistema (fai clic per espandere)
SELECT datname FROM pg_catalog.pg_database WHERE datname NOT IN ('cloudsqladmin', 'template1', 'template0', 'postgres');
Esempio di istruzione SQL per recuperare i dati non di sistema nel database
postgres
(fai clic per espandere)Il database
postgres
è un database di sistema, ma può contenere dati non di sistema. Assicurati di eseguire queste istruzioni sul databasepostgres
. Se utilizzi il clientpsql
per connetterti all'istanza di destinazione, puoi passare a un altro database senza reimpostare la connessione utilizzando il comando\connect {database_name_here}
.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';
- Avvia il job di migrazione.
Eliminare 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.
Il problema potrebbe essere
Quando promuovi un'istanza Cloud SQL, se l'istanza di origine non è raggiungibile dall'istanza Cloud SQL (ad esempio, l'istanza di origine non è in esecuzione o hai rimosso l'istanza Cloud SQL dall'elenco consentiti delle istanze di origine), le impostazioni necessarie per la replica non possono essere eliminate durante la promozione di un job di migrazione. Devi ripulire gli slot di replica manualmente.
Cose da provare
Per ogni database, esegui i seguenti comandi come utente con il privilegio superuser
:
Recupera i nomi degli slot di replica dal messaggio di errore, quindi esegui il seguente comando per eliminarli uno per uno:
select pg_drop_replication_slot({slot_name});
-
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 '%cloudsql%' and active = 'f';
-
Se non sono presenti repliche Cloud SQL che utilizzano l'istanza di origine, esegui il seguente comando per ripulire le impostazioni
pglogical
:select pglogical.drop_node(node_name) from pglogical.node where node_name like
'cloudsql';
-
Se l'estensione
pglogical
non è più necessaria, esegui il seguente comando per disinstallarla:DROP EXTENSION IF EXISTS pglogical;
Messaggio di errore:
Cannot connect to invalid database
Durante la migrazione alla versione 15 di PostgreSQL, dopo diversi tentativi di riconnessione successivi si verifica uno dei seguenti sintomi:
-
Ricevi un messaggio di errore
Cannot connect to invalid database
. - La metrica del job di migrazione Utilizzo dello spazio di archiviazione non mostra alcun avanzamento dopo molto tempo quando il job di migrazione esegue il dump completo del database.
Il problema potrebbe essere
Questo problema è spesso attribuito al problema di blocco nella gestione delle risorse nell'estensione pglogical
. Per maggiori informazioni, consulta il tracker dei problemi
pglogical
su GitHub.
Cose da provare
Esegui di nuovo il job di migrazione con una nuova istanza di destinazione
Prova a eliminare il database di destinazione in cui si è verificato il problema e a ricreare il job di migrazione. Segui questi passaggi:
- Elimina l'istanza di destinazione in cui hai riscontrato i problemi. Consulta Eliminare le istanze nella documentazione di Cloud SQL per PostgreSQL.
- Elimina il job di migrazione non riuscito. Vedi Rivedere un job di migrazione.
- Ricrea il job di migrazione. Vedi Creare un job di migrazione.
Esegui la migrazione a una versione intermedia
Valuta la possibilità di eseguire la migrazione a una versione precedente di PostgreSQL, ad esempio PostgreSQL 14. Dopo una migrazione riuscita, puoi provare l'upgrade all'istanza PostgreSQL 15 che preferisci. Consulta Eseguire l'upgrade della versione principale del database eseguendo la migrazione dei dati nella documentazione di Cloud SQL per PostgreSQL.
Gestire utenti e ruoli
Esegui la migrazione degli utenti esistenti
Al momento, Database Migration Service non supporta la migrazione degli utenti esistenti da un'istanza di origine a un'istanza Cloud SQL di destinazione. Puoi gestire questa migrazione creando manualmente gli utenti in Cloud SQL.
Informazioni sull'utente cloudsqlexternalsync
Durante la migrazione, tutti gli oggetti nella replica Cloud SQL sono di proprietà dell'utente cloudsqlexternalsync
. Dopo la migrazione dei dati, puoi modificare la proprietà degli oggetti per altri utenti completando i seguenti passaggi:
- Esegui il comando
GRANT cloudsqlexternalsync to {USER}
. - Su ogni database, esegui il comando
reassign owned by cloudsqlexternalsync to {USER};
. - Per rimuovere l'utente
cloudsqlexternalsync
, esegui il comandodrop role cloudsqlexternalsync
.
Importare i dati in una nuova istanza Cloud SQL
Se prima esporti i dati da un'istanza Cloud SQL di cui Database Migration Service ha eseguito la migrazione in Cloud Storage e poi importi i dati da Cloud Storage in un'istanza Cloud SQL autonoma, l'importazione potrebbe non riuscire perché l'utente cloudsqlexternalsync
non esiste nell'istanza di destinazione.
Per attenuare il problema, crea l'utente cloudsqlexternalsync
nell'istanza di destinazione o rimuovi l'utente dall'istanza di cui è stata eseguita la migrazione.