Cette rubrique décrit le rapport d'évaluation de la fonctionnalité de migration en un clic vers le cloud pour ApsaraDB RDS for PostgreSQL, y compris son contenu, les erreurs courantes et leurs solutions.
Si l'Status du rapport d'évaluation est Failed, cliquez sur Report Details dans la colonne Action de la tâche de migration.
Pour plus d'informations sur la migration en un clic vers le cloud pour ApsaraDB RDS for PostgreSQL, consultez Migration en un clic vers le cloud.
Vérifier si RDS est vide
Élément de vérification
Vérifier les bases de données RDS
Erreur courante
error:postgres not empty, check if any table exists
Description
L'instance ApsaraDB RDS for PostgreSQL de destination n'est pas vide.
Solution
Supprimez toutes les bases de données de l'instance ApsaraDB RDS for PostgreSQL, en ne conservant que les bases de données template0, template1 et postgres. Dans la base de données postgres, supprimez toutes les tables à l'exception de ha_health_check.
Vérifier la connectivité source
-
Élément de vérification 1
Vérifier la connectivité IP
Erreur courante
error:XX.XX.XX.XX is unapproachableDescription
L'adresse IP ou le nom DNS du serveur hébergeant la base de données PostgreSQL autogérée est inaccessible.
Solution
Pour la migration en un clic vers le cloud d'une base de données PostgreSQL autogérée sur une instance ECS, configurez l'Private IP Address de l'instance ECS. Pour savoir comment obtenir l'adresse IP, consultez Afficher les adresses IP.
Pour les migrations depuis une base de données PostgreSQL autogérée sur site, fournissez l'adresse IP résolue à partir de son enregistrement DNS.
-
Élément de vérification 2
Vérifier la connectivité du port
Erreur courante
error:5432 is unapproachableDescription
La base de données PostgreSQL autogérée n'est pas configurée pour écouter les connexions distantes.
Un pare-feu est configuré pour la base de données PostgreSQL autogérée, mais aucune règle n'autorise l'accès au port de la base de données.
Solution
Dans le fichier postgresql.conf de votre base de données PostgreSQL autogérée, définissez
listen_addresses = '*'. Pour plus d'informations, consultez Configurer le fichier postgresql.conf.Configurez le pare-feu pour autoriser le trafic sur le port 5432, ou désactivez le pare-feu avant la migration. Pour plus d'informations, consultez Configurer le pare-feu du serveur.
-
Élément de vérification 3
Vérifier la connectivité de la base de données
Erreur courante
error:cannot connect to source database by migratetest:123456Description
Le nom d'utilisateur ou le mot de passe est incorrect.
La configuration pg_hba.conf de la base de données PostgreSQL autogérée est incorrecte.
Solution
-
Vérifiez que vous pouvez vous connecter à la base de données PostgreSQL autogérée avec le nom d'utilisateur et le mot de passe spécifiés. Si la connexion échoue, mettez à jour le mot de passe. L'exemple suivant montre la commande pour mettre à jour le mot de passe du compte
migratetest:ALTER USER migratetest WITH PASSWORD '123456'; -
Modifiez le fichier pg_hba.conf de votre base de données PostgreSQL autogérée. Pour le compte
migratetest, par exemple, ajoutez la configuration suivante :host all migratetest <ApsaraDB RDS for PostgreSQL VPC CIDR block> md5RemarquePour plus d'informations, consultez Mettre à jour le fichier pg_hba.conf.
-
Élément de vérification 4
Vérifier le privilège de réplication du compte
Erreur courante
error:migratetest has no replication privilegeDescription
Le compte utilisateur ne dispose pas du privilège REPLICATION.
La configuration pg_hba.conf de la base de données PostgreSQL autogérée est incorrecte.
Solution
-
Accordez le privilège REPLICATION au compte utilisateur. L'exemple suivant montre la commande pour le compte
migratetest:ALTER ROLE migratetest REPLICATION; -
Modifiez le fichier pg_hba.conf de votre base de données PostgreSQL autogérée. Par exemple, ajoutez la configuration suivante pour le compte migratetest :
host replication migratetest <ApsaraDB RDS for PostgreSQL VPC CIDR block> md5RemarquePour plus d'informations, consultez Mettre à jour le fichier pg_hba.conf.
-
Élément de vérification 5
Vérifier le privilège createrole du compte
Erreur courante
error:migratetest has no createrole privilegeDescription
Le compte utilisateur ne dispose pas du privilège CREATEROLE.
Solution
Accordez le privilège CREATEROLE au compte utilisateur. L'exemple suivant montre la commande pour le compte
migratetest:ALTER ROLE migratetest CREATEROLE; -
Élément de vérification 6
Vérifier le privilège de surveillance du compte
Erreur courante
error:migratetest should be a member of pg_monitor to monitor replication statusDescription
Le compte utilisateur ne dispose pas du privilège
pg_monitor.RemarqueCe privilège est requis pour interroger les vues système telles que
pg_stat_replicationetpg_stat_wal_receiverafin d'obtenir des informations sur le lien de réplication.Solution
Accordez le privilège
pg_monitorau compte utilisateur. L'exemple suivant montre la commande pour le comptemigratetest:GRANT pg_monitor TO migratetest;
Vérifier la version source
Élément de vérification
Vérifier la cohérence de la version majeure
Erreur courante
error:version mismatch, source version:10, current version:13.0
Description
La version majeure de la base de données PostgreSQL autogérée ne correspond pas à celle de l'instance ApsaraDB RDS for PostgreSQL de destination.
Solution
Achetez une instance ApsaraDB RDS for PostgreSQL dont la version majeure correspond à celle de votre base de données PostgreSQL autogérée.
Vérifier la version glibc source
Élément de vérification
Vérifier la compatibilité de la version glibc source
Erreur courante
warning:source glibc version is not compatible with rds pg
Description
La version GLIBC de la base de données PostgreSQL autogérée est incompatible avec celle de l'instance ApsaraDB RDS for PostgreSQL.
Dans GLIBC 2.28, les règles de collationnement pour certains caractères UTF-8 ont été modifiées. Une incompatibilité de version peut entraîner des règles de tri de données différentes et des résultats de requête inattendus.
Solution
Effectuez les vérifications suivantes.
-
Vérifiez le collationnement de la table.
begin; create temp table testcollation(id varchar(20) collate "en_US.utf8") on commit drop; insert into testcollation values('-1'),('1'); select id='1' from testcollation order by id limit 1; rollback;Résultats :
Si
trueest renvoyé, la migration ne présente aucun risque. Aucune autre action n'est nécessaire.Si
falseest renvoyé, passez à l'étape suivante.
-
Vérifiez le collationnement de la base de données.
SELECT datname,datcollate FROM pg_database where datcollate NOT IN ('C', 'POSIX');Résultats :
Si le résultat est vide, la migration ne présente aucun risque. Aucune autre action n'est nécessaire.
Si le résultat n'est pas vide, passez à l'étape suivante.
-
Dans toutes les bases de données, vérifiez la présence d'index dont le collationnement n'est ni
CniPOSIX.WITH result AS ( WITH defcoll AS ( SELECT datcollate AS coll FROM pg_database WHERE datname = current_database() ) SELECT indrelid::regclass::text relname, indexrelid::regclass::text indexname, CASE WHEN c.collname = 'default' THEN defcoll.coll ELSE c.collname END AS collation FROM (SELECT indexrelid, indrelid, indcollation[i] coll FROM pg_index, generate_subscripts(indcollation, 1) g(i)) s JOIN pg_collation c ON coll=c.oid CROSS JOIN defcoll WHERE collprovider IN ('d', 'c') AND collname NOT IN ('C', 'POSIX') ) SELECT result.relname, result.indexname, result.collation FROM result WHERE result.collation NOT IN ('C', 'POSIX');Résultats :
Si le résultat est vide, la migration ne présente aucun risque. Aucune autre action n'est nécessaire.
Si le résultat n'est pas vide, la migration présente un risque.
Vérifier la taille du disque
Élément de vérification
Vérifier si la taille du disque est suffisante
Erreur courante
error:source_db_size > disk_size * 0.95
Description
La taille totale des bases de données PostgreSQL autogérées dépasse 95 % de l'espace de stockage de l'instance ApsaraDB RDS for PostgreSQL de destination.
Solution
-
Exécutez la commande suivante pour vérifier l'espace de stockage total utilisé par votre base de données PostgreSQL autogérée :
SELECT SUM(pg_database_size(pg_database.datname))/1024/1024 AS size FROM pg_database;RemarqueL'unité du résultat est le mégaoctet (Mo).
-
Calculez l'espace de stockage requis pour l'instance ApsaraDB RDS for PostgreSQL de destination.
Par exemple, si votre base de données PostgreSQL autogérée utilise 100 Go d'espace de stockage, vous devez définir l'espace de stockage de l'instance ApsaraDB RDS for PostgreSQL à au moins 110 Go.
Augmentez l'espace de stockage de l'instance ApsaraDB RDS for PostgreSQL. Pour plus d'informations, consultez Modifier les spécifications de l'instance.
Vérifier la taille wal keep
Élément de vérification
Vérifier si la taille wal keep est suffisamment grande
Erreur courante
warning:wal_keep_size X MB is too small. Try to set wal_keep_segments or wal_keep_size large enough ensure pg_basebackup success
Description
La valeur du paramètre wal_keep_size ou wal_keep_segments est trop faible et doit être augmentée.
Solution
Si votre base de données PostgreSQL autogérée est en version 13 ou ultérieure, augmentez la valeur du paramètre wal_keep_size sur votre base de données PostgreSQL autogérée. Cela améliore le taux de réussite des sauvegardes complètes et incrémentielles lors de la migration.
-
Si votre base de données PostgreSQL autogérée est antérieure à la version 13, augmentez la valeur du paramètre wal_keep_segments sur votre base de données PostgreSQL autogérée. Cela améliore le taux de réussite des sauvegardes complètes et incrémentielles lors de la migration.
RemarquePour les versions de PostgreSQL antérieures à 13,
wal_keep_sizeest calculé commewal_keep_segments * wal_segment_size.
Vérifier les paramètres de spécification
Élément de vérification
Vérifier si les paramètres de spécification sont trop élevés
Erreur courante
error:max_connections too large, value=XXX
error:max_prepared_transactions too large, value=XXX
Description
Les paramètres max_connections et max_prepared_transactions de la base de données PostgreSQL autogérée sont plus de 100 fois supérieurs aux paramètres correspondants de l'instance ApsaraDB RDS for PostgreSQL de destination. Cela peut empêcher le démarrage de l'instance de destination lors de la configuration du lien de réplication.
Solution
Réduisez les valeurs des paramètres max_connections et max_prepared_transactions sur votre base de données PostgreSQL autogérée.
Les modifications des paramètres max_connections et max_prepared_transactions nécessitent un redémarrage de l'instance PostgreSQL autogérée pour prendre effet.
Vérifier l'utilisateur RDS
Élément de vérification
Vérifier si l'utilisateur système RDS est occupé
Erreur courante
warning:Check if rds system user is occupied ...XXX will be reused in rds
Description
Les comptes aurora, replicator et pgxxx sur la base de données PostgreSQL autogérée sont réservés par ApsaraDB RDS for PostgreSQL. N'utilisez pas ces trois comptes comme comptes de service.
Solution
N'utilisez pas les comptes répertoriés dans le message d'avertissement comme comptes de service.
Vérifier les extensions
-
Élément de vérification 1
Vérifier les extensions prises en charge par la source
Erreur courante
error:Check source supported extensions XXX not supportedDescription
La base de données PostgreSQL autogérée possède une extension incompatible avec l'instance ApsaraDB RDS for PostgreSQL de destination.
Solution
Supprimez l'extension incompatible de votre base de données PostgreSQL autogérée.
-
Élément de vérification 2
Vérifier les extensions source avec une version supérieure
Erreur courante
error:Check source extensions with higher version XXXDescription
Une version d'extension sur la base de données PostgreSQL autogérée est supérieure à la version disponible sur ApsaraDB RDS for PostgreSQL.
Solution
Installez une version inférieure de l'extension sur votre base de données PostgreSQL autogérée pour correspondre à la version de l'instance ApsaraDB RDS for PostgreSQL.
-
Élément de vérification 3
Vérifier les extensions source avec une version inférieure
Erreur courante
warning:Check source extensions with lower version XXXDescription
Une version d'extension sur la base de données PostgreSQL autogérée est inférieure à la version sur ApsaraDB RDS for PostgreSQL.
Solution
Aucune action n'est requise. L'extension est automatiquement mise à niveau après la migration.
Vérifier les catalogues système Postgres
-
Élément de vérification 1
Vérifiez si l'instance source contient des langages non pris en charge sur l'instance de destination (pg_language).
Erreur courante
error: disallowed language exist in databases [xxx, xxx], the languages allowed are [c, internal, sql, plpgsql, pltcl, plperl].Description
ApsaraDB RDS for PostgreSQL prend uniquement en charge les langages C, internal, SQL, PL/pgSQL, PL/Tcl et PL/Perl.
Solution
Supprimez les langages non pris en charge de l'instance source.
-
Élément de vérification 2
Vérifiez si l'instance source contient des objets volumineux (Large Objects).
Erreur courante
error: large object exist in databases [xxx, xxx].Description
ApsaraDB RDS for PostgreSQL ne prend pas en charge les objets volumineux (Large Objects).
Solution
Supprimez tous les objets volumineux de l'instance source.
-
Élément de vérification 3
Vérifiez si des privilèges par défaut ont été définis sur l'instance source à l'aide de l'instruction
ALTER DEFAULT PRIVILEGES ... GRANT .... Cette vérification permet de déterminer si une base de données de l'instance source possède une table systèmepg_catalog.pg_default_aclnon vide.Erreur courante
error: default acl settings exist in databases [xxx, xxx].Description
Si l'instruction
ALTER DEFAULT PRIVILEGES ... GRANT ...a été exécutée sur une base de données de l'instance source, la table systèmepg_catalog.pg_default_aclde cette base de données ne sera pas vide.Solution
Vous devez d'abord exécuter l'instruction
ALTER DEFAULT PRIVILEGES ... REVOKE ...dans la base de données correspondante de l'instance source pour vous assurer que la table systèmepg_default_aclest vide pour toutes les bases de données. Une fois la migration terminée, vous pouvez exécuter à nouveau l'instructionALTER DEFAULT PRIVILEGES ... GRANT ...pour restaurer les paramètres de privilège par défaut d'origine. -
Élément de vérification 4
Vérifiez si les tables système
pg_parameter_acletpg_db_role_settingde l'instance source ne sont pas vides.Erreur courante
warning: Invalid system tables: [pg_parameter_acl, pg_db_role_setting], these system tables should be empty.Description
La table système
pg_parameter_aclenregistre les privilèges d'accès des utilisateurs pour les paramètres du noyau. ApsaraDB RDS for PostgreSQL n'autorise pas les utilisateurs à modifier ces privilèges. La table systèmepg_db_role_settingenregistre les paramètres de privilège par défaut pour différents utilisateurs dans chaque base de données.Solution
-
Sur l'instance source, exécutez les instructions suivantes pour vider les tables système
pg_parameter_acletpg_db_role_setting:DELETE FROM pg_parameter_acl; DELETE FROM pg_db_role_setting; Une fois la migration terminée, vous devez reconfigurer les privilèges par défaut pour différents utilisateurs dans chaque base de données de l'instance de destination.
-
Vérifier les privilèges des rôles réservés
Élément de vérification
Vérifiez si l'instance source a accordé des privilèges de rôle réservés à des comptes non autorisés sur l'instance de destination.
Erreur courante
error: some disallowed reserved roles [pg_write_server_files] are granted to user. you should revoke these roles from their members
Description
ApsaraDB RDS for PostgreSQL n'autorise pas les comptes à disposer de privilèges pour des rôles réservés tels que pg_write_server_files. Si une instruction telle que GRANT pg_write_server_files TO "user"; a été utilisée sur l'instance source, vous devez révoquer ces privilèges.
Solution
Sur l'instance source, exécutez l'instruction REVOKE appropriée pour révoquer les privilèges, par exemple REVOKE pg_write_server_files FROM "user";.