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. In der Übung ersetzen Sie diese Werte durch die Werte, die für Ihre Cloud-Umgebung spezifisch sind.
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
- Migrieren Sie die On-Premise-Datenbank MySQL mit OCI GoldenGate zu einer von Oracle HeatWave MySQL verwalteten Instanz auf OCI.
Voraussetzungen
-
Die Quelldatenbank MySQL ist On-Premise, und die von Oracle Heatwave MySQL verwaltete Instanz und der OCI Bastion-Host sind vorhanden.
-
Da es sich um eine unidirektionale Replikation handelt, kann sich das Ziel auf einer höheren Version als der Quelle befinden. Bei der bidirektionalen Replikation wird empfohlen, dass Quelle und Ziel dieselbe Version aufweisen.
-
log_bin
(binlog) muss in der Quelle aktiviert sein. -
Der Instanzparameter
binlog_expire_logs_second
auf Quell- und Zielinstanzen muss mindestens 72 Stunden betragen. -
Der Instanzparameter
binlog_row_metadata
für Quell- und Zielinstanzen muss auf "Vollständig" gesetzt sein, damit die Data Definition Language-(DDL-)Replikation zulässig ist.Hinweis: In diesem Tutorial führt die Quelle die MySQL-Version
5.7.44
aus, wobei der Parameterbinlog_row_metadata
nicht unterstützt wird. DDL-Replikationen werden daher nicht unterstützt. -
Der GTID-(Global Transaction Identifier-)Modus muss auf der Quelle liegen, wenn die Oracle Heatwave MySQL-Zielinstanz High Availability (HA) aufweist. Andernfalls ist er optional.
-
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: Verwenden von MySQL-Shell-Utilitys wie
util.copyInstance
. - Methode 3: Mit OCI GoldenGate für den anfänglichen Extract und Replicat wird der anfängliche Dataload ausgeführt.
Hinweis: In diesem Tutorial wird
util.copyInstance
zum erstmaligen Laden verwendet. - Methode 1: Verwenden von MySQL-Shellutilitys wie
-
OCI-Bastion-Host mit MySQL-Client und MySQL-Shell-Utility in OCI installiert.
-
FastConnect/IPSec/VPN, Ingress-Regeln und aktualisierte Sicherheitslisten, um die Kommunikation zwischen On-Premise-Quelle, Oracle Heatwave MySQL, Bastion und OCI GoldenGate zu ermöglichen.
Einschränkungen
-
Spaltenprobleme automatisch erhöhen.
-
Wenn eine Tabelle eine Spalte enthält und es sich nicht um einen Primärschlüssel oder einen eindeutigen Schlüssel handelt, verläuft 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.
-
Bei der Active/Active-Replikation müssen die Zeitzonen auf beiden Systemen identisch sein, damit die zeitstempelbasierte Konfliktauflösung und -erkennung funktionieren kann.
Aufgabe 1: Quell- und Ziel-MySQL-Instanzen erstellen
-
Quelle:
-On-premise Hostname: MySQLCI57 OEL 7.9 MySQL version 5.7.44 Intel Hardware Standard.Flex3 with 4 CPUs and 32GB Dedicated VM
-
Ziel:
-OCI Oracle Heatwave MySQL Managed Instance Hostname: MySQLGG1 with HA and no heatwave (4CPU and 32GB) OEL 8 with latest build MySQL version: 8.4.4 Private subnet
-
OCI Bastion-Host:
-OCI Hostname: Bastion OEL 8 with Intel hardware Standard.Flex3 with 4CPUs and 32GB
Aufgabe 2: Verbindungen zwischen Bastion-, On-Premise- und Oracle Heatwave MySQL-Instanzen testen
-
Installieren Sie den MySQL-Client und das Shell-Utility MySQL auf dem OCI-Bastionhost.
-
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)
-
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
-
Quelle:
create user 'ggsuser_S'@'%' identified by "<password>"; grant all privileges on airportdb.* to 'ggsuser_S'@'%' with grant option; Grant select, process, replication slave, reload, replication client on *.* to 'ggsuser_S'@'%';
-
Ziel:
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'@'%'; Create database ggadmin; -- you create this db on target side to store the checkpoint table. grant all privileges on ggadmin.* to 'ggsuser_T'@'%' with grant option;
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.
-
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
-
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.
-
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)
-
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 Tabellemysql.gtid_executed
gespeichert ist.
Aufgabe 5: Schema airportdb
(nur Metadaten) in der Zieldatenbank erstellen
-
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.
-
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.
-
Melden Sie sich bei der OCI-Konsole an, und wählen Sie GoldenGate Deployments aus.
-
Klicken Sie auf Deployment erstellen, und geben Sie die erforderlichen Informationen ein, wie in der folgenden Abbildung gezeigt.
-
Fügen Sie Quell- und Zielverbindungsdetails auf der Seite Deployment erstellen hinzu.
-
Weisen Sie die Verbindungen dem OCI-Deployment GoldenGate zu. Klicken Sie auf den Verbindungsnamen und dann auf Deployment zuweisen.
-
Richten Sie mit dem OCI Bastion-Service die Portweiterleitung auf Port
443
ein, und melden Sie sich dann bei der OCI-Konsole GoldenGate an. -
Validieren Sie die Datenbankverbindungen über die OCI-Konsole GoldenGate.
-
Klicken Sie auf das Hamburger-Menü, und die beiden Verbindungen werden dem Deployment in Aufgabe 6.4 hinzugefügt.
-
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.
-
Aufgabe 7: Extract- und Replicat-Prozesse erstellen
-
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.
Hinweis: Hier wird das GTID-Set aus der JSON-Datei von
dumpInstance
oder der Ausgabe dercopyInstance
-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 vondumpInstance()
oder der Ausgabe voncopyInstance()
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 MySQLversion 5.7.4
nicht unterstützt wird.
-
-
Starten Sie den Extract-Prozess.
-
Extract wird ausgeführt, und die Traildatei wird generiert. Erstellen Sie jetzt Replicat.
-
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.
-
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.
-
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
-
Führen Sie einen Trockenlauf mit der Option
dryRun:"true"
voncopyInstance()
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):
-
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.
Replicat-Status wird als Wird ausgeführt angezeigt.
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.
-
Quelle:
mysql> select count(*) from passenger; +----------+ | count(*) | +----------+ | 36095 | +----------+ 1 row in set (0.01 sec) mysql> insert into passenger (passportno,firstname,lastname) values ('Pd89UKL','Timothy','London'); Query OK, 1 row affected (0.00 sec) mysql> commit -> ; Query OK, 0 rows affected (0.00 sec) mysql> select count(*) from passenger; +----------+ | count(*) | +----------+ | 36096 | +----------+ 1 row in set (0.00 sec) mysql> select @@version; +------------+ | @@version | +------------+ | 5.7.44-log | +------------+ 1 row in set (0.00 sec)
-
Ziel:
[root@bastion opc]# mysql --host <target IP> -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 1249 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> use airportdb; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> select count(*) from passenger; +----------+ | count(*) | +----------+ | 36096 | +----------+ 1 row in set (0.00 sec) mysql> select @@version -> ; +----------------+ | @@version | +----------------+ | 8.4.4-u5-cloud | +----------------+ 1 row in set (0.00 sec)
Verwandte Links
-
Verbindung zu Oracle Cloud Infrastructure GoldenGate mit einer privaten IP herstellen
-
MySQL: Voraussetzungen für die auf Transaktionslogs basierende DDL-Konfiguration
-
Daten aus Datei in Replicat in Microservices-Architektur laden
-
MySQL: Unterstützte Datentypen, Objekte und Vorgänge für OCI GoldenGate
Bestätigungen
- Autor - Chakradhar Jagganagari (Lift Implementation Expert - Datenbank)
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.
Migrate On-Premises MySQL Database to Oracle HeatWave MySQL Managed Instance using OCI GoldenGate
G34888-01
Copyright ©2025, Oracle and/or its affiliates.