Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zur Registrierung für einen kostenlosen Account finden Sie unter Erste Schritte mit Oracle Cloud Infrastructure Free Tier.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. Ersetzen Sie diese Werte nach Abschluss der Übung durch Werte, die für Ihre Cloud-Umgebung spezifisch sind.
Bidirektionale Replikation zwischen zwei von Oracle Heatwave MySQL verwalteten Instanzen mit OCI GoldenGate einrichten
Einführung
Oracle Cloud Infrastructure GoldenGate (OCI GoldenGate) ist ein vollständig verwalteter Service, mit dem Data Engineers Daten in Echtzeit, skalierbar, von einem oder mehreren Datenmanagementsystemen in OCI-Datenbanken verschieben können. Sie können Datenreplikationsaufgaben in einer einzigen Schnittstelle entwerfen, ausführen, orchestrieren und überwachen, ohne Compute-Umgebungen zuweisen oder verwalten zu müssen. OCI GoldenGate unterstützt mehrere Quellen und Ziele, einschließlich MySQL und Oracle HeatWave MySQL-Datenbankservice.
In diesem Tutorial erfahren Sie, wie Sie die bidirektionale Replikation mit OCI GoldenGate zwischen zwei Oracle HeatWave MySQL-Instanzen in OCI einrichten.
Ziele
- Richten Sie die bidirektionale Replikation zwischen zwei von Oracle HeatWave MySQL verwalteten Instanzen mit OCI GoldenGate in OCI ein.
Voraussetzungen
-
Oracle HeatWave MySQL-Quell- und Zielinstanzen müssen die
InnoDB
-Engine verwenden und auf den Versionen5.7
oder8.*
ausgeführt werden. -
Für die bidirektionale Replikation wird empfohlen, dieselbe Version der MySQL-Instanz auf Quelle und Ziel zu verwenden.
-
Der Instanzparameter
binlog_expire_logs_second
auf Quell- und Zielinstanzen muss auf mindestens 72 Stunden festgelegt sein. -
Der Instanzparameter
binlog_row_metadata
auf Quell- und Zielinstanzen muss auf "Vollständig" gesetzt sein, damit die Data Definition Language-(DDL-)Replikation zulässig ist.Hinweis: Instanzparameter können nur durch Erstellen einer benutzerdefinierten Konfiguration geändert werden. Weitere Informationen finden Sie unter Benutzerdefinierte Konfiguration für MySQL erstellen.
-
Prüfen Sie die unterstützten Datentypen. Weitere Informationen finden Sie unter MySQL: Unterstützte Datentypen, Objekte und Vorgänge.
-
Einschränkungen der DDL-Replikation prüfen Weitere Informationen finden Sie unter DDL-Replikation verwenden.
-
Die Zielinstanz muss im Voraus aus der Quelle mit einer der folgenden Methoden erstellt werden:
- Methode 1: Verwenden von MySQL-Shellutilitys wie
util.dumpInstance
undutil.loadDump
. - Methode 2: Über die Option für OCI-konsolenbasiertes Backup und Restore.
- Methode 3: OCI GoldenGate für den anfänglichen Extract und Replicat zum Ausführen des anfänglichen Dataloads verwenden. In diesem Tutorial wurde diese Methode verwendet (Aufgabe 7).
- Methode 1: Verwenden von MySQL-Shellutilitys wie
-
Die Heartbeat-Tabellen-DDLs werden vom Extract ignoriert. Erstellen Sie die Heartbeat-Tabelle manuell am Ziel.
-
Bastionhost mit installiertem MySQL-Client.
-
Ingress-Regeln und aktualisierte Sicherheitslisten, um die Kommunikation zwischen Quelle, Ziel, Bastion und OCI GoldenGate zu ermöglichen.
Aufgabe 1: OCI bereitstellen GoldenGate
-
Melden Sie sich bei der OCI-Konsole an, suchen Sie nach GoldenGate, wählen Sie GoldenGate-Service aus, und klicken Sie auf Deployment erstellen.
-
Geben Sie die folgenden Informationen ein, und klicken Sie auf Erstellen.
- Name: Geben Sie
MySQLggdeployment1
ein. - Deployment-Typ: Wählen Sie Datenreplikation aus.
- Technologie auswählen: Wählen Sie MySQL aus.
- Version auswählen: Geben Sie
21.15
ein. - Hardwarekonfiguration: Geben Sie Anzahl der OCPUs ein.
- Subnetzauswahl: Wählen Sie das Subnetz aus.
- Lizenztyp Wählen Sie den Lizenztyp aus.
- Instanzname: Geben Sie
GGInstance1
ein. - Zugangsdatenspeicher: Wählen Sie GoldenGate aus (erstellen Sie ein neues Kennwort-Secret, oder wählen Sie ein vorhandenes aus).
- Name: Geben Sie
Aufgabe 2: Benutzer in Oracle HeatWave MySQL-Instanzen erstellen
-
Verwenden Sie den OCI Bastion-Host, um eine Verbindung zu Quell- und Zielinstanzen von MySQL herzustellen und Benutzer für OCI GoldenGate Extract- und Replicat-Prozesse zu erstellen. Führen Sie folgende Abfrage aus:
-
In der Quellinstanz MySQL.
> 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'@'%';
-
Auf Zielinstanz MySQL.
> 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'@'%';
-
Aufgabe 3: Verbindungen im OCI-Deployment GoldenGate einrichten
-
Gehen Sie zur OCI-Deployment-Seite GoldenGate, und klicken Sie auf Verbindungen, um die Verbindung einzurichten.
-
Geben Sie die Verbindungsinformationen ein.
-
Wiederholen Sie die obigen Schritte, um sowohl Quell- als auch Zielverbindungen hinzuzufügen.
-
Wählen Sie Deployments aus, und klicken Sie auf Zugewiesene Verbindungen, um die Verbindungen dem Deployment zuzuweisen.
Aufgabe 4: Ingress-Regeln und Sicherheitslisten für die OCI-Konsole GoldenGate einrichten
-
Richten Sie Ingress-Regeln ein, und aktualisieren Sie Sicherheitslisten, um die Kommunikation zwischen den Oracle HeatWave MySQL-Instanzen, dem OCI GoldenGate-Deployment und OCI Bastion Compute zu ermöglichen.
Hinweis: Wenn Sie VPN verwenden, können Sie diesen Schritt überspringen.
Führen Sie die hier aufgeführten Schritte aus: Option B: Eigene Bastion auf OCI Compute verwenden.
ssh -i <private-ssh-key-of-bastion-compute> opc@<bastion-compute-public-ip> -L 443:<GoldenGategate-deployment-hostname>:443 -N
-
Testen Sie die Verbindungen für Quell- und Zieldatenbanken in der OCI-Konsole und über die OCI-Konsole GoldenGate.
-
Validieren Sie die MySQL-Instanzverbindungen in der OCI-Konsole.
-
Validieren Sie dieselben Verbindungen über die OCI-Konsole GoldenGate.
-
Aufgabe 5: Extract- und Replicat-Prozesse erstellen
-
Erstellen Sie einen primären Extract (
EXT1
).-
Melden Sie sich bei der OCI-Konsole GoldenGate an.
-
Gehen Sie zu Überblick, und klicken Sie im Abschnitt Extrakte auf +.
-
Geben Sie die Extraktdaten ein.
-
Bearbeiten Sie die Parameterdatei nach Bedarf. Die folgende Parameterdatei erfasst alle Änderungen in der
classicmodels
-Datenbank, einschließlich DDL-Änderungen.EXTRACT ext1 USERIDALIAS MySQLpoc1, DOMAIN OracleGoldenGate EXTTRAIL e1 DDL INCLUDE MAPPED TRANLOGOPTIONS FETCHPARTIALJSON TABLE classicmodels.*;
Hinweis:
MySQLpoc1
ist eine Quellinstanz. -
Starten Sie den Export, und notieren Sie sich die GTID (Global Transaction Identifier) in der Quelle.
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>
Starten Sie den Extract, und führen Sie ihn ständig aus, auch wenn Sie noch an der Einrichtung der Zieldatenbank arbeiten, um sicherzustellen, dass alle Änderungen erfasst werden.
-
-
Erstellen Sie ein primäres Replicat (
REP1
).-
Melden Sie sich bei der OCI-Konsole GoldenGate an.
-
Gehen Sie zu Überblick, und klicken Sie im Abschnitt Replikat auf +.
Hinweis: Dem Namen der Checkpoint-Tabelle muss der Datenbank-/Schemaname in Kleinbuchstaben vorangestellt werden. Andernfalls verläuft die Erstellung der Checkpoint-Tabelle nicht erfolgreich.
Beispiel:
classicmodels.OCIGG_CHECKPOINT_REP1
.Es wird empfohlen, eine separate dedizierte Datenbank/ein dediziertes Schema (z.B.
ggadmin
-Schema) für die Checkpoint-Tabelle zu erstellen.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)
-
Bearbeiten Sie die Parameterdatei nach Bedarf. Die folgende Parameterdatei repliziert alle Objekte unter der Datenbank
classicmodels
zusammen mit DDL-Änderungen.REPLICAT rep1 USERIDALIAS MySQLpoc2, DOMAIN OracleGoldenGate DDL INCLUDE MAPPED MAP classicmodels.*, TARGET classicmodels.*;
Hinweis:
MySQLpoc2
ist eine Zielinstanz. -
Da dies das primäre Replicat ist und es zum ersten Mal gestartet wurde, wird es von Traildatei 0 aus angewendet. Wenn Sie das Replicat jedoch so ändern möchten, dass es mit einer bestimmten GTID beginnt, führen Sie die folgenden Schritte aus:
-
Gehen Sie in der OCI-Konsole GoldenGate zum Abschnitt Replicat.
-
Wählen Sie das Replicat aus, klicken Sie auf Ändern, Bearbeiten, BEGIN, wählen Sie GTID aus, und geben Sie die GTID ein.
-
-
-
Bisher haben wir das unidirektionale für die Data Manipulation Language-(DML-) und DDL-Replikation eingerichtet. Sobald die unidirektionale Replikation synchron ist, können wir mit der bidirektionalen Replikation fortfahren.
-
Wiederholen Sie Schritt 5.1 und Schritt 5.2, aber dieses Mal kehren wir die Quell- und Zieldetails um. Die Quelldatenbankinstanz fungiert jetzt als Zielinstanz, und die Zielinstanz fungiert als Quellinstanz.
- Quelle: Geben Sie
MySQLpoc2
ein. - Ziel: Geben Sie
MySQLpoc1
ein. - Für diesen Anwendungsfall haben wir eine zweite Datenbank
airportdb
verwendet. Sie können die bidirektionale Replikation für dieselbe Datenbank einrichten.
- Quelle: Geben Sie
-
Primären Extrakt hinzufügen (
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.*;
-
Erstellen Sie die Checkpoint-Tabelle manuell, da es sich um ein klassisches Replicat handelt. Für die bidirektionale Replikation werden nur klassische und koordinierte Replikate unterstützt.
For example: ggadmin.OCIGG*CHECKPOINT_REP`- Add primary REPLICAT REP2:` REPLICAT rep2 USERIDALIAS MySQLpoc1, DOMAIN OracleGoldenGate DDL INCLUDE MAPPED MAP airportdb.*, TARGET airportdb.\_;
-
Aufgabe 6: DDL- und DML-Tests ausführen
Nachdem das bidirektionale Setup abgeschlossen ist, ist es an der Zeit, einfache DML- und DDL-Tests auszuführen.
--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>
Aufgabe 7: Erste Ladeextraktion einrichten
-
Richten Sie den Extract für das erstmalige Laden ein, wenn Sie OCI GoldenGate zum erstmaligen Laden von Daten in die Zieldatenbank verwenden möchten.
-
Melden Sie sich bei der OCI-Konsole GoldenGate an.
-
Gehen Sie zu Überblick, und klicken Sie im Abschnitt Extrahieren auf +. Dies ähnelt sehr dem Erstellen eines primären Extract. Der einzige Unterschied besteht darin, beim Erstellen eines Extract den Extract-Typ als Erstmaliges Laden auszuwählen.
Parameterdatei für den Extrakt beim erstmaligen Laden.
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
-
-
Richten Sie auf ähnliche Weise ein Replicat ein, das die Traildateien liest, die beim erstmaligen Laden von Extract generiert wurden. Dieses Replicat und der anfängliche Ladeextrakt werden beide gelöscht, sobald der erste Ladevorgang abgeschlossen ist.
-
Stellen Sie in der Zieldatenbank sicher, dass alle Tabellen leer sind. Löschen/Deaktivieren Sie alle Fremdschlüssel auf dem Ziel. Trigger und Indizes auf Ziel deaktivieren, um die Performance beim erstmaligen Laden zu verbessern.
Hinweis: Erstellen Sie ein Backup für die DDLs der Schemaobjekte, bevor Sie DDLs löschen.
-
Im Folgenden ist die Reihenfolge aufgeführt, in der Extract- und Replicat-Prozesse erstellt werden sollen, wenn Extract beim ersten Laden von Daten verwendet wird.
-
Erstellen Sie einen primären Extract für die Quelle (starten Sie den Prozess noch nicht).
-
Erstellen Sie einen Extract zum erstmaligen Laden für die Quelle (starten Sie den Prozess noch nicht), und erfassen Sie die GTID für die Quelle.
-
Erstellen Sie ein Replicat, um die Traildateien zu verarbeiten, die beim erstmaligen Laden von Extract für das Ziel generiert wurden (starten Sie den Prozess noch nicht).
Hinweis: Beim erstmaligen Laden ist kein separater Replicat-Typ vorhanden.
-
Erstellen Sie ein primäres Replicat für das Ziel (starten Sie den Prozess noch nicht).
-
Verwenden Sie dieselbe Checkpoint-Tabelle für das erstmalige Laden von Replicat und das primäre Replicat. Das erstmalige Laden von Replicat verweist auf anfängliche Extract-Traildateien, und das primäre Replicat verweist auf primäre Extract-Traildateien (beide Traildateien sind unterschiedlich).
-
-
Nachfolgend ist die Reihenfolge aufgeführt, in der die Prozesse beim erstmaligen Laden von Extract gestartet werden sollen.
-
Starten Sie den primären Extract, und notieren Sie sich die GTID, mit der er registriert wird.
-
Starten Sie das Replicat, das für das erstmalige Laden von Extract erstellt wurde.
-
Bearbeiten Sie den anfänglichen Extract-Ladevorgang, und ändern Sie ihn so, dass er mit der GTID beginnt, die Sie beim Starten des primären Extract erhalten haben.
-
Starten Sie das primäre Replicat.
Hinweis:
- Starten Sie das primäre Replicat erst, nachdem sowohl Extract als auch Replicat für das anfängliche Laden synchron sind (LAG 0).
- Erstellen oder aktivieren Sie die Fremdschlüssel, bevor Sie das primäre Replicat starten.
Erstellen Sie Indizes (wenn Sie sie früher gelöscht haben, um die Performance beim erstmaligen Laden zu verbessern), bevor Sie das primäre Replicat starten.
-
-
Einschränkungen
-
Nur klassische und koordinierte Replicats unterstützen die bidirektionale und multidirektionale Replikation, paralleles Replicat wird nicht unterstützt.
-
Spaltenprobleme automatisch inkrementieren.
-
Wenn eine Tabelle eine Spalte enthält und es sich nicht um einen Primärschlüssel oder einen eindeutigen Schlüssel handelt, ist die Zuordnung nicht erfolgreich, weil die Kombination aller Spalten für diese Tabelle in Quelle und Ziel identisch ist.
-
Datentypen, DDL und andere Funktionseinschränkungen.
-
Wenn Sie die Active/Active-Replikation verwenden, müssen die Zeitzonen auf beiden Systemen identisch sein, damit die zeitstempelbasierte Konfliktauflösung und -erkennung funktionieren kann.
Verwandte Links
-
Verbindung zu Oracle Cloud Infrastructure GoldenGate mit einer privaten IP herstellen
-
MySQL: Voraussetzungen für die auf Transaktionslog basierende DDL-Konfiguration
-
Daten aus Datei in Replicat in der Microservices-Architektur laden
-
MySQL: Unterstützte Datentypen, Objekte und Vorgänge für OCI GoldenGate
Danksagungen
- Autor - Chakradhar Jagganagari (LIFT Implementation Specialist - Benutzerdefiniert, 3. Partei, VM-Datenbank und Apps)
Weitere Lernressourcen
Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie im Oracle Learning YouTube-Channel auf weitere kostenlose Lerninhalte zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.
Die Produktdokumentation finden Sie im Oracle Help Center.
Set up Bidirectional Replication Between Two Oracle Heatwave MySQL managed instances using OCI GoldenGate
G29680-02
Copyright ©2025, Oracle and/or its affiliates.