Nota
- Questa esercitazione richiede l'accesso a Oracle Cloud. Per iscriverti a un account gratuito, consulta Inizia a utilizzare Oracle Cloud Infrastructure Free Tier.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti di Oracle Cloud Infrastructure. Al termine del laboratorio, sostituisci questi valori con quelli specifici del tuo ambiente cloud.
Impostare la replica bidirezionale tra due istanze gestite Oracle Heatwave MySQL utilizzando OCI GoldenGate
Introduzione
Oracle Cloud Infrastructure GoldenGate (OCI GoldenGate) è un servizio completamente gestito che aiuta i data engineer a spostare i dati in tempo reale, su larga scala, da uno o più sistemi di gestione dei dati ai database OCI. Progetta, esegui, orchestra e monitora i task di replica dei dati in un'unica interfaccia senza dover allocare o gestire ambienti di calcolo. OCI GoldenGate supporta diverse origini e destinazioni, tra cui il servizio di database MySQL e Oracle HeatWave MySQL.
In questa esercitazione verrà descritto come impostare la replica bidirezionale utilizzando OCI GoldenGate tra due istanze Oracle HeatWave MySQL in OCI.
Obiettivi
- Imposta la replica bidirezionale tra due istanze gestite Oracle HeatWave MySQL utilizzando OCI GoldenGate in OCI.
Prerequisiti
-
Le istanze Oracle HeatWave MySQL di origine e destinazione devono utilizzare il motore
InnoDB
e devono essere in esecuzione nelle versioni5.7
o8.*
. -
Per la replica bidirezionale, si consiglia di utilizzare la stessa versione dell'istanza MySQL nell'origine e nella destinazione.
-
Il parametro di istanza
binlog_expire_logs_second
nelle istanze di origine e di destinazione deve essere impostato su almeno 72 ore. -
Il parametro di istanza
binlog_row_metadata
nelle istanze di origine e destinazione deve essere impostato su Completo per consentire la replica DDL (Data Definition Language).Nota: i parametri dell'istanza possono essere modificati solo creando una configurazione personalizzata. Per ulteriori informazioni, vedere Creazione di una configurazione personalizzata per MySQL.
-
Rivedere i tipi di dati supportati. Per ulteriori informazioni, vedere MySQL: Tipi di dati, oggetti e operazioni supportati.
-
Rivedere le limitazioni di replica DDL. Per ulteriori informazioni, vedere Utilizzo della replica DDL.
-
L'istanza di destinazione deve essere creata in anticipo dall'origine utilizzando uno dei metodi riportati di seguito.
- Metodo 1: utilizzo di utility shell MySQL quali
util.dumpInstance
eutil.loadDump
. - Metodo 2: tramite l'opzione di backup e ripristino basata su OCI Console.
- Metodo 3: utilizzo di OCI GoldenGate per Extract e Replicat iniziali per eseguire il caricamento dei dati iniziale. In questo tutorial questo metodo è stato utilizzato (Task 7).
- Metodo 1: utilizzo di utility shell MySQL quali
-
Per progettazione, le DDL della tabella heartbeat vengono ignorate dall'estrazione. È necessario creare manualmente la tabella heartbeat nella destinazione.
-
Host bastion con il client MySQL installato.
-
Regole di entrata e liste di sicurezza aggiornate per consentire la comunicazione tra origine, destinazione, bastion e OCI GoldenGate.
Task 1: distribuire OCI GoldenGate
-
Eseguire il login a OCI Console, cercare GoldenGate, selezionare servizio GoldenGate e fare clic su Crea distribuzione.
-
Immettere le informazioni riportate di seguito e fare clic su Crea.
- Nome: immettere
MySQLggdeployment1
. - Tipo di distribuzione: selezionare Replica dati.
- Select Technology: selezionare MySQL.
- Seleziona versione: immettere
21.15
. - Configurazione hardware: immettere # di OCPU.
- Selezione subnet: selezionare la subnet.
- Tipo di licenza: selezionare il tipo di licenza.
- Nome istanza: immettere
GGInstance1
. - Area di memorizzazione credenziali: selezionare GoldenGate (creare un nuovo segreto password o selezionarne uno esistente).
- Nome: immettere
Task 2: Creare utenti nelle istanze Oracle HeatWave MySQL
-
Utilizzare l'host Bastion OCI per connettersi alle istanze MySQL di origine e destinazione e creare utenti per i processi Extract e Replicat GoldenGate OCI. Eseguire la seguente query:
-
Nell'istanza MySQL di origine.
> 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'@'%';
-
Nell'istanza MySQL di destinazione.
> 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'@'%';
-
Task 3: impostare le connessioni nella distribuzione GoldenGate OCI
-
Andare alla pagina di distribuzione GoldenGate di OCI e fare clic su Connessioni per impostare la connessione.
-
Immettere le informazioni di connessione.
-
Ripetere i passi precedenti per aggiungere connessioni sia di origine che di destinazione.
-
Selezionare Distribuzioni e fare clic su Connessioni assegnate per assegnare le connessioni alla distribuzione.
Task 4: impostare regole di entrata e liste di sicurezza per la console GoldenGate OCI
-
Imposta le regole di entrata e aggiorna le liste di sicurezza per consentire la comunicazione tra le istanze Oracle HeatWave MySQL, la distribuzione GoldenGate OCI e la computazione OCI Bastion.
Nota: se si utilizza la VPN, è possibile saltare questo passaggio.
Attenersi ai passi elencati qui: Opzione B: usare il bastion personale su OCI Compute.
ssh -i <private-ssh-key-of-bastion-compute> opc@<bastion-compute-public-ip> -L 443:<GoldenGategate-deployment-hostname>:443 -N
-
Eseguire il test delle connessioni per i database di origine e di destinazione in OCI Console e tramite OCI GoldenGate Console.
-
Convalidare le connessioni all'istanza MySQL all'interno di OCI Console.
-
Convalidare le stesse connessioni dalla console GoldenGate OCI.
-
Task 5: Creare i processi di estrazione e replica
-
Creare un'estrazione principale (
EXT1
).-
Eseguire il login alla console GoldenGate OCI.
-
Andare a Panoramica e fare clic sul segno + nella sezione Estrazioni.
-
Inserire le informazioni sull'estrazione.
-
Modificare il file dei parametri in base alle esigenze. Il file dei parametri riportato di seguito acquisisce tutte le modifiche nel database
classicmodels
, incluse le modifiche DDL.EXTRACT ext1 USERIDALIAS MySQLpoc1, DOMAIN OracleGoldenGate EXTTRAIL e1 DDL INCLUDE MAPPED TRANLOGOPTIONS FETCHPARTIALJSON TABLE classicmodels.*;
Nota:
MySQLpoc1
è un'istanza di origine. -
Avviare l'estrazione e annotare l'identificativo transazione globale (GTID) nell'origine.
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>
Avviare l'estrazione e mantenerla sempre in esecuzione, anche quando si sta ancora lavorando sull'impostazione del database di destinazione per assicurarsi che vengano acquisite tutte le modifiche.
-
-
Creare un Replicat primario (
REP1
).-
Eseguire il login alla console GoldenGate OCI.
-
Andare a Panoramica e fare clic sul segno + nella sezione Replicat.
Nota: il nome della tabella di checkpoint deve essere preceduto dal nome del database o dello schema in minuscolo. In caso contrario, la creazione della tabella di checkpoint non riuscirà.
Ad esempio,
classicmodels.OCIGG_CHECKPOINT_REP1
.Si consiglia di creare un database/schema dedicato separato (ad esempio, schema
ggadmin
) per la tabella di checkpoint.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)
-
Modificare il file dei parametri in base alle esigenze. Il file dei parametri seguente replica tutti gli oggetti nel database
classicmodels
insieme alle modifiche DDL.REPLICAT rep1 USERIDALIAS MySQLpoc2, DOMAIN OracleGoldenGate DDL INCLUDE MAPPED MAP classicmodels.*, TARGET classicmodels.*;
Nota:
MySQLpoc2
è un'istanza di destinazione. -
Poiché questo è il Replicat principale ed è stato avviato per la prima volta, inizierà ad applicarsi dal file trail 0. Tuttavia, se si desidera modificare Replicat per iniziare da un determinato GTID, attenersi alla procedura riportata di seguito.
-
Andare alla sezione Replicat nella console GoldenGate OCI.
-
Selezionare il replicato, fare clic su Modifica, Modifica, BEGIN, selezionare GTID e immettere il GTID.
-
-
-
Finora è stata impostata la funzione unidirezionale per la replica DML (Data Manipulation Language) e DDL. Una volta sincronizzata la replica unidirezionale, possiamo procedere con la replica bidirezionale.
-
Ripetere i passi 5.1 e 5.2, ma questa volta i dettagli di origine e destinazione vengono invertiti. L'istanza del database di origine ora fungerà da istanza di destinazione e l'istanza di destinazione fungerà da istanza di origine.
- Origine: immettere
MySQLpoc2
. - Destinazione: immettere
MySQLpoc1
. - Per questo caso d'uso, abbiamo utilizzato un secondo database
airportdb
. È possibile impostare la replica bidirezionale per lo stesso database.
- Origine: immettere
-
Aggiungere l'estrazione 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.*;
-
Creare manualmente la tabella di checkpoint in quanto si tratta di un Replicat classico. Per la replica bidirezionale sono supportate solo repliche classiche e coordinate.
For example: ggadmin.OCIGG*CHECKPOINT_REP`- Add primary REPLICAT REP2:` REPLICAT rep2 USERIDALIAS MySQLpoc1, DOMAIN OracleGoldenGate DDL INCLUDE MAPPED MAP airportdb.*, TARGET airportdb.\_;
-
Task 6: Esegui test DDL e DML
Ora che l'impostazione bidirezionale è completata, è il momento di eseguire semplici test DML e DDL.
--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>
Task 7: Imposta estrazione caricamento iniziale
-
Impostare Estrai caricamento iniziale se si desidera utilizzare OCI GoldenGate per eseguire il caricamento iniziale dei dati nel database di destinazione.
-
Eseguire il login alla console GoldenGate OCI.
-
Andare a Panoramica e fare clic sul segno + nella sezione Estrai. Questa operazione è molto simile alla creazione di un'estrazione principale. L'unica differenza consiste nel selezionare Tipo di estrazione come Carico iniziale durante la creazione di un'estrazione.
File dei parametri per l'estrazione del caricamento iniziale.
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
-
-
Impostare in modo simile un Replicat che leggerà i file trail generati dal caricamento iniziale Extract. Questo Replicat e il caricamento iniziale Extract verranno entrambi eliminati una volta completato il caricamento iniziale.
-
Nel database di destinazione, assicurarsi che tutte le tabelle siano vuote. Elimina/Disattiva tutte le chiavi esterne nella destinazione. Disabilita trigger e indici nella destinazione per migliorare le prestazioni di caricamento iniziale.
Nota: eseguire un backup per le DDL degli oggetti dello schema prima di eliminarle.
-
Di seguito è riportato l'ordine di creazione dei processi Extract e Replicat se si utilizza il caricamento iniziale Extract per il caricamento iniziale dei dati.
-
Creare un'estrazione principale per l'origine (non avviare ancora il processo).
-
Creare un'estrazione caricamento iniziale per l'origine (non avviare ancora il processo) e acquisire il GTID nell'origine.
-
Creare un Replicat per elaborare i file trail generati dal caricamento iniziale Extract per la destinazione (non avviare ancora il processo).
Nota: non esiste un tipo Replicat separato per il caricamento iniziale.
-
Creare un Replicat primario per la destinazione (non avviare ancora il processo).
-
Utilizzare la stessa tabella di checkpoint sia per il caricamento iniziale di Replicat che per il Replicat primario. Il caricamento iniziale Replicat punta ai file trail di Extract iniziali e Replicat primario punta ai file trail di Extract principali (entrambi i file trail sono diversi).
-
-
Di seguito è riportato l'ordine in cui i processi devono essere avviati quando si utilizza il caricamento iniziale Extract.
-
Avviare l'estrazione principale e prendere nota del GTID registrato.
-
Avviare il Replicat creato per il caricamento iniziale Extract.
-
Modificare il caricamento iniziale Extract e modificarlo in modo che inizi con GTID ottenuto all'avvio dell'estrazione principale.
-
Avviare il Replicat principale.
Nota:
- Avviare Replicat primario solo dopo la sincronizzazione sia del caricamento iniziale Extract che di Replicat per il caricamento iniziale (LAG 0).
- Creare o abilitare le chiavi esterne prima di avviare il Replicat primario.
Creare gli indici (se eliminati in precedenza per migliorare le prestazioni di caricamento iniziali) prima di avviare Replicat principale.
-
-
Limiti
-
Solo le repliche classiche e coordinate supportano la replica bidirezionale e multidirezionale. Replicat parallelo non è supportato.
-
Problemi di incremento automatico delle colonne.
-
Se una tabella ha una sola colonna e non è una chiave primaria o univoca, il mapping non riesce perché la combinazione di tutte le colonne per tale tabella è uguale nell'origine e nella destinazione.
-
Tipi di dati, DDL e altre limitazioni delle funzioni.
-
Quando si utilizza la replica Active-Active, i fusi orari devono essere gli stessi su entrambi i sistemi in modo da consentire il funzionamento della risoluzione e del rilevamento dei conflitti basati su indicatore orario.
Collegamenti correlati
-
Connettersi a Oracle Cloud Infrastructure GoldenGate utilizzando un IP privato
-
MySQL: prerequisiti per la configurazione DDL basata su log delle transazioni
-
Caricamento dei dati da file a Replicat nell'architettura dei microservizi
-
MySQL: tipi di dati, oggetti e operazioni supportati per OCI GoldenGate
Conferme
- Autore - Chakradhar Jagganagari (esperto dell'implementazione LIFT - Custom, 3rd party, VM Database & Apps)
Altre risorse di apprendimento
Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare un Oracle Learning Explorer.
Per la documentazione del prodotto, visita l'Oracle Help Center.
Set up Bidirectional Replication Between Two Oracle Heatwave MySQL managed instances using OCI GoldenGate
G29684-02
Copyright ©2025, Oracle and/or its affiliates.