Note :
- Ce tutoriel nécessite l'accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, voir Démarrer avec le niveau gratuit d'Oracle Cloud Infrastructure.
- Il utilise des exemples de valeurs pour les données d'identification, la location et les compartiments d'Oracle Cloud Infrastructure. À la fin de votre laboratoire, remplacez ces valeurs par celles qui sont propres à votre environnement en nuage.
Configurer la réplication bidirectionnelle entre deux instances gérées 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 montrerons comment configurer la réplication bidirectionnelle à l'aide d'OCI GoldenGate entre deux instances Oracle HeatWave MySQL dans OCI.
Objectifs
- Configurez une réplication bidirectionnelle entre deux instances gérées par Oracle HeatWave MySQL à l'aide d'OCI GoldenGate dans OCI.
Préalables
-
Les instances Oracle HeatWave MySQL sources et cibles doivent utiliser le moteur
InnoDB
et être exécutées sur les versions5.7
ou8.*
. -
Pour la réplication bidirectionnelle, il est recommandé d'utiliser la même version de l'instance MySQL sur la source et la cible.
-
Le paramètre d'instance
binlog_expire_logs_second
sur les instances source et cible doit être réglé à au moins 72 heures. -
Le paramètre d'instance
binlog_row_metadata
sur les instances source et cible doit être réglé à Complet pour permettre la réplication LDD (Langage de définition de données).Note : Les paramètres d'instance ne peuvent être modifiés qu'en créant une configuration personnalisée. Pour plus d'informations, voir Création d'une configuration personnalisée pour MySQL.
-
Réviser les types de données pris en charge. Pour plus d'informations, voir MySQL : Types de données, objets et opérations pris en charge.
-
Vérifiez les limitations de la réplication LDD. Pour plus d'informations, voir Utilisation de la réplication LDD.
-
L'instance cible doit être créée à l'avance à partir de la source à l'aide de l'une des méthodes suivantes :
- Méthode 1 : Utilisation des utilitaires d'interpréteur de commandes MySQL tels que
util.dumpInstance
etutil.loadDump
. - Méthode 2 : Au moyen de l'option de sauvegarde et de restauration basée sur la console OCI.
- Méthode 3 : Utilisation d'OCI GoldenGate pour l'extraction et la réplication initiales pour effectuer le chargement de données initial. Dans ce didacticiel, cette méthode a été utilisée (tâche 7).
- Méthode 1 : Utilisation des utilitaires d'interpréteur de commandes MySQL tels que
-
Par conception, les instructions LDD de table de pulsations sont ignorées par le processus Extract. Vous devez créer la table de pulsations manuellement au niveau de la cible.
-
Hôte bastion avec client MySQL installé.
-
Règles de trafic entrant et listes de sécurité mises à jour pour permettre la communication entre la source, la cible, l'hôte bastion et OCI GoldenGate.
Tâche 1 : Déployer OCI GoldenGate
-
Connectez-vous à la console OCI, recherchez GoldenGate, sélectionnez Service GoldenGate et cliquez sur Créer un déploiement.
-
Entrez les informations suivantes et cliquez sur Créer.
- Nom : Entrez
MySQLggdeployment1
. - Type de déploiement : Sélectionnez Réplication des données.
- Sélectionner une technologie : Sélectionnez MySQL.
- Sélectionner une version : Entrez
21.15
. - Configuration du matériel : Entrez nombre d'OCPU.
- Sélection de sous-réseau : Sélectionnez un sous-réseau.
- Type de licence Sélectionnez le type de licence.
- Nom de l'instance : Entrez
GGInstance1
. - Magasin de données d'identification : Sélectionnez GoldenGate (créez une nouvelle clé secrète de mot de passe ou sélectionnez une clé existante).
- Nom : Entrez
Tâche 2 : Créer des utilisateurs dans les instances Oracle HeatWave MySQL
-
Utilisez l'hôte bastion OCI pour vous connecter aux instances MySQL source et cible et créer des utilisateurs pour les processus d'extraction et de réplication OCI GoldenGate. Exécutez l'interrogation suivante :
-
Sur l'instance MySQL source.
> create user 'ggsuser_S'@'%' identified by "<password>"; > grant all privileges on airportdb.* to 'ggsuser_S'@'%' with grant option; > Grant select, process, replication slave, replication client on *.* to 'ggsuser_S'@'%';
-
Sur l'instance MySQL cible.
> create user 'ggsuser_T'@'%' identified by "<password>"; > grant all privileges on airportdb.* to 'ggsuser_T'@'%' with grant option; > Grant select, process, replication slave, replication client on *.* to 'ggsuser_T'@'%';
-
Tâche 3 : Configurer les connexions dans le déploiement d'OCI GoldenGate
-
Allez à la page de déploiement d'OCI GoldenGate et cliquez sur Connexions pour configurer la connexion.
-
Entrez les informations de connexion.
-
Répétez les étapes ci-dessus pour ajouter à la fois des connexions source et cible.
-
Sélectionnez Déploiements et cliquez sur Connexions affectées pour affecter les connexions au déploiement.
Tâche 4 : Configurer les règles de trafic entrant et les listes de sécurité pour la console OCI GoldenGate
-
Configurer des règles de trafic entrant et mettre à jour des listes de sécurité pour permettre la communication entre les instances Oracle HeatWave MySQL, le déploiement OCI GoldenGate et le calcul d'hôte bastion OCI.
Note : Si vous utilisez un RPV, vous pouvez ignorer cette étape.
Suivez les étapes indiquées ici : Option B : Utiliser votre propre hôte bastion sur le service de calcul pour OCI.
ssh -i <private-ssh-key-of-bastion-compute> opc@<bastion-compute-public-ip> -L 443:<GoldenGategate-deployment-hostname>:443 -N
-
Testez les connexions pour les bases de données source et cible dans la console OCI et au moyen de la console OCI GoldenGate.
-
Validez les connexions à l'instance MySQL dans la console OCI.
-
Validez les mêmes connexions à partir de la console OCI GoldenGate.
-
Tâche 5 : Créer les processus d'extraction et de réplication
-
Créez une extraction principale (
EXT1
).-
Connectez-vous à la console OCI GoldenGate.
-
Allez à Aperçu et cliquez sur + dans la section Extraits.
-
Entrez les données d'extraction.
-
Modifiez le fichier de paramètres selon les besoins. Le fichier de paramètres suivant capture toutes les modifications dans la base de données
classicmodels
, y compris les modifications LDD.EXTRACT ext1 USERIDALIAS MySQLpoc1, DOMAIN OracleGoldenGate EXTTRAIL e1 DDL INCLUDE MAPPED TRANLOGOPTIONS FETCHPARTIALJSON TABLE classicmodels.*;
Note :
MySQLpoc1
est une instance source. -
Démarrez l'extraction et notez l'identificateur global de transaction (GTID) sur la source.
MySQL> select @@gtid_executed, @@gtid_purged\G *************************** 1. row *************************** @@gtid_executed: 3b631a96-6aa7-11ef-95c0-02001701769c:1-94 <--- make a note of this GTID @@gtid_purged: 3b631a96-6aa7-11ef-95c0-02001701769c:1-72 1 row in set (0.00 sec) MySQL>
Démarrez l'extraction et maintenez-la en cours d'exécution, même lorsque vous travaillez toujours à la configuration de la base de données cible pour vous assurer que toutes les modifications sont capturées.
-
-
Créez un processus de réplication principal (
REP1
).-
Connectez-vous à la console OCI GoldenGate.
-
Allez à Aperçu et cliquez sur + dans la section Réplication.
Note : Le nom de la table de points de vérification doit être précédé du nom de la base de données/du schéma en minuscules. Si vous ne le faites pas, la création de la table de points de reprise échouera.
Par exemple,
classicmodels.OCIGG_CHECKPOINT_REP1
.Il est recommandé de créer une base de données/un schéma dédié distinct (par exemple, schéma
ggadmin
) pour la table de points de vérification.MySQL> create database ggadmin; Query OK, 1 row affected (0.01 sec) MySQL> grant all privileges on ggadmin.* to 'ggsuser_T'@'%' with grant option; Query OK, 0 rows affected (0.00 sec) MySQL> grant all privileges on ggadmin.* to 'ggsuser_S'@'%' with grant option; Query OK, 0 rows affected (0.00 sec)
-
Modifiez le fichier de paramètres selon les besoins. Le fichier de paramètres suivant réplique tous les objets de la base de données
classicmodels
ainsi que les modifications LDD.REPLICAT rep1 USERIDALIAS MySQLpoc2, DOMAIN OracleGoldenGate DDL INCLUDE MAPPED MAP classicmodels.*, TARGET classicmodels.*;
Note :
MySQLpoc2
est une instance cible. -
Comme il s'agit du processus Replicat principal et qu'il a été démarré pour la première fois, il commencera à s'appliquer à partir du fichier trace 0. Toutefois, si vous souhaitez modifier le processus Replicat pour qu'il démarre à partir d'un GTID particulier, procédez comme suit :
-
Allez à la section Réplication de la console OCI GoldenGate.
-
Sélectionnez le processus de réplication, cliquez sur Modifier, Modifier, BEGIN, sélectionnez GTID et entrez le GTID.
-
-
-
Jusqu'à présent, nous avons configuré le langage unidirectionnel pour la réplication LMD (Langage de manipulation de données) et LDD. Une fois la réplication unidirectionnelle synchronisée, nous pouvons procéder à la réplication bidirectionnelle.
-
Répétez les étapes 5.1 et 5.2, mais cette fois, nous inversons les détails de la source et de la cible. L'instance de base de données source agira désormais en tant qu'instance cible et l'instance cible en tant qu'instance source.
- Source : Entrez
MySQLpoc2
. - Cible : Entrez
MySQLpoc1
. - Pour ce cas d'utilisation, nous avons utilisé une deuxième base de données
airportdb
. Vous pouvez configurer la réplication bidirectionnelle pour la même base de données.
- Source : Entrez
-
Ajoutez l'extraction principale (
EXT2
).EXTRACT ext2 USERIDALIAS MySQLpoc2, DOMAIN OracleGoldenGate EXTTRAIL e2 DDL INCLUDE MAPPED TRANLOGOPTIONS FILTERTABLE ggadmin.OCIGG_CHECKPOINT_REP* -- from 23ai GG use EXCLUDEFILTERTABLE TABLE airportdb.*;
-
Créez manuellement une table de points de reprise car il s'agit d'un processus de réplication classique. Seuls les processus de réplication classiques et coordonnés sont pris en charge pour la réplication bidirectionnelle.
For example: ggadmin.OCIGG*CHECKPOINT_REP`- Add primary REPLICAT REP2:` REPLICAT rep2 USERIDALIAS MySQLpoc1, DOMAIN OracleGoldenGate DDL INCLUDE MAPPED MAP airportdb.*, TARGET airportdb.\_;
-
Tâche 6 : Exécuter les tests LDD et LMD
Maintenant que la configuration bidirectionnelle est terminée, il est temps d'exécuter des tests LMD et LDD simples.
--DML test from classicmodels database on source MySQLpoc1
MySQLpoc1> select count(*) from weatherdata;
+----------+
| count(*) |
+----------+
| 4626432 |
+----------+
1 row in set (0.19 sec)
MySQLpoc1> insert into weatherdata values ('2005-01-02','04:50:00',-8.1,3,57.0,990.00,38.00,'Nebel-Schneefall',61);
Query OK, 1 row affected (0.00 sec)
MySQLpoc1> select count(*) from weatherdata;
+----------+
| count(*) |
+----------+
| 4626433 |
+----------+
1 row in set (0.23 sec)
-DDL replication test from classicmodels database on source MySQLpoc1
MySQLpoc1> create table test (name char(5));
Query OK, 0 rows affected (0.02 sec)
MySQL> insert into test values ('cj');
Query OK, 1 row affected (0.00 sec)
MySQL>
--Now Let's check if the above DML and DDLs got replicated to target MySQLpoc2
MySQLpoc2> select count(*) from weatherdata;
+----------+
| count(*) |
+----------+
| 4626433 | <--- row count matches to source
+----------+
1 row in set (0.37 sec)
MySQLpoc2>
MySQLpoc2> select * from test;
+------+
| name |
+------+
| cj | <-- table CJ got replicated
+------+
1 row in set (0.00 sec)
MySQL>
-- Now testing Bi directional
-- on target (MySQLpoc2)
MySQLpoc2> select * from test;
+------+
| name |
+------+
| cj |
+------+
1 row in set (0.00 sec)
MySQLpoc2> insert into test values ('cj2');
Query OK, 1 row affected (0.01 sec)
MySQLpoc2> select * from test;
+------+
| name |
+------+
| cj |
| cj2 |
+------+
2 rows in set (0.00 sec)
MySQLpoc2> insert into test values ('cjs3');
Query OK, 1 row affected (0.00 sec)
MySQLpoc2> select * from test;
+------+
| name |
+------+
| cj |
| cj2 |
| cjs3 |
+------+
3 rows in set (0.00 sec)
MySQLpoc2>
--On source (MySQLpoc1):
--DML on the target got REPLICATed on the source
MySQLpoc1> select * from test;
+------+
| name |
+------+
| cj |
| cj2 |
| cjs3 |
+------+
3 rows in set (0.00 sec)
MySQL>
Tâche 7 : Configurer l'extraction du chargement initial
-
Configurez l'extraction de chargement initial si vous souhaitez utiliser OCI GoldenGate pour effectuer le chargement initial des données dans la base de données cible.
-
Connectez-vous à la console OCI GoldenGate.
-
Allez à Aperçu et cliquez sur + dans la section Extraire. Ceci est très similaire à la création d'une extraction principale, la seule différence est de sélectionner Type d'extraction comme Chargement initial lors de la création d'une extraction.
Fichier de paramètres pour l'extraction du chargement initial.
Parameter file for initial load EXTRACT: EXTRACT EXTIL USERIDALIAS MySQLpoc1, DOMAIN OracleGoldenGate EXTFILE il , PURGE TABLE airportdb.*; MAP_PARALLELISM 4 MIN_APPLY_PARALLELISM 2 MAX_APPLY_PARALLELISM 10 SPLIT_TRANS_RECS 1000 CHUNK_SIZE 1 GB
-
-
De même, configurez un processus Replicat qui lit les fichiers trace générés par le processus Extract de chargement initial. Ce processus de réplication et l'extraction du chargement initial seront tous deux supprimés une fois le chargement initial terminé.
-
Dans la base de données cible, assurez-vous que toutes les tables sont vides. Supprimez/désactivez toutes les clés étrangères sur la cible. Désactiver les déclencheurs et les index sur la cible pour améliorer la performance du chargement initial.
Note : Effectuez une sauvegarde des LDD des objets de schéma avant d'en supprimer un.
-
Voici l'ordre dans lequel les processus Extract et Replicat doivent être créés si vous utilisez le processus Extract de chargement initial pour le chargement initial des données.
-
Créez une extraction principale pour la source (ne démarrez pas encore le processus).
-
Créez une extraction de chargement initial pour la source (ne démarrez pas encore le processus) et saisissez le GTID sur la source.
-
Créez un processus Replicat pour traiter les fichiers trace générés par le processus Extract de chargement initial pour la cible (ne démarrez pas encore le processus).
Note : Il n'existe aucun type de réplication distinct pour le chargement initial.
-
Créez un processus Replicat principal pour la cible (ne démarrez pas encore le processus).
-
Utilisez la même table de points de reprise pour le processus Replicat de chargement initial et le processus Replicat principal. Le processus Replicat de chargement initial pointe vers les fichiers de trace d'extraction initiaux et le processus Replicat principal vers les fichiers de trace d'extraction principaux (les deux fichiers de trace sont différents).
-
-
Voici l'ordre dans lequel les processus doivent être démarrés lors de l'utilisation du processus Extract de chargement initial.
-
Démarrez l'extraction principale et notez le GTID avec lequel elle s'inscrit.
-
Démarrez le processus Replicat qui a été créé pour l'extraction du chargement initial.
-
Modifiez l'extraction de chargement initial et modifiez-la pour qu'elle commence par le GTID obtenu lors du démarrage de l'extraction principale.
-
Démarrez le processus Replicat principal.
Note :
- Démarrez le processus Replicat principal uniquement après la synchronisation des processus Extract et Replicat du chargement initial (agrégation de liens 0).
- Créez ou activez les clés étrangères avant de démarrer le processus de réplication principal.
Créez des index (si vous les avez supprimés précédemment pour améliorer les performances de chargement initial) avant de démarrer le processus Replicat principal.
-
-
Limitations
-
Seuls les processus de réplication classiques et coordonnés prennent en charge la réplication bidirectionnelle et multidirectionnelle. Le processus de réplication parallèle n'est pas pris en charge.
-
Problèmes d'incrémentation automatique des colonnes.
-
Si une table comporte une colonne qui n'est pas une clé primaire ou une clé unique, le mappage échoue car la combinaison de toutes les colonnes de cette table est la même pour la source et la cible.
-
Types de données, LDD et autres limitations de fonction.
-
Lors de l'utilisation de la réplication active-active, les fuseaux horaires doivent être les mêmes sur les deux systèmes afin que la résolution et la détection des conflits basées sur un horodatage puissent fonctionner.
Liens connexes
-
Se connecter à GoldenGate pour Oracle Cloud Infrastructure à l'aide d'une adresse IP privée
-
MySQL : Préalables pour la configuration LDD basée sur un journal de transactions
-
MySQL : Types de données, objets et opérations pris en charge pour OCI GoldenGate
Remerciements
- Auteur - Chakradhar Jagganagari (spécialiste de la mise en oeuvre LIFT - Personnalisé, 3e partie, base de données et applications de machine virtuelle)
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.
Set up Bidirectional Replication Between Two Oracle Heatwave MySQL managed instances using OCI GoldenGate
G29682-02
Copyright ©2025, Oracle and/or its affiliates.