Hinweis:

On-Premise-MySQL Database mit OCI zu verwalteter Oracle HeatWave MySQL-Instanz migrieren GoldenGate

Einführung

Oracle Cloud Infrastructure GoldenGate (OCI GoldenGate) ist ein vollständig verwalteter Service, mit dem Data Engineers Daten in Echtzeit und bedarfsgerecht von einem oder mehreren Datenmanagementsystemen in OCI-Datenbanken verschieben kann. 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 On-Premise-Datenbank MySQL mit OCI GoldenGate zu einer von Oracle HeatWave MySQL verwalteten Instanz migrieren.

Ziele

Voraussetzungen

Einschränkungen

Aufgabe 1: Quell- und Ziel-MySQL-Instanzen erstellen

Aufgabe 2: Verbindungen zwischen Bastion-, On-Premise- und Oracle Heatwave MySQL-Instanzen testen

  1. Installieren Sie den MySQL-Client und das Shell-Utility MySQL auf dem OCI-Bastionhost.

  2. Testen Sie die Verbindung von OCI Bastion zur On-Premise-Instanz MySQL.

    [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. Testen Sie die Verbindung von der On-Premise-Quellinstanz MySQL zur verwalteten Oracle Heatwave-Instanz 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)
    

Aufgabe 3: Benutzer für OCI erstellen GoldenGate

Aufgabe 4: Erforderliche Parameter in der Quelldatenbank für OCI festlegen GoldenGate

Es ist nicht erforderlich, GTID auf der Quelle zu aktivieren, wenn das Ziel eigenständig (nicht HA) ist. Wenn das Ziel jedoch HA ist, wird dringend empfohlen, GTID auf der Quelle zu aktivieren. Sie müssen den Modus binlog aktivieren.

  1. Bearbeiten Sie die Datei /etc/my.cnf, und fügen Sie die folgenden Zeilen hinzu.

    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. Starten Sie den MySQL-Server neu.

    Systemctl stop mysqld
    Systemctl start mysqld
    Systemctl status mysqld
    

    Eine vollständige Liste oder vollständige Parameter finden Sie in den Einstellungen und Anforderungen des Transaktionslogs. Weitere Informationen finden Sie unter Option B: Eigene Bastion auf OCI Compute verwenden.

  3. Führen Sie den folgenden Befehl aus, um zu prüfen, ob Binärlogs jetzt aktiviert sind.

    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. Führen Sie den folgenden Befehl durch, um zu prüfen, ob der GTID-Modus (gtid_mode) aktiviert ist.

    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
    

Hinweis: In der ersten Abfrage werden häufig NULL-Werte für GTID angezeigt. Der Grund dafür ist, dass in MySQL versions 5.7 der GTID-Wert nur in der Tabelle mysql.gtid_executed gespeichert ist.

