DéveloppeurWeb.Com
    DéveloppeurWeb.Com
    • Agile Zone
    • AI Zone
    • Cloud Zone
    • Database Zone
    • DevOps Zone
    • Integration Zone
    • Web Dev Zone
    DéveloppeurWeb.Com
    Home»Uncategorized»Migration de MySQL vers YugabyteDB à l’aide de YugabyteDB Voyager
    Uncategorized

    Migration de MySQL vers YugabyteDB à l’aide de YugabyteDB Voyager

    février 15, 2023
    Migration de MySQL vers YugabyteDB à l'aide de YugabyteDB Voyager
    Share
    Facebook Twitter Pinterest Reddit WhatsApp Email

    Dans cet article, je vais vous montrer comment vous pouvez migrer une application Web complète de MySQL vers YugabyteDB à l’aide du moteur de migration de données open source YugabyteDB Voyager.

    De nos jours, de nombreuses personnes migrent leurs applications de bases de données relationnelles traditionnelles à serveur unique vers des clusters de bases de données distribuées. Cela permet d’améliorer la disponibilité, l’évolutivité et les performances.

    La migration vers YugabyteDB permet aux ingénieurs d’utiliser une interface SQL familière, tout en bénéficiant des caractéristiques de résilience des données et de performances des bases de données distribuées.

    YugaSocial Application

    J’ai développé une application appelée YugaSocial, conçue pour fonctionner sur MySQL.

    L’application YugaSocial est un clone de Facebook avec la possibilité de publier des messages, de suivre des utilisateurs, de commenter des messages, et plus encore !

    YugaRéseaux sociaux

    Commençons par déployer et connecter une base de données Google Cloud SQL exécutant MySQL. Plus tard, nous migrerons nos données vers un cluster managé YugabyteDB multi-nœuds.

    Premiers pas avec MySQL

    Nous pourrions exécuter MySQL sur nos machines en utilisant une installation locale ou dans Docker, mais je vais montrer comment migrer une base de données hébergée sur Google Cloud Platform (GCP) vers YugabyteDB Managed.

    Configurer Google Cloud SQL

    J’ai déployé une instance MySQL sur Google Cloud SQL nommée yugasocial et définir mon adresse IP publique sur la liste des réseaux autorisés afin que je puisse me connecter directement depuis ma machine.

    Bien que bénéfique à des fins de démonstration, je vous recommande de vous connecter en toute sécurité à l’intérieur d’un VPC, avec des certificats SSL pour sécuriser correctement vos transferts de données.

    Google Cloud SQL

    Connexion de YugaSocial à MySQL dans Node.js

    La connexion à notre instance MySQL dans le cloud est facile avec le pilote MySQL pour Node.js.

    Voici un extrait de code d’application qui se connecte à l’instance MySQL :

    // connect.js
    ...
    import mysql from "mysql";
    if (process.env.DB_TYPE === "mysql") {
     const pool = mysql.createPool({
       host: process.env.DB_HOST,
       port: process.env.DB_PORT,
       user: process.env.DB_USER,
       password: process.env.DB_PASSWORD,
       database: process.env.DB_NAME,
       connectionLimit: 100
     });
    }

    J’ai créé un pool de connexions avec jusqu’à 100 connexions établies. En définissant des variables d’environnement avec notre configuration d’instance Google Cloud SQL et en exécutant l’application, nous pouvons confirmer que notre base de données a été correctement configurée :

    > DB_TYPE=mysql DB_USER=admin DB_HOST=[HOST] DB_HOST=[PASSWORD] node index.js
    Connection to MySQL verified.
    Server running on port 8800.

    Après avoir vérifié notre base de données MySQL exécutée dans le cloud, nous pouvons commencer la migration vers YugabyteDB Managed.

    Configuration de YugabyteDB géré

    Il faut moins de cinq minutes pour démarrer avec YugabyteDB Managed. Commencez par créer un compte, puis suivez les étapes pour créer un cluster YugabyteDB.

    J’ai choisi de déployer un cluster à trois nœuds sur GCP, dans la région us-west-1. Cette configuration fournira une tolérance aux pannes dans les zones de disponibilité.

    Créer un cluster

    Ajoutez votre adresse IP à la liste d’autorisation du cluster afin de pouvoir vous connecter depuis votre ordinateur à la base de données distante et télécharger les informations d’identification de la base de données avant de créer votre cluster.

    Une fois notre cluster déployé, nous sommes prêts à commencer la migration avec YugabyteDB Voyager.

    Migrer vers YugabyteDB

    Après avoir vérifié notre déploiement MySQL, il est temps de migrer de Cloud SQL vers YugabyteDB à l’aide de la CLI YugabyteDB Voyager.

    YugabyteDB Voyager est un puissant moteur de migration de données open source, qui gère l’intégralité du cycle de vie de la migration des données.

    Après avoir installé YugabyteDB Voyager, nous allons commencer par créer des utilisateurs dans nos bases de données source et cible, et leur attribuer des rôles.

    J’ai choisi d’utiliser le mysqlsh utilitaire de ligne de commande pour se connecter à mon instance cloud, mais Google propose plusieurs options de connexion.

    1. Créez le ybvoyager utilisateur dans Cloud SQL et accordez les autorisations :

    > mysqlsh root@CLOUD_SQL_HOST --password='CLOUD_SQL_PASSWORD'
    > \sql
    SQL=> \connect social
    SQL=> CREATE USER 'ybvoyager'@'CLOUD_SQL_HOST' IDENTIFIED WITH  mysql_native_password BY 'Password#123';
    SQL=> GRANT PROCESS ON *.* TO 'ybvoyager'@'CLOUD_SQL_HOST';
    SQL=> GRANT SELECT ON source_db_name.* TO 'ybvoyager'@'CLOUD_SQL_HOST';
    SQL=> GRANT SHOW VIEW ON source_db_name.* TO 'ybvoyager'@'CLOUD_SQL_HOST';
    SQL=> GRANT TRIGGER ON source_db_name.* TO 'ybvoyager'@'CLOUD_SQL_HOST';
    SQL=> GRANT SHOW_ROUTINE  ON *.* TO 'ybvoyager'@'CLOUD_SQL_HOST';

    2. Répétez ce processus à l’aide de YugabyteDB Managed Cloud Shell :

    // Optionally, you can create a database for import. Otherwise, the target database will default to 'yugabyte'.
    yugabyte=> CREATE DATABASE social;
    yugabyte=> CREATE USER ybvoyager PASSWORD 'password';
    yugabyte=> GRANT yb_superuser TO ybvoyager;

    Désormais, nos bases de données source et cible sont équipées pour utiliser Voyager. Pour exporter depuis Cloud SQL, nous devons d’abord créer un répertoire d’exportation et une variable d’environnement associée :

    > mkdir ~/export-dir
    > export EXPORT_DIR=$HOME/export-dir

    Ce répertoire servira d’intermédiaire entre nos bases de données source et cible. Il hébergera des fichiers de schéma et de données, ainsi que des journaux, des métadonnées et des rapports d’analyse de schéma.

    Commençons la migration de notre base de données.

    1. Exportez le schéma depuis Google Cloud SQL :

    > yb-voyager export schema --export-dir ~/export-dir \     
       --source-db-type mysql \
       --source-db-host CLOUD_SQL_HOST \
       --source-db-user root \
       --source-db-password 'CLOUD_SQL_PASSWORD' \
       --source-db-name social
    
    export of schema for source type as 'mysql'
    mysql version: 8.0.26-google
    exporting      TABLE            done
    exporting  PARTITION            done
    exporting       VIEW            done
    exporting    TRIGGER            done
    exporting   FUNCTION            done
    exporting  PROCEDURE            done
    
    Exported schema files created under directory: /export-dir/schema

    2. Analysez le schéma exporté :

    > yb-voyager analyze-schema --export-dir ~/export-dir --output-format txt
    -- find schema analysis report at: /export-dir/reports/report.txt

    En analysant notre schéma avant d’exporter les données, nous avons la possibilité d’apporter les modifications nécessaires à nos déclarations DDL. Le rapport d’analyse de schéma signalera toutes les instructions nécessitant une intervention manuelle.

    Dans le cas de YugaSocial, Voyager a migré le schéma MySQL vers PostgreSQL DDL sans avoir besoin de modifications manuelles.

    3. Enfin, exportez les données depuis Google Cloud SQL :

    > yb-voyager export data --export-dir ~/export-dir \     
       --source-db-type mysql \
       --source-db-host CLOUD_SQL_HOST \
       --source-db-user root \
       --source-db-password 'CLOUD_SQL_PASSWORD' \
       --source-db-name social
    
    export of data for source type as 'mysql'
    Num tables to export: 6
    table list for data export: [comments likes posts relationships stories users]
    calculating approx num of rows to export for each table...
    Initiating data export.
    Data export started.
    Exported tables:- {comments,  likes,  posts,  relationships,  stories,  users}
    TABLE            ROW COUNT
    comments         1000     
    likes            502      
    posts            1000     
    relationships    1002     
    stories          1000     
    users            1004     
    Export of data complete ✅

    Après avoir exporté avec succès notre schéma et nos données, nous sommes prêts à déplacer notre base de données vers YugabyteDB Managed.

    1. Importez le schéma dans YugabyteDB Managed :

    > yb-voyager import schema --export-dir ~/export-dir \
       --target-db-host YUGABYTEDB_MANAGED_HOST \
       --target-db-user admin \
       --target-db-password YUGABYTEDB_MANAGED_PASSWORD \
       --target-db-name yugabyte
    
    schemas to be present in target database "yugabyte": [public]
    creating schema 'public' in target database...
    do you really want to import into 'public' schema? [Y/N]: y
    table.sql: CREATE TABLE comments (  id bigserial,   description varchar(200) NOT NULL,  crea ...
    table.sql: ALTER SEQUENCE comments_id_seq RESTART WITH 1;
    table.sql: ALTER TABLE comments ADD UNIQUE (id);
    table.sql: CREATE TABLE likes (     id bigserial,   userid bigint NOT NULL,     postid bigint NOT  ...
    table.sql: ALTER SEQUENCE likes_id_seq RESTART WITH 1;
    table.sql: ALTER TABLE likes ADD UNIQUE (id);
    table.sql: CREATE TABLE posts (     id bigserial,   description varchar(200),   img varchar(200) ...
    ...

    Comme vous pouvez le voir sur la sortie du terminal, j’ai choisi d’importer dans le public schéma. Si vous souhaitez utiliser un schéma différent, vous pouvez le faire en utilisant le --target-db-schema option.

    2. Importez les données dans YugabyteDB Managed :

    > yb-voyager import data --export-dir ~/export-dir \
       --target-db-host YUGABYTEDB_MANAGED_HOST \
       --target-db-user admin \
       --target-db-password YUGABYTEDB_MANAGED_PASSWORD \
       --target-db-name yugabyte
    
    import of data in "yugabyte" database started
    Using 2 parallel jobs by default. Use --parallel-jobs to specify a custom value
    skipping already imported tables: []
    Preparing to import the tables: [comments likes posts relationships stories users]
    All the tables are imported
    setting resume value for sequences 

    YugabyteDB Voyager gère cette importation de données avec parallélisme, ce qui en fait un travail rapide.

    3. Pour conclure, importez les index et les déclencheurs :

    > yb-voyager import schema --export-dir ~/export-dir \
       --target-db-host YUGABYTEDB_MANAGED_HOST \
       --target-db-user admin \
       --target-db-password YUGABYTEDB_MANAGED_PASSWORD \
       --target-db-name yugabyte
       --post-import-data
    
    INDEXES_table.sql: CREATE INDEX comments_postid ON comments (postid);
    INDEXES_table.sql: CREATE INDEX comments_userid ON comments (userid);
    INDEXES_table.sql: CREATE INDEX likes_postid ON likes (postid);
    ...

    Il est temps de vérifier que notre base de données a bien été migrée vers YugabyteDB Managed, en reconfigurant notre application YugaSocial.

    Connexion de YugaSocial à YugabyteDB géré dans Node.js

    Comme mentionné, YugaSocial a été développé pour…

    Share. Facebook Twitter Pinterest LinkedIn WhatsApp Reddit Email
    Add A Comment

    Leave A Reply Cancel Reply

    Catégories

    • Politique de cookies
    • Politique de confidentialité
    • CONTACT
    • Politique du DMCA
    • CONDITIONS D’UTILISATION
    • Avertissement
    © 2023 DéveloppeurWeb.Com.

    Type above and press Enter to search. Press Esc to cancel.