Note :

Migrer MySQL Database sur place vers une instance gérée par Oracle HeatWave MySQL à l'aide d'OCI GoldenGate

Présentation

Oracle Cloud Infrastructure GoldenGate (OCI GoldenGate) est un service entièrement géré qui aide les ingénieurs de données à déplacer des données en temps réel, à grande échelle, d'un ou plusieurs systèmes de gestion de données vers des bases de données OCI. Concevez, exécutez, orchestrez et surveillez des tâches de réplication de données sans avoir à allouer ni à gérer des environnements de calcul. OCI GoldenGate prend en charge plusieurs sources et cibles, notamment MySQL et le service de base de données Oracle HeatWave MySQL.

Dans ce tutoriel, nous vous guiderons vers la migration d'une base de données MySQL sur place vers une instance gérée par Oracle HeatWave MySQL à l'aide d'OCI GoldenGate.

Objectifs

Préalables

Limitations

Tâche 1 : Créer des instances MySQL sources et cibles

Tâche 2 : Tester les connexions entre les instances MySQL d'hôte bastion, sur place et Oracle Heatwave

  1. Installez le client MySQL et l'utilitaire d'interpréteur de commandes MySQL sur l'hôte bastion OCI.

  2. Tester la connexion de l'hôte bastion OCI à l'instance MySQL sur place source.

    [root@bastion ~]#  mysql --host <sourceIP> -uadmin -p
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 15
    Server version: 5.7.44 MySQL Community Server (GPL)
    
    Copyright (c) 2000, 2025, Oracle and/or its affiliates.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    4 rows in set (0.00 sec)
    
    mysql> select @@version;
    +-----------+
    | @@version |
    +-----------+
    | 5.7.44    |
    +-----------+
    1 row in set (0.00 sec)
    
  3. Tester la connexion de l'instance sur place MySQL source à l'instance gérée Oracle Heatwave MySQL.

    [root@mysqlci57 ~]# mysql --host <targetIP> -u admin -p
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 108
    Server version: 8.4.4-u5-cloud MySQL Enterprise - Cloud
    
    Copyright (c) 2000, 2023, Oracle and/or its affiliates.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> select @@version;
    +----------------+
    | @@version      |
    +----------------+
    | 8.4.4-u5-cloud |
    +----------------+
    1 row in set (0.01 sec)
    

Tâche 3 : Créer des utilisateurs pour OCI GoldenGate

Tâche 4 : Définir les paramètres obligatoires dans la base de données source pour OCI GoldenGate

