Comment migrer une base de données MySQL vers PostgreSQL à l’aide de pgLoader

introduction

PostgreSQL, également appelé «Postgres», est un système de gestion de base de données relationnelle à source ouverte (SGBDR). Https://db-engines.com/fr/ranking_trend/system/PostgreSQL ™ a connu une croissance phénoménale], de nombreux développeurs et entreprises ayant transféré leurs données vers Postgres depuis d’autres solutions de bases de données.

La perspective de migrer une base de données peut être intimidante, en particulier lors de la migration d’un système de gestion de base de données à un autre. pgLoader est un outil de migration de base de données open source qui vise à simplifier le processus de migration vers PostgreSQL. Il prend en charge les migrations à partir de plusieurs types de fichiers et de RBDMS - notamment MySQL et SQLite - vers PostgreSQL.

Ce tutoriel explique comment installer pgLoader et comment l’utiliser pour migrer une base de données MySQL distante vers PostgreSQL via une connexion SSL. Vers la fin du didacticiel, nous aborderons également brièvement plusieurs scénarios de migration pour lesquels pgLoader peut être utile.

Conditions préalables

Pour compléter ce didacticiel, vous aurez besoin des éléments suivants:

Notez que tout au long de ce guide, le serveur sur lequel vous avez installé MySQL sera appelé «* serveur MySQL *» et toutes les commandes devant être exécutées sur cette machine seront affichées avec un arrière-plan bleu, comme ceci:

De même, ce guide désignera l’autre serveur par le nom de serveur «* PostgreSQL » ou « Postgres» *. Les commandes devant être exécutées sur cette machine seront affichées avec un arrière-plan rouge:

N’oubliez pas ces instructions lorsque vous suivez ce didacticiel afin d’éviter toute confusion.

Étape 1 - (Facultatif) Création d’une base de données exemple et d’une table dans MySQL

Cette étape décrit le processus de création d’une base de données de test et de son remplissage avec des données factices. Nous vous encourageons à vous entraîner à utiliser pgLoader avec ce scénario de test. Toutefois, si vous souhaitez déjà migrer une base de données, vous pouvez passer à la https://www.digitalocean.com/community/tutorials/how-to-migrate- mysql-database-to-postgres-using-pgloader # étape-2-% E2% 80% 94-installation-pgloader [étape suivante].

Commencez par ouvrir l’invite MySQL sur votre serveur MySQL:

mysql -u root -p

Après avoir saisi le mot de passe de votre utilisateur MySQL * root *, vous verrez apparaître l’invite MySQL.

À partir de là, créez une nouvelle base de données en exécutant la commande suivante. Vous pouvez nommer votre base de données comme bon vous semble, mais dans ce guide, nous allons le nommer ++:

CREATE DATABASE ;

Puis basculez sur cette base de données avec la commande + USE +:

USE ;
OutputDatabase changed

Dans cette base de données, utilisez la commande suivante pour créer un exemple de table. Ici, nous nommerons cette table ++ mais n’hésitez pas à lui donner un autre nom:

CREATE TABLE  (
   employee_id INT PRIMARY KEY,
   first_name VARCHAR(50),
   last_name VARCHAR(50),
   start_date DATE,
   salary VARCHAR(50)
);

Puis remplissez cette table avec des exemples de données d’employé à l’aide de la commande suivante:

INSERT INTO  (employee_id, first_name, last_name, start_date, salary)
VALUES (1, 'Elizabeth', 'Cotten', '2007-11-11', '$105433.18'),
(2, 'Yanka', 'Dyagileva', '2017-10-30', '$107540.67'),
(3, 'Lee', 'Dorsey', '2013-06-04', '$118024.04'),
(4, 'Kasey', 'Chambers', '2010-08-18', '$116456.98'),
(5, 'Bram', 'Tchaikovsky', '2018-09-16', '$61989.50');

Ensuite, vous pouvez fermer l’invite MySQL:

exit

