Migrez les données de manière incrémentale d'une base de données PostgreSQL auto-gérée vers une instance ApsaraDB for PostgreSQL à l'aide du service Data Transmission Service (DTS). DTS prend en charge la migration du schéma, des données complètes et des données incrémentales pour assurer une transition fluide avec un temps d'arrêt minimal.
Cet exemple utilise une base de données auto-gérée disposant d'une adresse IP publique. Pour la migration complète des données, consultez la rubrique Migration complète des données d'une base de données PostgreSQL auto-gérée vers une instance ApsaraDB for PostgreSQL.
Prérequis
La base de données PostgreSQL source auto-gérée doit être en version 9.4.8 ou ultérieure, 9.5, 9,6 ou 10,0.
L'instance ApsaraDB for PostgreSQL de destination dispose d'un espace de stockage suffisant pour les données sources.
Le port de la base de données PostgreSQL source est accessible via Internet.
Notes d'utilisation
Lors d'une migration complète des données, DTS consomme des ressources de lecture et d'écriture sur les bases de données source et de destination, ce qui augmente leur charge. Si vos bases de données présentent des performances médiocres, des spécifications faibles ou des charges de travail élevées (par exemple, si la base de données source contient de nombreuses requêtes SQL lentes ou des tables sans clés primaires, ou si des interblocages se produisent dans la base de données de destination), cette augmentation de la charge peut solliciter excessivement vos bases de données, voire provoquer des interruptions de service. Effectuez la migration des données pendant les heures creuses, par exemple lorsque l'utilisation du CPU des deux bases de données est inférieure à 30 %.
-
Lors de la migration incrémentale des données, si vous sélectionnez un schéma comme objet de migration, puis créez une nouvelle table ou reconstruisez une table à l'aide de RENAME, exécutez
ALTER TABLE schema.table REPLICA IDENTITY FULL;avant d'écrire des données dans la table.RemarqueRemplacez
schema
et
table
par les noms réels du schéma et de la table.
Si une table source ne possède ni clé primaire ni contrainte unique et contient des données non uniques, des données en double peuvent être créées dans la base de données de destination.
DTS relance automatiquement les tâches ayant échoué. Avant de basculer vos applications vers l'instance de destination, arrêtez ou libérez la tâche pour éviter d'écraser les données de destination.
Les transactions de longue durée dans la base de données source lors d'une migration incrémentale empêchent l'effacement des enregistrements WAL, ce qui peut épuiser l'espace disque.
Limites
Chaque tâche de migration ne migre qu'une seule base de données. Pour migrer plusieurs bases de données, créez une tâche distincte pour chacune d'elles.
Les noms de bases de données ne doivent pas contenir de traits d'union (-). Exemple : dts-testdata.
Si un basculement principal/secondaire se produit sur la base de données source pendant la migration, la migration incrémentale des données ne peut pas reprendre.
-
La latence de réplication peut entraîner une incohérence des données entre les nœuds principal et secondaire. Utilisez toujours le nœud principal comme source de données.
RemarqueEffectuez la migration pendant les heures creuses. Vous pouvez ajuster le taux de migration en fonction de la charge de la base de données source.
Modifier le taux de transfert de la migration complète des données
.
DTS valide le contenu des données, mais ne valide pas les métadonnées telles que les séquences. Validez manuellement les métadonnées des séquences.
-
Les séquences de la base de données de destination ne continuent pas à partir de la valeur maximale source après le basculement. Avant le basculement, interrogez la valeur maximale de chaque séquence dans la source et définissez-la comme valeur de départ dans la destination. Interrogez les valeurs des séquences :
do language plpgsql $$ declare nsp name; rel name; val int8; begin for nsp,rel in select nspname,relname from pg_class t2 , pg_namespace t3 where t2.relnamespace=t3.oid and t2.relkind='S' loop execute format($_$select last_value from %I.%I$_$, nsp, rel) into val; raise notice '%', format($_$select setval('%I.%I'::regclass, %s);$_$, nsp, rel, val+1); end loop; end; $$; -
Le basculement principal/secondaire pendant la migration est pris en charge uniquement pour ApsaraDB RDS for PostgreSQL 11. Définissez
rds_failover_slot_modesursync.Basculement du slot de réplication logique.AvertissementUn basculement principal/secondaire sur une base de données PostgreSQL auto-gérée ou d'autres versions RDS interrompt la migration.
-
Lors de la migration incrémentale des données, seules les opérations DML (INSERT, DELETE, UPDATE) sont synchronisées.
RemarqueSeules les tâches créées après le 1er octobre 2020 prennent en charge la synchronisation DDL. Avant de configurer la tâche, créez des déclencheurs et des fonctions dans la base de données source pour capturer les informations DDL.
.
Facturation
|
Type de migration |
Frais de configuration de la tâche |
Frais de trafic Internet |
|
Migration du schéma et migration complète des données |
Gratuit. |
DTS facture des frais de trafic Internet lorsque la Access Method de la base de données de destination est définie sur Public IP Address. Présentation de la facturation. |
|
Migration incrémentale des données |
Facturé. Présentation de la facturation. |
Autorisations des comptes de base de données
| Base de données | Migration du schéma | Migration complète des données | Migration incrémentale des données |
| Base de données PostgreSQL auto-gérée | Autorisation USAGE sur pg_catalog | Autorisation SELECT sur les objets de migration | superuser |
| Instance ApsaraDB for PostgreSQL | Autorisations CREATE et USAGE sur les objets de migration | Autorisation de propriétaire de schéma | Autorisation de propriétaire de schéma |
Pour créer des comptes et accorder des autorisations :
Base de données PostgreSQL auto-gérée :CREATE USER et GRANT.
-
Instance ApsaraDB for PostgreSQL :Créer un compte
.
Processus de migration des données
Pour résoudre les dépendances entre objets et améliorer le taux de réussite de la migration, DTS migre les schémas et les données PostgreSQL selon l'ordre suivant.
Pour les définitions de la migration du schéma, de la migration complète des données et de la migration incrémentale des données, consultez
.
| Processus de migration DTS | Description |
| 1. Migration du schéma | DTS migre les informations de schéma pour TABLE, VIEW, SEQUENCE, FUNCTION, USER DEFINED TYPE, RULE, DOMAIN, OPERATION et AGGREGATE vers la base de données de destination. Remarque Les plug-ins et les fonctions écrits en C ne sont pas pris en charge. |
| 2. Migration complète des données | DTS migre toutes les données existantes des objets sélectionnés vers la base de données de destination. |
| 3. Migration du schéma | DTS migre les informations de schéma pour TRIGGER et FOREIGN KEY vers la base de données de destination. |
| 4. Migration incrémentale des données | Après la migration complète des données, DTS migre les mises à jour incrémentales des objets sélectionnés vers la base de données de destination.
La migration incrémentale des données permet une transition fluide avec un temps d'arrêt minimal.
Remarque
|
Préparatifs
Ces étapes s'appliquent à Linux.
-
Facultatif : Téléchargez, compilez et installez le code source de PostgreSQL.
RemarqueIgnorez cette étape si votre base de données a été déployée à partir du code source.
Téléchargez le code source de votre version de base de données depuis le site Web officiel de PostgreSQL.
-
Exécutez les commandes suivantes pour configurer, compiler et installer le code source.
sudo ./configure --prefix=/usr/local/postgresql sudo make sudo make installImportantLa valeur du préfixe doit différer du chemin d'installation de votre PostgreSQL existant.
La version du système d'exploitation doit être compatible avec la version de GCC.
Si
sudo ./configureéchoue, effectuez les ajustements nécessaires en fonction de l'erreur. Par exemple, pourreadline library not found. Use --without-readline to disable readline support., utilisezsudo ./configure --without-readline.Si vous utilisez une autre méthode d'installation, compilez le plug-in ali_decoding dans un environnement de test avec les mêmes versions de système d'exploitation et de GCC.
-
Compilez un nouveau fichier ali_decoding à partir du code source de PostgreSQL et remplacez le fichier existant.
-
Téléchargez le plug-in ali_decoding fourni par DTS.
RemarqueExécutez ces commandes pour télécharger et extraire le plug-in.
sudo wget https://github.com/aliyun/rds_dbsync/archive/refs/heads/master.zip unzip master.zip -
Copiez le répertoire ali_decoding dans le répertoire contrib de l'installation PostgreSQL compilée.
sudo cp rds_dbsync-master/ali_decoding /tmp/postgresql-9.4.26/contrib/ -rRemarqueRemplacez
/tmp/postgresql-9.4.26/contrib/
par votre répertoire de code source PostgreSQL.
total 1068 -rw-r--r-- 1 1107 1107 384 Sep 27 2016 aclocal.m4 drwxrwxrwx 2 1107 1107 4096 Sep 27 2016 config -rw-r--r-- 1 root root 374806 Sep 7 10:10 config.log -rwxr-xr-x 1 root root 39032 Sep 7 10:10 config.status -rwxr-xr-x 1 1107 1107 471157 Sep 27 2016 configure -rw-r--r-- 1 1107 1107 75195 Sep 27 2016 configure.in drwxrwxrwx 56 1107 1107 4096 Sep 7 10:28 contrib -rw-r--r-- 1 1107 1107 1192 Sep 27 2016 COPYRIGHT drwxrwxrwx 3 1107 1107 4096 Sep 27 2016 doc -rw-r--r-- 1 root root 3638 Sep 7 10:10 GNUmakefile -rw-r--r-- 1 1107 1107 3638 Sep 27 2016 GNUmakefile.in -rw-r--r-- 1 1107 1107 283 Sep 27 2016 HISTORY -rw-r--r-- 1 1107 1107 75065 Sep 27 2016 INSTALL -rw-r--r-- 1 1107 1107 1489 Sep 27 2016 Makefile -rw-r--r-- 1 1107 1107 1209 Sep 27 2016 README drwxrwxrwx 16 1107 1107 4096 Sep 7 10:10 src -
Dans le répertoire ali_decoding, remplacez le contenu du Makefile par :
# contrib/ali_decoding/Makefile MODULE_big = ali_decoding MODULES = ali_decoding OBJS = ali_decoding.o DATA = ali_decoding--0.0.1.sql ali_decoding--unpackaged--0.0.1.sql EXTENSION = ali_decoding NAME = ali_decoding #subdir = contrib/ali_decoding #top_builddir = ../.. #include $(top_builddir)/src/Makefile.global #include $(top_srcdir)/contrib/contrib-global.mk #PG_CONFIG = /usr/pgsql-9.6/bin/pg_config #pgsql_lib_dir := $(shell $(PG_CONFIG) --libdir) #PGXS := $(shell $(PG_CONFIG) --pgxs) #include $(PGXS) # For source code installation, use the following: ifdef USE_PGXS PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) include $(PGXS) else subdir = contrib/ali_decoding top_builddir = ../.. include $(top_builddir)/src/Makefile.global include $(top_srcdir)/contrib/contrib-global.mk endif -
Facultatif : Pour PostgreSQL 9.4 (9.4.8 à 9.4.26), supprimez le paramètre false de la fonction set_config_option dans ali_decoding.c. La fonction modifiée :
if (extra_float_digits < 3) (void) set_config_option("extra_float_digits", "3", PGC_USERSET, PGC_S_SESSION, GUC_ACTION_SAVE, true, 0); -
Dans le répertoire ali_decoding, exécutez
sudo makeetsudo make install. Sortie attendue aprèssudo make install:/usr/bin/install -c -m 755 ali_decoding.so '/usr/local/pgsql/lib/ali_decoding.so' /usr/bin/install -c -m 644 ./ali_decoding.control '/usr/local/pgsql/share/extension/' /usr/bin/install -c -m 644 ./ali_decoding--0.0.1.sql ./ali_decoding--unpackaged--0.0.1.sql '/usr/local/pgsql/share/extension/' /usr/bin/install -c -m 755 ali_decoding.so '/usr/local/pgsql/lib/' -
Copiez les fichiers ali_decoding générés dans votre installation PostgreSQL source, en remplaçant les fichiers aux chemins suivants.
RemarqueRemplacez
/usr/local/postgresql
par le chemin d'installation de votre PostgreSQL source.
/usr/local/postgresql/lib/ali_decoding.so /usr/local/postgresql/share/extension/ali_decoding.control /usr/local/postgresql/share/extension/ali_decoding--0.0.1.sql /usr/local/postgresql/share/extension/ali_decoding--unpackaged--0.0.1.sql
-
Créez la base de données et le schéma correspondants dans l'instance ApsaraDB for PostgreSQL de destination. Les noms des schémas doivent correspondre à ceux de la source.Créer une base de données et Gérer les schémas.
Procédure
-
Connectez-vous à la console Data Transmission Service (DTS).
RemarqueSi vous êtes redirigé automatiquement vers la console Data Management (DMS), cliquez sur l'icône
en bas à droite, puis cliquez sur
pour revenir à la console DTS classique. Dans le volet de navigation de gauche, cliquez sur Data Migration.
En haut de la page Tâches de migration, sélectionnez la région où se trouve l'instance de destination.
Dans le coin supérieur droit de la page, cliquez sur Create Data Migration Task.
-
Configurez les bases de données source et de destination.
Catégorie Paramètre Description N/A Nom de la tâche DTS génère automatiquement un nom de tâche. Spécifiez un nom descriptif pour une identification facile. Les noms uniques ne sont pas requis. Base de données source Type d'instance Sélectionnez en fonction de votre déploiement. Cet exemple utilise base de données auto-gérée avec une adresse IP publique. Remarque D'autres types d'instances nécessitent des préparatifs supplémentaires. Présentation des préparatifs.Région de l'instance Si vous sélectionnez base de données auto-gérée avec une adresse IP publique comme type d'instance, vous n'avez pas besoin de définir la Instance Region. Remarque Si vous avez configuré une liste d'autorisation pour votre base de données PostgreSQL auto-gérée, cliquez sur Obtenir le segment d'adresses IP de DTS à côté du paramètre Instance Region pour obtenir les adresses IP des serveurs DTS et les ajouter à votre liste d'autorisation.Type de base de données Sélectionnez PostgreSQL. Nom d'hôte ou adresse IP Saisissez le point de terminaison de la base de données PostgreSQL auto-gérée. Dans cet exemple, saisissez l'adresse IP publique. Port Saisissez le port de service. Par défaut : 5432. Nom de la base de données Saisissez le nom de la base de données à migrer. Compte de base de données Saisissez le compte de la base de données. Pour les autorisations, consultez la section Autorisations des comptes de base de données. Mot de passe de la base de données Saisissez le mot de passe du compte de la base de données. RemarqueAprès avoir saisi les informations de la base de données source, vous pouvez cliquer sur Test Connectivity à côté de Database Password pour vérifier que les informations sont correctes. Si les informations sont correctes, le message Passed s'affiche. Si le message Failed s'affiche, cliquez sur Diagnose à côté du message Failed et ajustez les informations de la base de données source en fonction des invites.
Base de données de destination Type d'instance Sélectionnez RDS Instance. Région de l'instance Sélectionnez la région de l'instance RDS de destination. ID de l'instance RDS Sélectionnez l'ID de l'instance RDS de destination. Nom de la base de données Saisissez le nom de la base de données de destination. Il peut différer du nom de la base de données source. Remarque Créez d'abord la base de données et le schéma dans l'instance RDS. Préparatifs.Compte de base de données Saisissez le compte de la base de données. Pour les autorisations, consultez la section Autorisations des comptes de base de données. Mot de passe de la base de données Saisissez le mot de passe du compte de la base de données. RemarqueAprès avoir saisi les informations de la base de données de destination, vous pouvez cliquer sur Test Connectivity après Database Password pour vérifier que les informations saisies sont correctes. Si les informations sont correctes, un message Passed s'affiche. Si un message Failed s'affiche, cliquez sur Diagnose après Failed et ajustez les informations de la base de données de destination en fonction des invites.
-
Une fois la configuration terminée, cliquez sur Autoriser la liste d'autorisation et passer à l'étape suivante.
Si la source ou la destination est une instance de base de données Alibaba Cloud (telle que ApsaraDB RDS for MySQL ou ApsaraDB for MongoDB), DTS ajoute automatiquement les adresses IP des serveurs DTS de la région correspondante à la liste d'autorisation de l'instance. Si la source ou la destination est une base de données auto-gérée sur une instance ECS, DTS ajoute automatiquement les adresses IP des serveurs DTS aux règles de sécurité de l'instance ECS. Vous devez également vous assurer que la base de données auto-gérée ne restreint pas l'accès depuis l'instance ECS. Si la base de données est un cluster déployé sur plusieurs instances ECS, vous devez ajouter manuellement les adresses IP des serveurs DTS de la région aux règles de sécurité de chaque instance ECS. Si la source ou la destination est une base de données dans un centre de données ou un autre cloud, vous devez ajouter manuellement les adresses IP des serveurs DTS de la région pour autoriser l'accès depuis celles-ci. Pour obtenir la liste des adresses IP des serveurs DTS, consultez la rubrique Plages d'adresses IP des serveurs DTS.
AvertissementL'ajout des blocs CIDR publics des serveurs DTS, qu'il soit automatique ou manuel, peut introduire des risques de sécurité. En utilisant ce produit, vous reconnaissez et acceptez ces risques potentiels. Il vous incombe de mettre en œuvre des mesures de sécurité de base, notamment, mais sans s'y limiter, l'utilisation de mots de passe forts, la restriction des ports ouverts, l'utilisation de l'authentification pour les appels API internes, la révision et la restriction régulières des segments réseau inutiles, ou la connexion via des réseaux privés tels qu'Express Connect, VPN Gateway ou Smart Access Gateway.
-
Sélectionnez les types et les objets de migration.
Paramètre Description Type de migration - Pour la migration complète des données uniquement, sélectionnez à la fois Schema Migration et Migration complète des données.
- Pour un temps d'arrêt minimal, sélectionnez Schema Migration, Migration complète des données et Migration incrémentale des données. Dans cet exemple, les trois types de migration sont sélectionnés.
Remarque Si Migration incrémentale des données n'est pas sélectionné, n'écrivez pas dans la base de données source pendant la migration complète des données afin de garantir la cohérence des données.Objet de migration Sélectionnez les objets dans la zone Disponible et cliquez sur
pour les déplacer vers la zone Selected Objects.Remarque- Vous pouvez sélectionner des objets au niveau du schéma, de la table ou de la colonne.
- Les noms des objets restent inchangés après la migration par défaut. Pour renommer les objets, utilisez la fonctionnalité de mappage des noms d'objets DTS. Mapper les tables et les colonnes.
- Le mappage des noms d'objets peut entraîner l'échec de la migration des objets dépendants.
Mappage des noms d'objets Pour renommer les objets migrés dans l'instance de destination, utilisez le mappage des noms d'objets. Mapper les tables et les colonnes. Durée de nouvelle tentative de connexion Par défaut, DTS effectue des nouvelles tentatives pendant 12 heures. Vous pouvez personnaliser cette durée. Si DTS se reconnecte dans le délai spécifié, la tâche reprend ; sinon, elle échoue. Remarque DTS facture les tâches en cours d'exécution pendant la période de nouvelle tentative. Personnalisez la durée de nouvelle tentative en fonction de vos besoins, ou libérez l'instance DTS lorsque la source et la destination sont libérées. -
Une fois ces paramètres configurés, cliquez sur Vérification préalable et démarrage en bas à droite de la page.
RemarqueDTS effectue une vérification préalable avant le démarrage de la tâche. La tâche ne peut démarrer qu'après avoir réussi cette vérification.
-
Si la vérification préalable échoue, cliquez sur l'icône
à côté de l'élément ayant échoué pour afficher les détails.Corrigez les problèmes en fonction des détails, puis exécutez à nouveau la vérification préalable.
Pour les avertissements ne nécessitant pas de correction, vous pouvez sélectionner Ignore ou Ignorer et relancer la vérification préalable pour exécuter à nouveau la vérification préalable.
Une fois la tâche passée avec succès la vérification préalable, cliquez sur Next.
Sur la page Confirmer la commande, sélectionnez une Instance Class et cochez la case Conditions d'utilisation du service Data Transmission Service (paiement à l'utilisation).
-
Cliquez sur Buy and Start. La tâche de migration démarre.
-
Migration complète des données
N'arrêtez pas manuellement la tâche. Attendez qu'elle se termine automatiquement pour éviter toute perte de données.
-
Migration incrémentale des données
La tâche ne s'arrête pas automatiquement. Vous devez l'arrêter manuellement lorsque vous êtes prêt.
RemarqueNous vous recommandons d'arrêter la tâche pendant les heures creuses ou lorsque vous êtes prêt à basculer vos charges de travail vers l'instance de destination.
Attendez que le statut de la tâche passe à Incremental Data Migration et affiche Undelayed. Ensuite, cessez d'écrire des données dans la base de données source pendant quelques minutes. Le statut de Incremental Data Migration peut afficher une latence.
Attendez que le statut de Incremental Data Migration repasse à Undelayed. Ensuite, arrêtez manuellement la tâche de migration. La progression de la migration du schéma et de la migration complète des données affiche toutes deux 100 %. Pour mettre en pause la tâche de migration, sélectionnez la tâche et cliquez sur Pause dans la barre d'opérations par lot en bas.
-
Basculez vos applications vers l'instance RDS.
Étapes suivantes
Après la migration, supprimez les comptes de migration des bases de données source et de destination pour des raisons de sécurité.