Il n'est pas obligatoire d'activer le GTID sur la source si la cible est autonome (et non HA). Mais si la cible est HA, il est fortement recommandé d'activer le GTID sur la source. Il est obligatoire d'activer le mode binlog.

  1. Modifiez le fichier /etc/my.cnf et ajoutez les lignes suivantes.

    server-id=1
    log-bin=/var/log/mysql/mysql-bin.log
    max_binlog_size=100M
    binlog_format=ROW
    expire_logs_days=10
    -- binlog_row_metadata=FULL <-- this is not supported in Version 5.7.44. So DDL replication will not be possible if source is on v5.7.44.
    gtid_mode=ON
    enforce_gtid_consistency=ON
    
  2. Redémarrez le serveur MySQL.

    Systemctl stop mysqld
    Systemctl start mysqld
    Systemctl status mysqld
    

    Pour obtenir la liste ou les paramètres complets, vérifiez les paramètres et les exigences du journal des transactions. Pour plus d'informations, voir Option B : Utiliser votre propre hôte bastion sur le service de calcul pour OCI.

  3. Exécutez la commande suivante pour vérifier que les journaux binaires sont activés maintenant.

    mysql> show binary logs;
    +------------------+-----------+
    | Log_name         | File_size |
    +------------------+-----------+
    | mysql-bin.000001 |       154 |
    +------------------+-----------+
    1 row in set (0.00 sec)
    
    mysql> show variables like 'bin%';
    +--------------------------------------------+--------------+
    | Variable_name                              | Value        |
    +--------------------------------------------+--------------+
    | bind_address                               | *            |
    | binlog_cache_size                          | 32768        |
    | binlog_checksum                            | CRC32        |
    | binlog_direct_non_transactional_updates    | OFF          |
    | binlog_error_action                        | ABORT_SERVER |
    | binlog_format                              | ROW          |
    | binlog_group_commit_sync_delay             | 0            |
    | binlog_group_commit_sync_no_delay_count    | 0            |
    | binlog_gtid_simple_recovery                | ON           |
    | binlog_max_flush_queue_time                | 0            |
    | binlog_order_commits                       | ON           |
    | binlog_row_image                           | FULL         |
    | binlog_rows_query_log_events               | OFF          |
    | binlog_stmt_cache_size                     | 32768        |
    | binlog_transaction_dependency_history_size | 25000        |
    | binlog_transaction_dependency_tracking     | COMMIT_ORDER |
    +--------------------------------------------+--------------+
    16 rows in set (0.01 sec)
    
  4. Exécutez la commande suivante pour vérifier que le mode GTID (gtid_mode) est activé.

    mysql> show variables like 'gtid%';
    +----------------------------------+-----------+
    | Variable_name                    | Value     |
    +----------------------------------+-----------+
    | gtid_executed_compression_period | 1000      |
    | gtid_mode                        | ON        |   <--- it is now showing ON
    | gtid_next                        | AUTOMATIC |
    | gtid_owned                       |           |
    | gtid_purged                      |           |
    +----------------------------------+-----------+
    5 rows in set (0.00 sec)
    
    mysql> select @@gtid_executed, @@gtid_purged\G
    *************************** 1. row ***************************
    @@gtid_executed:
      @@gtid_purged:
    1 row in set, 1 warning (0.00 sec)
    
    mysql> select * from mysql.gtid_executed;
    Empty set (0.00 sec)   <--- this is empty because we just turned it ON. As transactions occur this will get populated
    

Note : Il est courant que la première interrogation affiche des valeurs NULL pour GTID. En effet, dans MySQL versions 5.7, la valeur GTID est stockée uniquement dans la table mysql.gtid_executed.

Tâche 5 : Créer le schéma airportdb (métadonnées uniquement) dans la base de données cible

  1. Extraire les métadonnées du schéma de la base de données source.

    [root@bastion airport-db]# mysqldump --host <SourceIP> -u admin -p --no-data --routines --events airportdb > airportdb.sql
    mysqldump: [Warning] Using a password on the command line interface can be insecure.
    -- Warning: column statistics not supported by the server.
    
  2. Importez les métadonnées de schéma dans la base de données cible.

    [root@bastion opc]#  mysql --host <TargetIP> -u admin -p
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 581
    Server version: 8.4.4-u5-cloud MySQL Enterprise - Cloud
    
    Copyright (c) 2000, 2025, Oracle and/or its affiliates.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> create database airportdb;
    Query OK, 1 row affected (0.01 sec)
    
    mysql> use airportdb;
    Database changed
    mysql> source airportdb.sql
    

Tâche 6 : Configurer le déploiement OCI GoldenGate et ajouter des connexions

Il existe plusieurs blogues et tutoriels sur la configuration des déploiements OCI GoldenGate. Voici quelques étapes à suivre.

  1. Connectez-vous à la console OCI et sélectionnez Déploiements GoldenGate.

  2. Cliquez sur Créer un déploiement et entrez les informations requises, comme illustré dans l'image suivante.

    Image montrant comment créer un déploiement Golden Gate

  3. Ajoutez les détails de connexion source et cible dans la page Créer un déploiement.

    Image montrant comment créer une connexion Golden Gate pour la source

    Image montrant comment créer une connexion Golden Gate pour la cible

    Image présentant les deux connexions ajoutées dans GG

  4. Affectez les connexions au déploiement OCI GoldenGate. Cliquez sur le nom de la connexion, puis sur Affecter un déploiement.

    Image montrant comment affecter un déploiement à une connexion

    Image présentant la connexion source affectée au déploiement

    Image présentant la connexion cible affectée au déploiement

  5. À l'aide du service d'hôte bastion OCI, configurez le transfert de port vers le port 443, puis connectez-vous à la console OCI GoldenGate.

    Image montrant l'URL de la page d'accueil Goldengate

  6. Validez les connexions à la base de données à partir de la console OCI GoldenGate.

    1. Cliquez sur le menu hamburger et vous verrez les deux connexions ajoutées au déploiement dans la tâche 6.4.

    2. Cliquez sur Connexion pour valider les connexions. Si les connexions sont réussies, vous verrez l'option permettant de créer une table de points de vérification en cliquant sur Point de vérification +.

      Il est fortement recommandé d'ajouter les connexions à l'aide du déploiement OCI GoldenGate dans OCI, car il ajoutera automatiquement le DNS aux adresses IP, sans ces DNS, les connexions de test échoueront.

      Image présentant les connexions Goldengate et les connexions de test