Maintenant que vous avez un exemple de base de données chargé avec des données factices, vous pouvez passer à l’étape suivante, dans laquelle vous installerez pgLoader sur votre serveur PostgreSQL.

Étape 2 - Installation de pgLoader

pgLoader est un programme qui peut charger des données dans une base de données PostgreSQL à partir de différentes sources. Il utilise la commande + COPY +] de PostgreSQL pour copier des données d’une base de données ou d’un fichier - tel qu’un https: // en. wikipedia.org/wiki/Comma-separated_values[comma-separated valeurs (CSV)] fichier - dans une base de données PostgreSQL cible.

pgLoader est disponible à partir des référentiels Ubuntu APT par défaut et vous pouvez l’installer à l’aide de la commande + apt +. Cependant, dans ce guide, nous tirerons parti de l’option + useSSL + de pgLoader, une fonctionnalité qui permet les migrations à partir de MySQL via une connexion SSL. Cette fonctionnalité est uniquement disponible dans la dernière version de pgLoader qui, à ce jour, ne peut être installée qu’en utilisant le code source de son référentiel GitHub.

Avant d’installer pgLoader, vous devrez installer ses dépendances. Si vous ne l’avez pas fait récemment, mettez à jour * l’index des paquets de votre serveur Postgres:

sudo apt update

Ensuite, installez les packages suivants:

  • + sbcl +: Un compilateur Common Lisp

  • + unzip +: un archiveur pour les fichiers + .zip +

  • + libsqlite3-dev +: Une collection de fichiers de développement pour SQLite 3

  • + gawk +: abréviation de “GNU awk”, langage de balayage et de traitement de modèles

  • + curl +: Un outil en ligne de commande pour transférer des données à partir d’une URL

  • + make +: Un utilitaire de gestion de la compilation de paquets

  • + freetds-dev +: Une bibliothèque client pour les bases de données MS SQL et Sybase

  • + libzip-dev +: Une bibliothèque pour lire, créer et modifier des archives zip

Utilisez la commande suivante pour installer ces dépendances:

sudo apt install sbcl unzip libsqlite3-dev gawk curl make freetds-dev libzip-dev

Lorsque vous y êtes invité, confirmez que vous souhaitez installer ces packages en appuyant sur + ENTER.

Ensuite, accédez à la page Releases du projet pgLoader GitHub et recherchez la dernière version. Pour ce guide, nous utiliserons la dernière version au moment de la rédaction de cet article: version 3.6.1. Faites défiler jusqu’à son menu * Assets * et copiez le lien du fichier + tar.gz + intitulé * Code source *. Collez ensuite le lien dans la commande + wget + suivante. Cela téléchargera l’archive sur votre serveur:

wget

Extraire l’archive:

tar xvf

Cela créera un certain nombre de nouveaux répertoires et fichiers sur votre serveur. Naviguez dans le nouveau répertoire parent pgLoader:

cd pgloader-/

Puis utilisez l’utilitaire + make + pour compiler le binaire + pgloader +:

make pgloader

Cette commande prendra un certain temps pour construire le binaire + pgloader +.

Déplacez le fichier binaire dans le répertoire + / usr / local / bin, l’emplacement où Ubuntu recherche les fichiers exécutables:

sudo mv ./build/bin/pgloader /usr/local/bin/

Vous pouvez vérifier que pgLoader a été installé correctement en vérifiant sa version, comme suit:

pgloader --version
Outputpgloader version ""
compiled with SBCL 1.4.5.debian

pgLoader est maintenant installé, mais avant de pouvoir commencer votre migration, vous devrez apporter quelques modifications à la configuration de vos instances PostgreSQL et MySQL. Nous allons d’abord nous concentrer sur le serveur PostgreSQL.

Étape 3 - Création d’un rôle PostgreSQL et d’une base de données

La commande + pgloader + fonctionne en copiant les données source, soit d’un fichier, soit directement d’une base de données, et en les insérant dans une base de données PostgreSQL. Pour cette raison, vous devez soit exécuter pgLoader en tant qu’utilisateur Linux ayant accès à votre base de données Postgres, ou vous devez spécifier un rôle PostgreSQL avec les autorisations appropriées dans votre commande de chargement.