Aufgabe 5: Schema airportdb (nur Metadaten) in der Zieldatenbank erstellen

  1. Extrahieren Sie die Schemametadaten aus der Quelldatenbank.

    [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. Importieren Sie die Schemametadaten in die Zieldatenbank.

    [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
    

Aufgabe 6: OCI GoldenGate-Deployment einrichten und Verbindungen hinzufügen

Es gibt mehrere Blogs und Tutorials zum Einrichten von OCI GoldenGate-Deployments. Hier werden einige Schritte gezeigt.

  1. Melden Sie sich bei der OCI-Konsole an, und wählen Sie GoldenGate Deployments aus.

  2. Klicken Sie auf Deployment erstellen, und geben Sie die erforderlichen Informationen ein, wie in der folgenden Abbildung gezeigt.

    Bild, das zeigt, wie das Golden Gate-Deployment erstellt wird

  3. Fügen Sie Quell- und Zielverbindungsdetails auf der Seite Deployment erstellen hinzu.

    Bild, das zeigt, wie eine Golden Gate-Verbindung für die Quelle erstellt wird

    Bild, das zeigt, wie eine Golden Gate-Verbindung für das Ziel erstellt wird

    Bild mit beiden hinzugefügten Verbindungen in GG

  4. Weisen Sie die Verbindungen dem OCI-Deployment GoldenGate zu. Klicken Sie auf den Verbindungsnamen und dann auf Deployment zuweisen.

    Bild, das zeigt, wie Sie einer Verbindung ein Deployment zuweisen

    Bild mit der Quellverbindung, die dem Deployment zugewiesen ist

    Image mit der Zielverbindung, die dem Deployment zugewiesen ist

  5. Richten Sie mit dem OCI Bastion-Service die Portweiterleitung auf Port 443 ein, und melden Sie sich dann bei der OCI-Konsole GoldenGate an.

    Bild mit URL der Goldengate-Homepage

  6. Validieren Sie die Datenbankverbindungen über die OCI-Konsole GoldenGate.

    1. Klicken Sie auf das Hamburger-Menü, und die beiden Verbindungen werden dem Deployment in Aufgabe 6.4 hinzugefügt.

    2. Klicken Sie auf Verbinden, um die Verbindungen zu validieren. Wenn Verbindungen erfolgreich sind, wird die Option zum Erstellen einer Checkpoint-Tabelle angezeigt, indem Sie auf Checkpoint + klicken.

      Es wird dringend empfohlen, die Verbindungen mit dem OCI-Deployment GoldenGate in OCI hinzuzufügen, da das DNS automatisch an die IP-Adressen angehängt wird, ohne dass diese DNS-Verbindungen nicht erfolgreich sind.

      Bild mit Goldengate-Verbindungen und Testverbindungen

Aufgabe 7: Extract- und Replicat-Prozesse erstellen

  1. Bevor Sie den Extract-Prozess erstellen, stellen Sie sicher, dass gtid_mode in der Quelldatenbank ON ist, insbesondere wenn das Ziel HA ist.

    Es gibt zwei Methoden zum Hinzufügen von Extract:

    • Methode 1: Sie können Extract hinzufügen, nachdem das erste Laden (Kopieren oder Dumpinstanz) abgeschlossen ist, und eine genaue Instanziierungsmethode verwenden. Weitere Informationen finden Sie unter Präzise Instanziierung für MySQL bis MySQL mit Shell-Utilitys MySQL und Oracle GoldenGate.

      Um Extract hinzuzufügen und zu starten, um Daten aus dieser bestimmten GTID oder diesem Binärlog zu erfassen, wie in der folgenden Abbildung dargestellt. Oracle empfiehlt, diese Methode zu verwenden.

      Bild, das das Goldengate-Extraktsetup zeigt

      Hinweis: Hier wird das GTID-Set aus der JSON-Datei von dumpInstance oder der Ausgabe der copyInstance-Befehle übernommen.

    • Methode 2: Sie können Extract ganz am Anfang hinzufügen, bevor Sie den ersten Dataload starten, und dann Replicat später so ändern, dass er mit einer bestimmten gtidexecuted/binlog#- und Binärlogposition beginnt, die in der JSON-Datei von dumpInstance() oder der Ausgabe von copyInstance() angezeigt wird.

      Verwenden Sie den Parameter HANDLECOLLISION mit dieser Methode, um Probleme mit doppelten Daten zu vermeiden.

      Hinweis: Für diesen Inhaltsverzeichnis wurde Methode 2 verwendet.

      Exportparameterdatei bearbeiten:

      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.*;
      

      Hinweis: Wenn Sie DDL INCLUDE MAPPED zur Extract-Parameterdatei hinzufügen, wird ein Fehler angezeigt, dass die DDL-Replikation für MySQL version 5.7.4 nicht unterstützt wird.

  2. Starten Sie den Extract-Prozess.

    Bild, das den Goldengate-Extrakt zeigt

  3. Extract wird ausgeführt, und die Traildatei wird generiert. Erstellen Sie jetzt Replicat.

    1. Erstellen Sie zuerst eine Checkpoint-Tabelle. Gehen Sie zum Abschnitt Konfiguration, wählen Sie die Zieldatenbank aus, und klicken Sie auf Checkpoint +, um eine Checkpoint-Tabelle zu erstellen.

      Bild, das die Erstellung der Goldengate-Checkpoint-Tabelle zeigt

    2. Replicat-Prozess erstellen. Da es sich um eine unidirektionale Replikation handelt, können wir für eine bessere Performance ein paralleles Replicat verwenden. Bei der bidirektionalen Replikation wird nur klassisches Replicat unterstützt.

      Starten Sie den Replicat-Prozess nicht, sondern erstellen Sie ihn. Es wird gestartet, nachdem die Daten importiert wurden.

      Bild, das die Erstellung des Goldengate-Replikats zeigt

    3. Bearbeiten Sie die Parameterdatei. Sie können auch PARALLEL-Parameter hinzufügen, oder die Standardparallelität wird verwendet.

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

Aufgabe 8: Daten mit copyInstance() aus Quelle in Ziel kopieren

  1. Führen Sie einen Trockenlauf mit der Option dryRun:"true" von copyInstance() aus.

    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. Wenn keine Fehler vorhanden sind, entfernen Sie die Option dryRun, und führen Sie den Dataload erneut aus. Die endgültige Ausgabe sollte wie folgt aussehen: Keine Fehler gemeldet.

    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
    

Hinweis: Notieren Sie sich die GTID, die in der Ausgabe von copyInstance() ausgeführt wird, und ändern Sie damit das Replicat.

Aufgabe 9: Replicat ändern und starten

Verwenden Sie die Logdateinummer 000006 und die Logpositionsnummer 626, wie in der Ausgabe von copyInstance() in Aufgabe 8 dargestellt. Diese Logdatei und Logposition müssen im Format verwendet werden, um CSN 000006:000000000000626 zu generieren.

Ändern Sie Replicat, und klicken Sie zum Starten auf Starten. Bild, das zeigt, wie Replicat geändert wird

Replicat-Status wird als Wird ausgeführt angezeigt.

Bild mit Replicat-Status

Hinweis: Wenn Sie Methode 1 zum Hinzufügen von Extract wie in Aufgabe 7 gezeigt verwendet haben, ist das Ändern von Replicat nicht erforderlich. In diesem POC haben wir Methode 2 zum Hinzufügen von Extract verwendet. Beide Methoden funktionieren gut.

Aufgabe 10: DML-Tests ausführen

Testen Sie die Replikation, indem Sie die DML-Aktivität auf der Quelle ausführen.

Bestätigungen

Weitere Lernressourcen

Sehen Sie sich weitere Übungen zu docs.oracle.com/learn an, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube-Kanal zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um ein Oracle Learning Explorer zu werden.

Die Produktdokumentation finden Sie im Oracle Help Center.