Tâche 7 : Créer des processus d'extraction et de réplication

  1. Avant de créer le processus d'extraction, assurez-vous que gtid_mode est ON dans la base de données source, en particulier si la cible est haute disponibilité.

    Il existe deux méthodes pour ajouter une extraction :

    • Méthode 1 : Vous pouvez ajouter une extraction une fois le chargement initial (copie ou instance de vidage) terminé et utiliser une méthode d'instanciation précise. Pour plus d'informations, voir Instanciation précise entre MySQL et MySQL à l'aide des utilitaires d'interpréteur de commandes MySQL et d'Oracle GoldenGate.

      Pour ajouter l'extraction et la démarrer pour effectuer la saisie de données à partir de ce GTID ou fichier binaire particulier, comme illustré dans l'image suivante. Oracle recommande d'utiliser cette méthode.

      Image montrant la configuration de l'extraction Goldengate

      Note : Ici, le jeu GTID est extrait du fichier JSON des commandes dumpInstance ou de la sortie des commandes copyInstance.

    • Méthode 2 : Vous pouvez ajouter le processus d'extraction au tout début avant même de commencer le chargement initial des données, puis modifier ultérieurement le processus de réplication pour qu'il commence par une position gtidexecuted/binlog# et binlog particulière affichées dans le fichier JSON du fichier dumpInstance() ou de la sortie de copyInstance().

      Utilisez le paramètre HANDLECOLLISION avec cette méthode pour éviter tout problème de données en double.

      Note : Pour cette démonstration de faisabilité, la méthode 2 a été utilisée.

      Modifiez le fichier de paramètres d'extraction :

      EXTRACT ext1
      USERIDALIAS  MySQLCI57, DOMAIN OracleGoldenGate
      EXTTRAIL e1
      --DDL INCLUDE MAPPED  (needed for DDL replication, also need to set  binlog_row_metadata to FULL in mysql config file on source db). But not supported for MySQL V5.7
      TRANLOGOPTIONS FETCHPARTIALJSON       (for JSON replication, also need to set binlog_row_value_options to empty string in the mysql config)
      TABLE airportdb.*;
      

      Note : Si vous ajoutez DDL INCLUDE MAPPED au fichier de paramètres d'extraction, vous obtiendrez un message d'erreur indiquant que la réplication LDD n'est pas prise en charge pour MySQL version 5.7.4.

  2. Démarrez le processus Extract.

    Image montrant l'exécution de l'extraction Goldengate

  3. L'extraction est en cours d'exécution et génère le fichier trace. Créez maintenant le processus de réplication.

    1. Créez d'abord une table de points de reprise. Allez à la section Configuration, sélectionnez la base de données cible et cliquez sur Point de vérification + pour créer une table de points de vérification.

      Image montrant la création de la table de points de vérification Goldengate

    2. création du traitement de réplication; Comme il s'agit d'une réplication unidirectionnelle, nous pouvons utiliser le processus Replicat parallèle pour de meilleures performances. Pour la réplication bidirectionnelle, seule la réplication classique est prise en charge.

      Ne démarrez pas le processus Replicat, créez-le simplement. Nous le lancerons une fois les données importées.

      Image montrant la création de la réplication Goldengate

    3. Modifiez le fichier de paramètres. Vous pouvez également ajouter des paramètres PARALLEL ou utiliser le parallélisme par défaut.

      REPLICAT rep1
      USERIDALIAS  MySQLGG1, DOMAIN OracleGoldenGate
      MAP airportdb.*, TARGET airportdb.*;
      