PostgreSQL gère les accès à la base de données en utilisant roles. Selon la configuration du rôle, il peut être considéré comme un utilisateur de base de données ou un groupe d’utilisateurs de base de données. Dans la plupart des SGBDR, vous créez un utilisateur avec la commande SQL + CREATE USER. Postgres, cependant, est installé avec un script pratique appelé + createuser +. Ce script sert de wrapper pour la commande SQL + CREATE USER + que vous pouvez exécuter directement à partir de la ligne de commande.

Exécutez la commande suivante sur votre serveur Postgres pour créer un nouveau rôle. Notez l’indicateur + -P +, qui indique + createuser + pour vous inviter à entrer un mot de passe pour le nouveau rôle:

sudo -u postgres createuser --interactive -P

Vous pouvez d’abord être invité à saisir votre mot de passe + sudo +. Le script vous invitera ensuite à entrer un nom pour le nouveau rôle. Dans ce guide, nous appellerons ce rôle * pgloader_pg *:

OutputEnter name of role to add:

Suite à cela, + createuser + vous invitera à entrer et à confirmer un mot de passe pour ce rôle. Veillez à prendre note de ce mot de passe, car vous en aurez besoin pour effectuer la migration à l’étape 5:

OutputEnter password for new role:
Enter it again:

Enfin, le script vous demandera si le nouveau rôle doit être classé en tant que superutilisateur. Dans PostgreSQL, la connexion à la base de données avec un rôle superutilisateur vous permet de contourner toutes les vérifications d’autorisations de la base de données, à l’exception du droit de vous connecter. Pour cette raison, le privilège de superutilisateur ne doit pas être utilisé à la légère et la PostgreSQL documentation recommande que vous fassiez fonctionner la plupart de vos bases de données de manière non -Rôle superutilisateur. Cependant, pgLoader ayant besoin de privilèges étendus pour accéder aux données et les charger dans des tables, vous pouvez octroyer en toute sécurité à ce nouveau rôle les privilèges de superutilisateur. Faites-le en tapant + y + puis en appuyant sur + ENTER:

Output. . .
Shall the new role be a superuser? (y/n)

PostgreSQL est livré avec un autre script utile qui vous permet de créer une base de données à partir de la ligne de commande. PgLoader ayant également besoin d’une base de données cible dans laquelle il peut charger les données source, exécutez la commande suivante pour en créer une. Nous nommerons cette base de données ++ mais n’hésitez pas à le modifier si vous aimez:

sudo -u postgres createdb

S’il n’y a pas d’erreur, cette commande se terminera sans aucune sortie.

Maintenant que vous avez un utilisateur PostgreSQL dédié et une base de données vide dans laquelle vous pouvez charger vos données MySQL, il ne vous reste plus que quelques modifications à apporter avant d’effectuer une migration. Vous devrez créer un utilisateur MySQL dédié ayant accès à votre base de données source et ajouter vos certificats côté client au magasin de certificats de confiance d’Ubuntu.

Étape 4 - Créer un utilisateur dédié dans MySQL et gérer les certificats

La protection des données contre snoopers est l’un des aspects les plus importants du travail de tout administrateur de base de données. La migration des données d’une machine à une autre offre aux acteurs malveillants l’occasion de sniff les paquets transitant par la connexion réseau s’ils ne sont pas cryptés. Dans cette étape, vous allez créer un utilisateur MySQL dédié que pgLoader utilisera pour effectuer la migration via une connexion SSL.

Commencez par ouvrir votre invite MySQL:

mysql -u root -p

Depuis l’invite MySQL, utilisez la commande + CREATE USER + suivante pour créer un nouvel utilisateur MySQL. Nous nommerons cet utilisateur * pgloader_my *. Etant donné que cet utilisateur n’accédera à MySQL qu’à partir de votre serveur PostgreSQL, veillez à remplacer «» par l’adresse IP publique de votre serveur PostgreSQL. En outre, remplacez `` par un mot de passe sécurisé ou une phrase secrète:

