Le processus de job de migration peut générer des erreurs lors de l'exécution.
- Certaines erreurs, telles qu'un mot de passe incorrect dans la base de données source, peuvent être récupérées, ce qui signifie qu'elles peuvent être corrigées et que le job de migration reprend automatiquement.
- D'autres sont irrécupérables, comme les erreurs de réplication des données, ce qui signifie que le job de migration doit être redémarré depuis le début.
Lorsqu'une erreur se produit, l'état du job de migration passe à Failed et le sous-état reflète le dernier état avant l'échec.
Pour résoudre une erreur, accédez au job de migration ayant échoué pour afficher l'erreur et suivez les étapes décrites dans le message d'erreur.
Pour afficher plus de détails sur l'erreur, accédez à Cloud Monitoring à l'aide du lien figurant dans le job de migration. Les journaux sont filtrés en fonction du job de migration spécifique.
Le tableau suivant contient quelques exemples de problèmes et de solutions possibles :
| Pour ce problème... | Le problème peut être... | Essayez : |
|---|---|---|
Lorsque vous migrez vers
une instance de destination existante, le message d'erreur suivant s'affiche :
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.
|
Votre instance Cloud SQL de destination contient des données supplémentaires. Vous ne pouvez migrer que vers des instances existantes vides. Consultez les limitations connues. | Promouvez votre instance de destination pour en faire une instance en lecture/écriture, supprimez les données supplémentaires, puis réessayez le job de migration. Consultez Supprimer les données supplémentaires de votre instance de destination existante. |
| Échec de la connexion à l'instance de base de données source. | Un problème de connectivité s'est produit entre l'instance de base de données source et l'instance de destination. | Suivez les étapes décrites dans Déboguer la connectivité. |
| Échec de l'exécution du job de migration en raison de versions de base de données source et de destination incompatibles. | Les versions de base de données source et de destination ne sont pas compatibles. Plus précisément, la version de base de données source fournie n'est pas compatible avec la version de base de données de destination. | Assurez-vous que la version de base de données de destination est identique ou supérieure d'une version majeure à la version de base de données source. Créez ensuite un job de migration. |
| Les langages de définition de données (LDD) ou les langages de manipulation de données (LMD) sont bloqués sur la source. | Les LDD qui nécessitent le ACCESS EXCLUSIVE verrou et qui s'exécutent pendant la phase de vidage complet sont bloqués. |
Lors du processus de synchronisation initiale (vidage complet), les LDD ou les programmes nécessitant des Par exemple, si une table est toujours en cours de synchronisation initiale et qu'une commande |
Message d'erreur : No pglogical extension installed on databases (X)
|
Une ou plusieurs bases de données sources ne disposent pas de pglogical. |
Suivez ces instructions pour installer pglogical sur les bases de données de l'instance source. |
Lorsque vous migrez vers PostgreSQL 15, après plusieurs tentatives de connexion consécutives
, l'un des symptômes suivants se produit :
|
Ce problème est souvent attribué au
problème de blocage dans l'extension pglogical. Pour en savoir plus, consultez l'outil de suivi des problèmes
pglogical sur GitHub.
|
Réessayez le job de migration ou migrez d'abord vers une version intermédiaire de PostgreSQL. Pour en savoir plus, consultez
Message d'erreur : Cannot connect to invalid database.
|
Message d'erreur : Replication user 'x' doesn't have sufficient privileges.
|
L'utilisateur qui utilise Database Migration Service ne dispose pas des droits nécessaires pour effectuer l'opération désignée. | Suivez ces instructions pour vous assurer que cet utilisateur dispose des droits requis. |
Message d'erreur : Unable to connect to source database server.
|
Database Migration Service ne peut pas établir de connexion au serveur de base de données source. | Assurez-vous que les instances de base de données source et de destination peuvent communiquer entre elles et que vous avez rempli tous les prérequis requis qui s'affichent lorsque vous définissez les paramètres du job de migration. |
Message d'erreur : The source database 'wal_level' configuration must be equal to 'logical'.
|
Le wal_level de la base de données source est défini sur une valeur autre que logical. |
Définissez le wal_level sur logical. |
Message d'erreur : The source database 'max_replication_slots' configuration is not sufficient.
|
Le paramètre max_replication_slots n'a pas été configuré correctement. |
Suivez ces instructions pour définir correctement ce paramètre. |
Message d'erreur : The source database 'max_wal_senders' configuration is not sufficient.
|
Le paramètre max_wal_senders n'a pas été configuré correctement. |
Suivez ces instructions pour définir correctement ce paramètre. |
Message d'erreur : The source database 'max_worker_processes' configuration is not sufficient.
|
Le paramètre max_worker_processes n'a pas été configuré correctement. |
Suivez ces instructions pour définir correctement ce paramètre. |
|
Message d'erreur : OU
Message d'erreur : |
Les paramètres nécessaires à la réplication ne peuvent pas être nettoyés lors de la promotion d'un job de migration. | Pour chaque base de données, exécutez des commandes en tant qu'utilisateur disposant du droit Pour en savoir plus sur les commandes à exécuter, consultez Nettoyer les emplacements de réplication. |
|
Message d'erreur : |
Le certificat CA source fourni à Database Migration Service ne contient peut-être que le certificat racine. Toutefois, le certificat source nécessite à la fois le certificat racine et tous les certificats intermédiaires. Par exemple, pour Amazon Relational Database Service, l'utilisation du certificat rds-ca-2019-root.pem peut entraîner ce problème. |
Créez un certificat CA source combiné contenant à la fois le certificat racine et tous les certificats intermédiaires requis. Pour le cas d'utilisation d'Amazon Relational Database Service, utilisez le certificat rds-combined-ca-bundle.pem au lieu du certificat rds-ca-2019-root.pem. |
|
Message d'erreur : |
La valeur définie pour le max_locks_per_transaction paramètre n'est pas suffisante. |
Définissez la valeur de ce paramètre sur au moins {max_number_of_tables_per_database}/(max_connections + max_prepared_transactions). |
|
Message d'erreur : |
Le package pglogical n'est pas installé correctement sur l'instance source. | Pour en savoir plus sur l'installation correcte de ce package, consultez Installer le package pglogical sur l'instance source. |
|
Message d'erreur : |
La source configurée est en mode de récupération. | Configurez une source qui n'est pas en mode de récupération. |
| Le vidage complet est lent. | L'importation de données volumineuses à partir de la base de données source peut être lente dans la destination Cloud SQL. |
|
Message d'erreur : subscriber {subscriber_name} initialization failed during nonrecoverable step (d), please try the setup again |
Le job de migration a échoué lors de la phase de vidage complet et n'est pas récupérable. L'instance de base de données source a été redémarrée ou est en mode de récupération, ou les connexions de réplication ont été interrompues en raison d'une valeur insuffisante définie pour le Pour trouver l'origine du problème :
|
|
Message d'erreur : ERROR: unknown column name {column_name} |
Une colonne a été ajoutée à une table répliquée sur le nœud principal, mais pas sur le nœud de l'instance dupliquée. |
Seules les modifications du langage de manipulation de données (LMD) sont mises à jour automatiquement lors des migrations continues. La gestion des modifications du langage de définition de données (LDD) afin que les bases de données source et de destination restent compatibles est la responsabilité de l'utilisateur. Vous pouvez procéder de deux manières différentes :
Consultez Migration continue pour trouver des exemples d'utilisation de |
Message d'erreur : ERROR: cannot truncate a table referenced in a foreign key constraint |
L'utilisateur a tenté de tronquer une table comportant une contrainte de clé étrangère. |
Supprimez d'abord la contrainte de clé étrangère, puis tronquez la table. |
Message d'erreur : ERROR: connection to other side has died |
La connexion de réplication a été interrompue en raison d'une valeur insuffisante définie pour le |
Envisagez d'augmenter la valeur du paramètre |
Message d'avertissement : migration job test configuration has returned the following warnings: Some table(s) have limited support. |
La source comporte des tables dont la compatibilité est limitée, par exemple des tables sans clé primaire. |
Il s'agit d'un message d'avertissement. Vous pouvez poursuivre la migration, mais note que les entités non compatibles (par exemple, les tables sans clé primaire) ne sont pas migrées. Pour en savoir plus, consultez Configurer vos bases de données sources. |
| Lorsque vous migrez des bases de données sélectionnées et que le job de migration ne parvient pas à répliquer les données dans une ou plusieurs bases de données, l'état Échec s'affiche dans la liste des bases de données. | Diverses erreurs de job de migration. | Dans la colonne Erreurs , cliquez sur Afficher les erreurs , puis corrigez-les. Vous pouvez également supprimer les bases de données ayant échoué du job de migration. Pour en savoir plus sur la suppression d'une base de données ayant échoué d'un job de migration, consultez Gérer les jobs de migration. |
Supprimer les données supplémentaires de votre instance de destination existante
Lorsque vous migrez vers
une instance de destination existante, le message d'erreur suivant s'affiche :
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.
Ce problème peut se produire si votre instance de destination contient des données supplémentaires. Vous ne pouvez migrer que vers des instances existantes vides. Consultez les limitations connues.
Solutions possibles
Supprimez les données supplémentaires de votre instance de destination et redémarrez le job de migration en procédant comme suit :
- Arrêtez le job de migration.
- À ce stade, votre instance Cloud SQL de destination est en mode `read-only` mode. Promouvez l'instance de destination pour obtenir un accès en écriture.
- Connectez-vous à votre instance Cloud SQL de destination.
- Supprimez les données supplémentaires des bases de données de votre instance de destination. Votre
destination ne peut contenir que des données de configuration système. Les bases de données de destination
ne peuvent pas contenir de données utilisateur (telles que des tables). Vous pouvez exécuter différentes instructions SQL
sur vos bases de données pour trouver des données non système, par exemple :
Exemple d'instruction SQL pour récupérer des bases de données non système (cliquez pour développer)
SELECT datname FROM pg_catalog.pg_database WHERE datname NOT IN ('cloudsqladmin', 'template1', 'template0', 'postgres');
Exemple d'instruction SQL pour récupérer des données non système dans la base de données
postgres(cliquez pour développer)La base de données
postgresest une base de données système, mais elle peut contenir des données non système. Assurez-vous d'exécuter ces instructions sur lapostgresbase de données. Si vous utilisez le clientpsqlpour vous connecter à l'instance de destination, vous pouvez passer à une autre base de données sans réinitialiser votre connexion à l'aide de la commande\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';
- Démarrez le job de migration.
Nettoyer les emplacements de réplication
L'un des messages suivants s'affiche :
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 possible
Lors de la promotion d'une instance Cloud SQL, si l'instance source n'est pas accessible depuis l'instance Cloud SQL (par exemple, l'instance source n'est pas en cours d'exécution ou vous avez supprimé l'instance Cloud SQL de la liste d'autorisation des instances sources), les paramètres nécessaires à la réplication ne peuvent pas être nettoyés lors de la promotion d'un job de migration. Vous devez nettoyer manuellement les emplacements de réplication.
Solutions possibles
Pour chaque base de données, exécutez les commandes suivantes en tant qu'utilisateur disposant du droit superuser :
Obtenez les noms des emplacements de réplication à partir du message d'erreur, puis exécutez la commande suivante pour supprimer les emplacements, un par un :
select pg_drop_replication_slot({slot_name});-
Si les noms des emplacements de réplication ne sont pas disponibles dans le message d'erreur, exécutez la commande suivante pour interroger les emplacements de réplication existants :
select pg_drop_replication_slot(slot_name) from pg_replication_slots where slot_name like '%cloudsql%' and active = 'f';
-
S'il n'existe aucune instance dupliquée Cloud SQL utilisant l'instance source, exécutez la commande suivante pour nettoyer les paramètres
pglogical:select pglogical.drop_node(node_name) from pglogical.node where node_name like
'cloudsql'; -
Si l'extension
pglogicaln'est plus nécessaire, exécutez la commande suivante pour la désinstaller :DROP EXTENSION IF EXISTS pglogical;
Message d'erreur :
Cannot connect to invalid database
Lorsque vous migrez vers PostgreSQL 15, après plusieurs tentatives de connexion consécutives, l'un des symptômes suivants se produit :
-
Vous recevez un
Cannot connect to invalid databasemessage d'erreur. - La métrique du job de migration Utilisation du stockage n'affiche aucune progression après une longue période lorsque le job de migration effectue le vidage complet de la base de données.
Cause possible
Ce problème est souvent attribué au problème de blocage dans l'extension pglogical. Pour en savoir plus, consultez l'outil de suivi des problèmes
pglogical sur GitHub.
Solutions possibles
Exécuter à nouveau le job de migration avec une nouvelle instance de destination
Essayez de supprimer la base de données de destination où vous avez rencontré le problème et de recréer votre job de migration. Procédez comme suit :
- Supprimez l'instance de destination où vous avez rencontré les problèmes. Consultez Supprimer des instances dans la documentation Cloud SQL pour PostgreSQL.
- Supprimez le job de migration ayant échoué. Consultez Examiner un job de migration.
- Recréez votre job de migration. Consultez Créer un job de migration.
Migrer vers une version intermédiaire
Envisagez de migrer vers une version antérieure de PostgreSQL, telle que PostgreSQL 14. Une fois la migration réussie, vous pouvez essayer de passer à l'instance PostgreSQL 15 souhaitée. Consultez Mettre à niveau la version majeure de la base de données en migrant des données dans la documentation Cloud SQL pour PostgreSQL.
Gérer les utilisateurs et les rôles
Migrer les utilisateurs existants
Actuellement, Database Migration Service n'est pas compatible avec la migration des utilisateurs existants d'une instance source vers une instance Cloud SQL de destination. Vous pouvez gérer cette migration en créant manuellement les utilisateurs dans Cloud SQL.
À propos de l'utilisateur cloudsqlexternalsync
Pendant la migration, tous les objets de l'instance dupliquée Cloud SQL appartiennent à l'utilisateur cloudsqlexternalsync. Une fois les données migrées, vous pouvez modifier la propriété des objets pour d'autres utilisateurs en procédant comme suit :
- Exécutez la commande
GRANT cloudsqlexternalsync to {USER}. - Sur chaque base de données, exécutez la commande
reassign owned by cloudsqlexternalsync to {USER};. - Pour supprimer l'utilisateur
cloudsqlexternalsync, exécutez la commandedrop role cloudsqlexternalsync.
Importer des données dans une nouvelle instance Cloud SQL
Si vous exportez d'abord des données d'une instance Cloud SQL que Database Migration Service a migrée vers Cloud Storage, puis que vous importez les données de Cloud Storage dans une instance Cloud SQL autonome, l'importation peut échouer, car l'utilisateur cloudsqlexternalsync n'existe pas sur l'instance de destination.
Pour atténuer le problème, créez l'utilisateur cloudsqlexternalsyncsur l'instance de destination ou supprimez l'utilisateur de l'instance migrée.