Tâche 8 : Copier les données de la source vers la cible à l'aide de copyInstance()

  1. Effectuez une exécution à sec à l'aide de l'option dryRun:"true" de copyInstance().

    Type '\help' or '\?' for help; '\quit' to exit.
    MySQL  SQL > \connect admin@<Source IP>
    Creating a session to 'admin@<Source IP>'
    Fetching global names for auto-completion... Press ^C to stop.
    Your MySQL connection id is 37
    Server version: 5.7.44-log MySQL Community Server (GPL)
    No default schema selected; type \use <schema> to set one.
     MySQL  <Source IP>:3306 ssl  SQL > \js
    Switching to JavaScript mode...
     MySQL  <Source IP>:3306 ssl  JS > util.copyInstance('mysql://admin@<Target IP>', {"compatibility":["skip_invalid_accounts","strip_definers","strip_restricted_grants","strip_tablespaces","ignore_wildcard_grants","strip_invalid_grants","create_invisible_pks"], users:"true", threads:2, dryRun:"true"});
    Please provide the password for 'admin@<target IP': *******************
    Save password for 'admin@<target IP>'? [Y]es/[N]o/Ne[v]er (default No):
    
  2. S'il n'y a aucune erreur, supprimez l'option dryRun et réexécutez pour effectuer le chargement des données. La sortie finale doit se présenter comme suit : Aucune erreur signalée.

    SRC: Starting data dump
    100% (59.50M rows / ~59.36M rows), 142.25K rows/s, 9.68 MB/s
    SRC: Dump duration: 00:07:50s
    SRC: Total duration: 00:07:50s
    SRC: Schemas dumped: 2
    SRC: Tables dumped: 15
    SRC: Data size: 2.03 GB
    SRC: Rows written: 59502422
    SRC: Bytes written: 2.03 GB
    SRC: Average throughput: 4.33 MB/s
    1 thds indexing \ 100% (2.03 GB / 2.03 GB), 7.47 MB/s (161.06K rows/s), 15 / 15 tables done
    Building indexes - done
    Executing common postamble SQL - done
    TGT: 53 chunks (59.50M rows, 2.03 GB) for 15 tables in 2 schemas were loaded in 7 min 51 sec (avg throughput 4.32 MB/s, 126.29K rows/s)
    TGT: 17 DDL files were executed in 0 sec.
    TGT: 0 accounts were loaded, 3 accounts failed to load due to unsupported authentication plugin errors
    TGT: Data load duration: 7 min 51 sec
    TGT: 1 indexes were built in 0 sec.
    TGT: Total duration: 7 min 51 sec
    TGT: 0 warnings were reported during the load.
    ..
    ..
    Dump_metadata:
    Binlog_file: mysql-bin.000006
    Binlog_position: 626
    Executed_GTID_set: 7ee61c32-16eb-11f0-b3fc-02001702dcb5:1-3
    

Note : Notez le GTID exécuté affiché dans la sortie de copyInstance() et utilisez-le pour modifier le processus de réplication.

Tâche 9 : Modifier le processus de réplication et démarrer

Utilisez le numéro de fichier journal 000006 et le numéro de position de journal 626, comme indiqué dans la sortie de copyInstance() dans la tâche 8. Ce fichier journal et cette position de journal doivent être utilisés dans le format pour générer le numéro CSN 000006:000000000000626.

Modifiez le processus de réplication et cliquez sur Démarrer pour commencer. Image montrant comment modifier le réplicat

Le statut de réplication est En cours d'exécution.

Image présentant le statut de réplication

Note : Si vous avez utilisé la méthode 1 pour ajouter l'extraction, comme indiqué dans la tâche 7, la modification du processus de réplication n'est pas nécessaire. Dans cette démonstration de faisabilité, nous avons utilisé la méthode 2 pour ajouter l'extraction. Les deux méthodes fonctionnent bien.

Tâche 10 : Exécuter des tests LMD

Testez la réplication en effectuant une activité LMD sur la source.

Remerciements

Autres ressources d'apprentissage

Explorez d'autres laboratoires sur le site docs.oracle.com/learn ou accédez à plus de contenu d'apprentissage gratuit sur le canal Oracle Learning YouTube. De plus, visitez education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour obtenir la documentation sur le produit, visitez Oracle Help Center.