CREATE USER ''@'' IDENTIFIED BY '' REQUIRE SSL;

Notez la clause + REQUIRE SSL + à la fin de cette commande. Cela limitera l’utilisateur * pgloader_my * à accéder à la base de données uniquement via une connexion SSL sécurisée.

Ensuite, accordez à l’utilisateur * pgloader_my * l’accès à la base de données cible et à toutes ses tables. Ici, nous spécifierons la base de données que nous avons créée à l’étape 1 facultative, mais si vous souhaitez migrer votre propre base de données, utilisez son nom à la place de ++:

GRANT ALL ON .* TO ''@'';

Exécutez ensuite la commande + FLUSH PRIVILEGES + pour recharger les tables d’attribution, en activant les modifications de privilège:

FLUSH PRIVILEGES;

Après cela, vous pouvez fermer l’invite MySQL:

exit

Retournez maintenant sur votre terminal serveur Postgres et essayez de vous connecter au serveur MySQL en tant que nouvel utilisateur * pgloader_my *. Si vous avez suivi le guide des prérequis sur https://www.digitalocean.com/community/tutorials/how-to-configure-ssl-tls-for-mysql-on-ubuntu-18-04 de configuration de SSL / TLS pour MySQL] + mysql-client + sera déjà installé sur votre serveur PostgreSQL et vous devriez pouvoir vous connecter avec la commande suivante:

mysql -u  -p -h

Si la commande réussit, vous verrez l’invite MySQL:

Après avoir confirmé que votre utilisateur * pgloader_my * peut se connecter avec succès, continuez et fermez l’invite:

exit

À ce stade, vous avez un utilisateur MySQL dédié qui peut accéder à la base de données source à partir de votre machine Postgres. Cependant, si vous tentiez de migrer votre base de données MySQL en utilisant SSL, la tentative échouerait.

La raison en est que pgLoader n’est pas capable de lire les fichiers de configuration de MySQL et ne sait donc pas où chercher le certificat de l’autorité de certification ou le certificat client que vous avez copié sur votre serveur PostgreSQL dans les conditions préalables requises https: //www.digitalocean. .com / communauté / tutoriels / comment-configurer-ssl-tls-pour-mysql-on-ubuntu-18-04 [Guide de configuration SSL / TLS]. Plutôt que d’ignorer les exigences SSL, pgLoader nécessite l’utilisation de certificats de confiance dans les cas où SSL est nécessaire pour se connecter à MySQL. En conséquence, vous pouvez résoudre ce problème en ajoutant les fichiers + ca.pem + et + + client-cert.pem + `à https://help.ubuntu.com/lts/serverguide/certificates-and-security.html.en. [Magasin de certificats de confiance d’Ubuntu].

Pour ce faire, copiez les fichiers + ca.pem + et + client-cert.pem + dans le répertoire + / usr / local / share / ca-certificates / +. Notez que vous devez également renommer ces fichiers afin qu’ils portent l’extension + .crt +. Si vous ne les renommez pas, votre système ne pourra pas reconnaître que vous avez ajouté ces nouveaux certificats:

sudo cp ~/client-ssl/ca.pem /usr/local/share/ca-certificates/ca.pem.crt
sudo cp ~/client-ssl/client-cert.pem /usr/local/share/ca-certificates/client-cert.pem.crt

Ensuite, exécutez la commande + update-ca-certificates +. Ce programme recherche les certificats dans le répertoire + / usr / local / share / ca-certificates +, ajoute tous les nouveaux certificats au répertoire + / etc / ssl / certs / + et génère une liste de certificats SSL de confiance - + ca-certificates.crt + `- basé sur le contenu du répertoire + / etc / ssl / certs / + `:

sudo update-ca-certificates
OutputUpdating certificates in /etc/ssl/certs...
2 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.

