Migrer des bases de données PostgreSQL locales vers Azure
Dès lors qu’une entreprise prend la décision de migrer vers Azure Database pour PostgreSQL, elle doit ensuite prévoir comment elle va migrer ses bases de données locales et avec quels outils elle va déplacer ses données.
Ayant exploré la façon dont Azure Database pour PostgreSQL prend en charge et met à l’échelle PostgreSQL dans Azure, vous devez maintenant réfléchir à la façon dont vous allez migrer vos bases de données locales existantes.
Dans cette unité, vous allez apprendre à créer une instance du service Azure Database pour PostgreSQL à partir du portail Azure. Si vous devez créer un grand nombre d’instances de ce service, vous pouvez écrire le script du processus à l’aide d’Azure CLI.
Créez des serveurs flexibles Azure Database pour PostgreSQL
Dans le Portail Azure, tapez Serveurs flexibles Azure Database pour PostgreSQL dans la zone de recherche, puis sélectionnez Serveurs flexibles Azure Database pour PostgreSQL.
Sélectionnez Créer dans le volet principal du Serveur flexible, entrez les détails du service. Ces détails sont les suivants :
Groupe de ressources. Groupe de ressources pour le serveur.
Nom du serveur. Il doit s’agir d’un nom unique composé de trois à 63 caractères, avec uniquement des lettres minuscules, des chiffres et des traits d’union.
Région. Région pour le serveur.
Version PostgreSQL : Sélectionnez la version qui correspond à la base de données locale que vous migrez.
Type de charge de travail. Sélectionnez l’option basée sur votre charge de travail.
-
- Calcul + stockage. Sélectionnez Configurer le serveur pour définir le niveau tarifaire et spécifier les ressources dont vous avez besoin pour le service. Les options ont été traitées dans la leçon 1. N’oubliez pas que, si vous sélectionnez le niveau tarifaire Usage général ou Mémoire optimisée, vous pouvez par la suite augmenter ou réduire le nombre de cœurs de processeur virtuel. En revanche, vous ne pouvez pas réduire la quantité de stockage ; une fois le serveur créé, elle ne peut qu’augmenter.
Nom d’utilisateur de l’administrateur. Nom d’un compte d’utilisateur que vous allez créer avec des privilèges d’administrateur. Azure crée des comptes pour son propre usage. Vous ne pouvez pas utiliser azure_superuser, azure_pg_admin, admin, administrateur, root, invité, publicou n’importe quel nom qui commence par pg_.
Mot de passe. Doit comprendre entre 8 et 128 caractères. Il doit contenir une combinaison de lettres majuscules et minuscules, de chiffres et de caractères non alphanumériques.
Cliquez sur Vérifier + créer pour déployer le service. Le déploiement prend plusieurs minutes.
Une fois le service déployé, sélectionnez l’option Sécurité de la connexion et ajoutez les règles de pare-feu appropriées pour permettre aux clients de se connecter (comme décrit dans la rubrique Connectivité cliente de la leçon 1). Vous devez également sélectionner l’option Autoriser l’accès aux services Azure.
Créer une instance Azure Database pour PostgreSQL à l’aide d’Azure CLI
Vous pouvez créer une instance d’Azure Database pour PostgreSQL à l’aide de la commande az postgres flexible-server create
. L’instruction ci-dessous montre un exemple qui crée une instance de serveur flexible. La plupart des paramètres sont explicites, à l’exception de ceux-ci :
- sku-name. Cet élément se compose à la fois du niveau tarifaire [B pour Basic (De base), GP pour General Purpose (Usage général) et MO pour Memory Optimized (Mémoire optimisée)], de la génération de calcul (Gen4 ou Gen5) et du nombre de cœurs de processeur virtuel. Dans l’exemple ci-dessous, le serveur est créé à partir du niveau tarifaire Usage général, avec quatre cœurs de processus de la génération Gen5.
- storage-size. Il s’agit de la quantité de stockage sur disque nécessaire, exprimée en mégaoctets. L’exemple suivant alloue 10 gigaoctets :
az postgres flexible-server create \ --location northeurope --resource-group testGroup \ --name testserver --admin-user username --admin-password password \ --sku-name Standard_B1ms --tier Burstable --public-access 153.24.26.117 --storage-size 128 \ --tags "key=value" --version 13 --high-availability Enabled --zone 1 \ --standby-zone 3
Effectuer une migration en ligne
Vous pouvez effectuer une migration en ligne d’une installation PostgreSQL locale vers Azure Database pour PostgreSQL avec Azure Database Migration Service.
Dans le scénario en ligne, Azure Database Migration Service copie toutes vos données existantes dans Azure, puis effectue une opération de synchronisation en continu à partir de la base de données source. Toutes les nouvelles transactions qui sont exécutées sur le système local sont copiées dans la nouvelle base de données dans Azure. Ce processus se poursuit tant que vous ne reconfigurez pas vos applications clientes afin qu’elles utilisent la nouvelle base de données dans Azure (l’opération de synchronisation prend alors fin).
Configurer le serveur source et exporter le schéma
La première étape de la migration en ligne consiste à préparer le serveur source à prendre en charge la journalisation WAL. Sur le serveur source, modifiez le fichier postgresql.config et configurez les paramètres de journalisation en écriture anticipée suivants. Pour changer ces paramètres, vous devez redémarrer le serveur. Il est donc préférable d’effectuer cette tâche dans une phase où le système est au repos :
wal_level = logical
max_replication_slots = 5
max_wal_senders = 10
Après avoir redémarré le serveur, exportez le schéma de la base de données source à l’aide de l’utilitaire pg_dump :
pg_dump -o -h [server host] -U [user name] -d [database name] -s > db_schema.sql
Enfin, dressez une liste de toutes les extensions utilisées par votre base de données. Vous devez activer ces extensions dans la base de données cible. Pour ce faire, vous utilisez la commande \dx plsql ou exécutez la requête suivante :
SELECT *
FROM pg_extension;
Créer une base de données cible et importer le schéma
L’étape suivante consiste à créer une base de données cible dans votre service Azure Database pour PostgreSQL. Vous utilisez un outil familier tel que pgAdmin pour vous connecter au serveur, ou vous pouvez utiliser Azure CLI dans l’exemple suivant :
az postgres db create \
--name [database name] \
--server-name [server name] \
--resource-group [azure resource group]
Sur la base de données cible, activez toutes les extensions utilisées par la base de données sources.
Importez le schéma dans la base de données cible. Sur l’ordinateur contenant le fichier db_schema. SQL, exécutez la commande suivante :
psql -h [Azure Database for PostgreSQL host] -U [user name] -d [database name] -f db_schema.sql
Supprimez toutes les références de clé étrangère dans la base de données cible. Vous avez besoin de cette étape, car les données ne sont pas nécessairement migrées dans une séquence spécifique, éventuellement en demandant des violations d’intégrité référentielle qui entraîneront l’échec du processus de migration. Cependant, vous devez consigner toutes les clés étrangères, car vous en aurez besoin pour les recréer ultérieurement. Exécutez l’instruction SQL suivante à l’aide de l’utilitaire psql pour rechercher toutes les clés étrangères dans votre base de données et générer un script qui les supprime :
SELECT Queries.tablename
,concat('alter table ', Queries.tablename, ' ', STRING_AGG(concat('DROP CONSTRAINT ', Queries.foreignkey), ',')) as DropQuery
,concat('alter table ', Queries.tablename, ' ',
STRING_AGG(concat('ADD CONSTRAINT ', Queries.foreignkey, ' FOREIGN KEY (', column_name, ')', 'REFERENCES ', foreign_table_name, '(', foreign_column_name, ')' ), ',')) as AddQuery
FROM
(SELECT
tc.table_schema,
tc.constraint_name as foreignkey,
tc.table_name as tableName,
kcu.column_name,
ccu.table_schema AS foreign_table_schema,
ccu.table_name AS foreign_table_name,
ccu.column_name AS foreign_column_name
FROM
information_schema.table_constraints AS tc
JOIN information_schema.key_column_usage AS kcu
ON tc.constraint_name = kcu.constraint_name
AND tc.table_schema = kcu.table_schema
JOIN information_schema.constraint_column_usage AS ccu
ON ccu.constraint_name = tc.constraint_name
AND ccu.table_schema = tc.table_schema
WHERE constraint_type = 'FOREIGN KEY') Queries
GROUP BY Queries.tablename;
Désactivez tous les déclencheurs dans la base de données cible. Vous devez faire cela pour deux raisons :
- Cela permet d’optimiser le processus de migration pendant que les données sont copiées.
- Les déclencheurs sont souvent utilisés pour implémenter des formes complexes d’intégrité référentielle et, pour les raisons décrites précédemment, ce type de contrôle d’intégrité peut échouer pendant le transfert des données. Utilisez l’instruction SQL suivante pour rechercher tous les déclencheurs contenus dans votre base de données et générer un script qui les désactive :
SELECT concat ('alter table ', event_object_table, ' disable trigger ', trigger_name) FROM information_schema.triggers;
Remarque
Vous pouvez rechercher le texte d’un déclencheur à l’aide de la commande \df+ dans psql.
Créer une instance Azure Database Migration Service
Sur le portail Azure, vous pouvez maintenant créer une instance d’Azure Database Migration Service.
Avant de créer une instance d’Azure Database Migration Service, vous devez inscrire le fournisseur de ressources Microsoft.DataMigration avec votre abonnement. Vous pouvez procéder comme suit :
- Dans la barre de menus de gauche du portail Azure, sélectionnez Tous les services.
- Dans la page Tous les services, sélectionnez Abonnements.
- Dans la page Abonnements, sélectionnez votre abonnement.
- Dans la page de votre abonnement, sous Paramètres, sélectionnez Fournisseurs de ressources.
- Dans la zone Filtrer par nom, tapez DataMigration, puis sélectionnez Microsoft.DataMigration.
- Sélectionnez Inscrire, puis attendez que l’État passe à Inscrit. Vous devrez peut-être sélectionner Actualiser pour voir l’état à changer.
Une fois le fournisseur de ressources inscrit, vous pouvez créer le service. Sélectionnez la commande Créer une ressource dans la barre de menus de gauche, puis recherchez Azure Database Migration Service.
Dans la page Créer un service de migration, entrez un nom pour votre instance du service, spécifiez l’abonnement (celui-ci doit être le même que celui pour lequel vous avez inscrit le fournisseur de ressources), le groupe de ressources et l’emplacement. Vous devez aussi indiquer un réseau virtuel, car Database Migration Service est tributaire du pare-feu créé pour ce réseau virtuel pour assurer la protection nécessaire. Si vous migrez des bases de données à partir de machines virtuelles Azure, vous pourrez peut-être placer Database Migration Service dans le réseau virtuel utilisé par ces machines virtuelles. Le niveau tarifaire détermine le nombre de cœurs de processeur virtuel qui seront à la disposition du service. Si vous souhaitez effectuer une migration en ligne, vous devez sélectionner le niveau Premium ; le niveau Standard prend uniquement en charge la migration hors connexion.
Attendez que le service soit déployé avant de continuer. Cette opération peut prendre quelques minutes.
Créer un projet de migration à l’aide de Database Migration Service
Vous pouvez maintenant utiliser votre instance Database Migration Service pour effectuer une migration en ligne. Pour ce faire, vous devez créer un projet de migration de base de données. Accédez à la page de votre instance du service de migration, puis sélectionnez Nouveau projet de migration.
Dans la page Nouveau projet de migration, définissez le type de serveur source sur PostgreSQL, définissez le type de serveur cible sur Azure Database pour PostgreSQL, puis sélectionnez Migration de données en ligne. La page Type d’activité liste les étapes que vous devez effectuer sur le serveur source pour permettre la migration en ligne. Le texte au bas de la page Nouveau projet de migration décrit le processus de migration du schéma vers la cible.
Vérifiez que vous avez effectué ces étapes, puis sélectionnez Créer et exécuter une activité.
Créer et exécuter une activité de migration
Le nouveau projet de migration lance un Assistant qui vous guide tout au long du processus. Fournissez les détails suivants :
- Dans la page Ajouter les détails de la source, l’adresse du serveur source, la base de données source et un compte qui peut se connecter à cette base de données et récupérer les données. Le compte doit disposer de privilèges SUPERUTILISATEUR pour effectuer la migration.
- Dans la page Détails de la cible, spécifiez l’adresse de votre service Azure Database pour PostgreSQL, la base de données dans laquelle vous souhaitez migrer les données ainsi que les détails d’un compte disposant de droits d’administration.
- Dans la page Mapper aux bases de données cibles, sélectionnez la base de données source et la base de données cible. Vous pouvez migrer une ou plusieurs bases de données.
- Dans la page Paramètres de migration, spécifiez les autres paramètres que vous voulez éventuellement configurer, tels que le nombre maximal de tables à charger en parallèle.
- Dans la page Récapitulatif de la migration, entrez un nom pour l’activité, puis sélectionnez Exécuter la migration.
La page État de l’activité s’affiche en montrant la progression de la migration ainsi que les erreurs qui se sont produites. Si la migration échoue, vous corrigez les problèmes et retentez l’activité. Si vous effectuez une migration en ligne, l’état passe à Prêt pour le basculement une fois que les données existantes ont été transférées. En revanche, l’exécution de l’activité se poursuit pour transférer les éventuellement modifications supplémentaires qui se produisent pendant que les applications continuent d’utiliser activement la base de données d’origine.
Rétablir les clés étrangères et les déclencheurs
À ce stade, vous avez transféré les données et les applications peuvent commencer à les utiliser. Vous devez recréer les clés étrangères que vous avez supprimées avant de migrer les données et rétablir les déclencheurs. Si certaines applications sont toujours connectées à la base de données d’origine, la journalisation WAL (write-ahead log) garantit que la base de données cible dans Azure est tenue à jour. La journalisation WAL n’est pas affectée par les clés étrangères et les déclencheurs.
Basculer vers la nouvelle base de données
Une fois que toutes les applications ont été basculées vers la nouvelle base de données, vous terminez le processus de migration et basculez vers la nouvelle base de données. Dans la page État de l’activité, sélectionnez le nom de la base de données en cours de migration pour afficher un résumé du travail effectué.
Sélectionnez Démarrer le basculement. Une page vous demandant de confirmer que l’opération est terminée s’affiche à l’écran. À ce state, toutes les entrées restantes du journal WAL de la base de données source sont alors vidées et les mises à jour s’arrêtent. Les modifications supplémentaires qui sont éventuellement apportées à la base de données source ne sont pas propagées.
Effectuer une migration hors connexion
Une migration hors connexion effectue une capture instantanée de la base de données source à un moment précis dans le temps, puis copie ces données dans la base de données cible. Les modifications apportées aux données sources après la capture instantanée n’apparaissent pas dans la base de données cible.
Vous avez au moins deux options si vous souhaitez effectuer une migration hors connexion vers une base de données Azure pour PostgreSQL, ou vers un serveur PostgreSQL exécutant ailleurs, par exemple une machine virtuelle Azure :
- Exportez le schéma et les données de la base de données source à l’aide de l’utilitaire pg_dump, puis importez le schéma et les données dans la base de données cible à l’aide de l’utilitaire psql. Cette technique vous permet de modifier, de reformater et de nettoyer le schéma et les données si nécessaire, avant de les transférer vers la base de données cible.
- Videz les données de la base de données source, à l’aide de pg_dump, puis restaurez les données dans la base de données cible à l’aide de pg_restore. Cette technique est plus rapide que l’utilisation de l’exportation et de l’importation, mais les données sont vidées dans un format qui ne peut pas être facilement modifié. Utilisez cette approche si vous n’avez pas besoin de modifier le schéma ou les données.
Notes
Pour l’heure, vous ne pouvez pas utiliser Azure Database Migration Service pour effectuer une migration hors connexion d’une base de données PostgreSQL.
Migration par exportation et importation
Effectuez les étapes suivantes pour migrer une base de données en utilisant l’approche par exportation et importation.
Exportez le schéma à l’aide de la commande pg_dump à partir d’une invite bash :
pg_dump -o -h [source database server] -U [user name] -d [database] -s > db_schema.sql
Exportez les données dans un autre fichier à l’aide de la commande pg_dump :
pg_dump -o -h [source database server] -U [user name] -d [database] -a > db_data.sql
À ce stade, db_schema. SQL et db_data. SQL sont des scripts SQL que vous modifiez à l’aide d’un éditeur de texte.
Créez la base de données cible dans Azure Database pour PostgreSQL. Pour cela, utilisez Azure CLI :
az postgres db create \ --name [database name] \ --server-name [server name] \ --resource-group [azure resource group]
Importez le schéma dans la base de données cible à l’aide de la commande psql :
psql -d [target database name] -h [server name in Azure Database for PostgreSQL] -U [user name] -f db_schema.sql
Importez les données dans la base de données cible à l’aide de la commande psql :
psql -d [target database name] -h [server name in Azure Database for PostgreSQL] -U [user name] -f db_data.sql
Migrer à l’aide de la sauvegarde et de la restauration
Ces étapes décrivent le processus de migration d’une base de données à l’aide de la sauvegarde et de la restauration.
Sauvegarder la base de données : à partir d’une invite bash, exécutez la commande suivante. Spécifiez le nom d’un utilisateur disposant des privilèges nécessaires pour sauvegarder la base de données :
pg_dump [database name] -h [source database server] -U [user name] -Fc > database_backup.bak
Créez la base de données cible dans Azure Database pour PostgreSQL :
az postgres db create \ --name [database name] \ --server-name [server name] \ --resource-group [azure resource group] \
Restaurez la sauvegarde dans la nouvelle base de données avec la commande pg_restore à partir d’une invite bash. Spécifiez le nom d’un utilisateur disposant de droits d’administration dans votre service Azure Database pour PostgreSQL :
pg_restore -d [target database name] -h [server name in Azure Database for PostgreSQL] -Fc -U [user name] database_backup.bak