Hinweis:

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

Voraussetzungen

Aufgabe 1: OCI bereitstellen GoldenGate

  1. Melden Sie sich bei der OCI-Konsole an, suchen Sie nach GoldenGate, wählen Sie GoldenGate-Service aus, und klicken Sie auf Deployment erstellen.

  2. 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).

Aufgabe 2: Benutzer in Oracle HeatWave MySQL-Instanzen erstellen

  1. 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

  1. Gehen Sie zur OCI-Deployment-Seite GoldenGate, und klicken Sie auf Verbindungen, um die Verbindung einzurichten.

    Bild zum Erstellen einer Verbindung

  2. Geben Sie die Verbindungsinformationen ein.

    Bild mit GoldenGate-Verbindungen

  3. Wiederholen Sie die obigen Schritte, um sowohl Quell- als auch Zielverbindungen hinzuzufügen.

  4. Wählen Sie Deployments aus, und klicken Sie auf Zugewiesene Verbindungen, um die Verbindungen dem Deployment zuzuweisen.

    Bild, das zeigt, wie Verbindungen zum Deployment zugewiesen werden

Aufgabe 4: Ingress-Regeln und Sicherheitslisten für die OCI-Konsole GoldenGate einrichten

  1. 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
    
  2. Testen Sie die Verbindungen für Quell- und Zieldatenbanken in der OCI-Konsole und über die OCI-Konsole GoldenGate.

    1. Validieren Sie die MySQL-Instanzverbindungen in der OCI-Konsole.

      Bild zum Testen einer Verbindung

    2. Validieren Sie dieselben Verbindungen über die OCI-Konsole GoldenGate.

      Bild zum Testen einer Verbindung in der GG-Konsole

Aufgabe 5: Extract- und Replicat-Prozesse erstellen

  1. Erstellen Sie einen primären Extract (EXT1).

    1. Melden Sie sich bei der OCI-Konsole GoldenGate an.

    2. Gehen Sie zu Überblick, und klicken Sie im Abschnitt Extrakte auf +.

      Bild zum Hinzufügen von EXTRACT

    3. Geben Sie die Extraktdaten ein.

      Bild mit EXTRACT-Details

    4. 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.

    5. 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.

  2. Erstellen Sie ein primäres Replicat (REP1).

    1. Melden Sie sich bei der OCI-Konsole GoldenGate an.

    2. Gehen Sie zu Überblick, und klicken Sie im Abschnitt Replikat auf +.

      Bild mit REPLICAT-Details

      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)
      
    3. 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.

    4. 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:

      1. Gehen Sie in der OCI-Konsole GoldenGate zum Abschnitt Replicat.

      2. Wählen Sie das Replicat aus, klicken Sie auf Ändern, Bearbeiten, BEGIN, wählen Sie GTID aus, und geben Sie die GTID ein.

  3. 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.

    1. 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.
    2. 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.*;
      
    3. 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

  1. 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.

    1. Melden Sie sich bei der OCI-Konsole GoldenGate an.

    2. 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
      
  2. 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.

    1. 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.

    2. 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.

      1. Erstellen Sie einen primären Extract für die Quelle (starten Sie den Prozess noch nicht).

      2. 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.

      3. 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.

      4. Erstellen Sie ein primäres Replicat für das Ziel (starten Sie den Prozess noch nicht).

      5. 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).

    3. Nachfolgend ist die Reihenfolge aufgeführt, in der die Prozesse beim erstmaligen Laden von Extract gestartet werden sollen.

      1. Starten Sie den primären Extract, und notieren Sie sich die GTID, mit der er registriert wird.

      2. Starten Sie das Replicat, das für das erstmalige Laden von Extract erstellt wurde.

      3. 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.

      4. 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

Danksagungen

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.