Avec cela, vous êtes tous prêts à migrer votre base de données MySQL vers PostgreSQL.

Étape 5 - Migration des données

Maintenant que vous avez configuré l’accès à distance de votre serveur PostgreSQL à votre serveur MySQL, vous êtes prêt à commencer la migration.

pgLoader permet aux utilisateurs de migrer une base de données entière avec une seule commande. Pour une migration d’une base de données MySQL vers une base de données PostgreSQL sur un serveur séparé, la commande aurait la syntaxe suivante:

pgloader mysql://:@/?=&= postgresql://:@/?=&=

Cela inclut la commande + pgloader + et deux chaînes _connection_connection, la première pour la base de données source et la seconde pour la base de données cible. Ces deux chaînes de connexion commencent par déclarer le type de SGBD vers lequel pointe la chaîne de connexion, suivi du nom d’utilisateur et du mot de passe ayant accès à la base de données (séparés par un signe deux-points), de l’adresse d’hôte du serveur sur lequel la base de données est installée. nom de la base de données que pgLoader doit cibler et various options qui affectent le comportement de pgLoader.

À l’aide des paramètres définis précédemment dans ce didacticiel, vous pouvez migrer votre base de données MySQL à l’aide d’une commande présentant la structure suivante. Assurez-vous de remplacer les valeurs en surbrillance pour les aligner avec votre propre configuration:

pgloader mysql://:@/?useSSL=true postgresql://:@localhost/

Notez que cette commande inclut l’option + useSSL + dans la chaîne de connexion MySQL. En définissant cette option sur + true +, pgLoader se connectera à MySQL via SSL. Cela est nécessaire car vous avez configuré votre serveur MySQL pour n’accepter que les connexions sécurisées.

Si cette commande réussit, vous verrez un tableau de sortie décrivant le déroulement de la migration:

Output             table name     errors       rows      bytes      total time
-----------------------  ---------  ---------  ---------  --------------
       fetch meta data          0          2                     0.111s
        Create Schemas          0          0                     0.001s
      Create SQL Types          0          0                     0.005s
         Create tables          0          2                     0.017s
        Set Table OIDs          0          1                     0.010s
-----------------------  ---------  ---------  ---------  --------------
source_db.sample_table          0          5     0.2 kB          0.048s
-----------------------  ---------  ---------  ---------  --------------
COPY Threads Completion          0          4                     0.052s
Index Build Completion          0          1                     0.011s
        Create Indexes          0          1                     0.006s
       Reset Sequences          0          0                     0.014s
          Primary Keys          0          1                     0.001s
   Create Foreign Keys          0          0                     0.000s
       Create Triggers          0          0                     0.000s
      Install Comments          0          0                     0.000s
-----------------------  ---------  ---------  ---------  --------------
     Total import time          ✓          5     0.2 kB          0.084s

Pour vérifier que les données ont bien migré, ouvrez l’invite de PostgreSQL:

sudo -i -u postgres psql

À partir de là, connectez-vous à la base de données dans laquelle vous avez chargé les données:

\c

Exécutez ensuite la requête suivante pour vérifier si les données migrées sont stockées dans votre base de données PostgreSQL:

SELECT * FROM .;

Si les données ont bien été chargées correctement, vous verrez le tableau suivant dans la sortie de la requête:

Output employee_id | first_name |  last_name  | start_date |   salary
-------------+------------+-------------+------------+------------
          1 | Elizabeth  | Cotten      | 2007-11-11 | $105433.18
          2 | Yanka      | Dyagileva   | 2017-10-30 | $107540.67
          3 | Lee        | Dorsey      | 2013-06-04 | $118024.04
          4 | Kasey      | Chambers    | 2010-08-18 | $116456.98
          5 | Bram       | Tchaikovsky | 2018-09-16 | $61989.50
(5 rows)

Pour fermer l’invite Postgres, exécutez la commande suivante:

\q

Maintenant que nous avons expliqué comment migrer une base de données MySQL sur un réseau et le charger dans une base de données PostgreSQL, nous allons passer en revue quelques autres scénarios de migration courants dans lesquels pgLoader peut être utile.

Étape 6 - Explorer d’autres options de migration

pgLoader est un outil extrêmement flexible qui peut être utile dans une grande variété de situations. Ici, nous allons examiner rapidement quelques autres manières d’utiliser pgLoader pour migrer une base de données MySQL vers PostgreSQL.

Migration avec un fichier de chargement pgLoader

Dans le contexte de pgLoader, un load file ou command file est un fichier qui indique à pgLoader comment effectuer une migration. Ce fichier peut inclure des commandes et des options qui affectent le comportement de pgLoader, vous permettant de contrôler de manière beaucoup plus précise la façon dont vos données sont chargées dans PostgreSQL et vous permettant d’effectuer des migrations complexes.

pgLoader documentation fournit des instructions complètes sur la façon d’utiliser et d’étendre ces fichiers pour prendre en charge un certain nombre de types de migration. Nous allons donc travailler à travers un exemple relativement rudimentaire. Nous effectuerons la même migration que celle exécutée à l’étape 5, mais nous inclurons également une commande + ALTER SCHEMA + pour modifier le schéma de la base de données + new_db + de + source_db + à + ​​public +.

Pour commencer, créez un nouveau fichier de chargement sur le serveur Postgres en utilisant votre éditeur de texte préféré:

nano pgload_test.load

Ajoutez ensuite le contenu suivant en veillant à mettre à jour les valeurs en surbrillance pour les aligner sur votre propre configuration:

pgload_test.load

LOAD DATABASE
    FROM      mysql://:@/?useSSL=true
    INTO pgsql://:@localhost/

WITH include drop, create tables

ALTER SCHEMA 'source_db' RENAME TO 'public'
;

Voici ce que font chacune de ces clauses:

  • + LOAD DATABASE +: Cette ligne indique à pgLoader de charger les données à partir d’une base de données séparée, plutôt que d’un fichier ou d’un archivage de données.

  • + FROM +: Cette clause spécifie la base de données source. Dans ce cas, il pointe vers la chaîne de connexion de la base de données MySQL créée à l’adresse https://www.digitalocean.com/community/tutorials/how-to-migrate-mysql-database-to-postgres-using-pgloader#step. -1-% E2% 80% 94- (facultatif) -créer un exemple de base de données-et-une-table-dans-mysql [Étape 1].

  • + INTO +: De même, cette ligne spécifie la base de données PostgreSQL dans laquelle pgLoader doit charger les données.

  • + WITH +: Cette clause vous permet de définir des comportements spécifiques pour pgLoader. Vous pouvez trouver la liste complète des options + WITH + compatibles avec les migrations MySQL https://pgloader.readthedocs.io/en/latest/ref/mysql.html#mysql-database-migration-options-withhrhere] . Dans cet exemple, nous n’incluons que deux options:

  • + include drop +: lorsque cette option est utilisée, pgLoader supprime toutes les tables de la base de données PostgreSQL cible qui apparaissent également dans la base de données MySQL source. Si vous utilisez cette option lors de la migration de données vers une base de données PostgreSQL existante, vous devez sauvegarder la base de données entière pour éviter de perdre des données.

  • + create tables +: Cette option indique à pgLoader de créer de nouvelles tables dans la base de données PostgreSQL cible en fonction des métadonnées contenues dans la base de données MySQL. Si l’option opposée, + create no tables +, est utilisée, les tables cible doivent déjà exister dans la base de données Postgres cible avant la migration.

  • + ALTER SCHEMA: Après la clause` + WITH`, vous pouvez ajouter des commandes SQL spécifiques comme celle-ci pour indiquer à pgLoader d’effectuer des actions supplémentaires. Ici, nous demandons à pgLoader de changer le schéma de la nouvelle base de données Postgres de + source_db + en + public +, mais seulement après avoir créé le schéma. Notez que vous pouvez également imbriquer de telles commandes dans d’autres clauses, telles que + BEFORE LOAD DO + - pour indiquer à pgLoader d’exécuter ces commandes à des points spécifiques du processus de migration.

Ceci est un exemple démonstratif de ce que vous pouvez inclure dans un fichier de chargement pour modifier le comportement de pgLoader. La liste complète des clauses que l’on peut ajouter à un fichier de chargement et ce qu’elles font peuvent être trouvées dans https://pgloader.readthedocs.io/en/latest/pgloader.html#common- clauses de la documentation officielle de pgLoader].

Enregistrez et fermez le fichier de chargement une fois que vous avez ajouté ce contenu. Pour l’utiliser, incluez le nom du fichier en tant qu’argument de la commande + pgloader +:

pgloader pgload_test.load

Pour vérifier que la migration a réussi, ouvrez l’invite Postgres:

sudo -u postgres psql

Puis connectez-vous à la base de données:

\c

Et lancez la requête suivante:

SELECT * FROM sample_table;
Output employee_id | first_name |  last_name  | start_date |   salary
-------------+------------+-------------+------------+------------
          1 | Elizabeth  | Cotten      | 2007-11-11 | $105433.18
          2 | Yanka      | Dyagileva   | 2017-10-30 | $107540.67
          3 | Lee        | Dorsey      | 2013-06-04 | $118024.04
          4 | Kasey      | Chambers    | 2010-08-18 | $116456.98
          5 | Bram       | Tchaikovsky | 2018-09-16 | $61989.50
(5 rows)

Cette sortie confirme que pgLoader a migré les données avec succès et que la commande + ALTER SCHEMA + que nous avons ajoutée au fichier de chargement a fonctionné comme prévu, car nous n’avions pas besoin de spécifier le schéma + source_db + dans la requête pour afficher le Les données.

Notez que si vous envisagez d’utiliser un fichier de chargement pour migrer les données d’une base de données vers une autre située sur un ordinateur distinct, vous devrez tout de même ajuster les règles de réseau et de pare-feu appropriées pour que la migration aboutisse.

Migration d’une base de données MySQL vers PostgreSQL localement

Vous pouvez utiliser pgLoader pour migrer une base de données MySQL vers une base de données PostgreSQL hébergée sur le même ordinateur. Tout ce dont vous avez besoin est d’exécuter la commande de migration à partir d’un profil utilisateur Linux avec un accès à l’utilisateur * root * MySQL:

pgloader mysql://root@localhost/ pgsql://:@localhost/

Effectuer une telle migration locale signifie que vous n’aurez à modifier ni la configuration réseau par défaut de MySQL ni les règles de pare-feu de votre système.

Migrer à partir d’un fichier CSV

Vous pouvez également charger une base de données PostgreSQL avec les données d’un fichier CSV.

En supposant que vous disposiez d’un fichier CSV de données nommé + load.csv +, la commande permettant de le charger dans une base de données Postgres pourrait ressembler à ceci:

pgloader load.csv pgsql://:@localhost/

Comme le format CSV n’est pas complètement normalisé, vous risquez de rencontrer des problèmes lors du chargement direct de données à partir d’un fichier CSV de cette manière. Heureusement, vous pouvez corriger les irrégularités en incluant diverses options avec les options de ligne de commande pgLoader ou en les spécifiant dans un fichier de chargement. Voir la documentation de pgLoader sur le sujet pour plus de détails.

Migration vers une base de données PostgreSQL gérée

Il est également possible d’effectuer une migration d’une base de données auto-gérée vers une base de données PostgreSQL gérée. Pour illustrer l’apparence de ce type de migration, nous utiliserons le serveur MySQL et une base de données PostgreSQL gérée DigitalOcean. Nous utiliserons également l’exemple de base de données créé à l’adresse https://www.digitalocean.com/community/tutorials/how-to-migrate-mysql-database-to-postgres-using-pgloader#step-1-%E2% 80% 94- (facultatif) -creating-a-sample-database-and-table-in-mysql [Étape 1], mais si vous avez ignoré cette étape et que vous souhaitez migrer votre propre base de données, vous pouvez pointer sur celui-là à la place.

Pour cette migration, nous n’aurons pas besoin de l’option + useSSL + de pgLoader, car elle ne fonctionne qu’avec les bases de données MySQL distantes et nous exécuterons cette migration à partir d’une base de données MySQL locale. Cependant, nous utiliserons l’option + sslmode = require + lorsque nous chargerons et nous connecterons à la base de données DigitalOcean Managed PostgreSQL, ce qui garantira que vos données resteront protégées.

Etant donné que nous n’utilisons pas + useSSL + cette fois-ci, vous pouvez utiliser + apt + pour installer pgLoader avec le paquetage + postgresql-client +, ce qui vous permettra d’accéder à la base de données gérée PostgreSQL depuis votre serveur MySQL. :

sudo apt install pgloader postgresql-client

Ensuite, vous pouvez exécuter la commande + pgloader + pour migrer la base de données. Pour ce faire, vous aurez besoin de la chaîne de connexion pour la base de données gérée.

Pour les bases de données gérées DigitalOcean, vous pouvez copier la chaîne de connexion à partir du panneau de configuration du cloud. Tout d’abord, cliquez sur * Bases de données * dans le menu de gauche et sélectionnez la base de données vers laquelle vous souhaitez migrer les données. Ensuite, faites défiler jusqu’à la section * Détails de la connexion *. Cliquez sur le menu déroulant et sélectionnez * Chaîne de connexion *. Cliquez ensuite sur le bouton * Copier * pour copier la chaîne dans votre presse-papiers et collez-la dans la commande de migration suivante, en remplaçant l’exemple de chaîne de connexion PostgreSQL présentée ici. Cela va migrer votre base de données MySQL dans la base de données PostgreSQL + defaultdb + en tant que rôle * doadmin * PostgreSQL:

pgloader mysql://root:@localhost/ postgres://doadmin:@/defaultdb?sslmode=require

Ensuite, vous pouvez utiliser la même chaîne de connexion comme argument de + psql + pour vous connecter à la base de données PostgreSQL gérée ethttps: // http: //www.digitalocean.com/community/tutorials/how-to-migrate-mysql -database-to-postgres-using-pgloader # step-1-% E2% 80% 94 - (facultatif) -créer un exemple de base de données et table en mysql [www.digitalocean.com/community/ tutoriels / comment-migrer-base-de-données-vers-postgres-using-pgloader # step-1-% E2% 80% 94- (facultatif) -créer-une-base-de-données-et-table-dans-mysql ] confirme que la migration a réussi:

psql postgres://doadmin:@/defaultdb?sslmode=require

Ensuite, exécutez la requête suivante pour vérifier que pgLoader a correctement migré les données:

SELECT * FROM source_db.sample_table;
Output employee_id | first_name |  last_name  | start_date |   salary
-------------+------------+-------------+------------+------------
          1 | Elizabeth  | Cotten      | 2007-11-11 | $105433.18
          2 | Yanka      | Dyagileva   | 2017-10-30 | $107540.67
          3 | Lee        | Dorsey      | 2013-06-04 | $118024.04
          4 | Kasey      | Chambers    | 2010-08-18 | $116456.98
          5 | Bram       | Tchaikovsky | 2018-09-16 | $61989.50
(5 rows)

Cela confirme que pgLoader a migré avec succès votre base de données MySQL vers votre instance gérée PostgreSQL.

Conclusion

pgLoader est un outil flexible qui peut effectuer une migration de base de données en une seule commande. Avec quelques ajustements de configuration, il peut migrer une base de données entière d’une machine physique à une autre en utilisant une connexion sécurisée SSL / TLS. Nous espérons qu’en suivant ce didacticiel, vous aurez une meilleure compréhension des capacités de pgLoader et de ses cas d’utilisation potentiels.

Après avoir migré vos données vers PostgreSQL, les didacticiels suivants pourraient vous intéresser: