Nota
- Questa esercitazione richiede l'accesso a Oracle Cloud. Per iscriversi 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. Quando completi il tuo laboratorio, sostituisci questi valori con quelli specifici del tuo ambiente cloud.
Eseguire la migrazione di MySQL Database in locale all'istanza gestita 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 computazione. OCI GoldenGate supporta diverse origini e destinazioni, tra cui il servizio di database MySQL e Oracle HeatWave MySQL.
In questa esercitazione viene illustrato come eseguire la migrazione del database MySQL in locale all'istanza gestita di Oracle HeatWave MySQL utilizzando OCI GoldenGate.
Obiettivi
- Eseguire la migrazione del database MySQL in locale all'istanza gestita di Oracle HeatWave MySQL su OCI utilizzando OCI GoldenGate.
Prerequisiti
-
Il database MySQL di origine è on premise e l'istanza gestita Oracle Heatwave MySQL di destinazione e l'host OCI Bastion sono in posizione.
-
Poiché si tratta di una replica unidirezionale, la destinazione può avere una versione superiore a quella dell'origine. In caso di replica bidirezionale si consiglia che l'origine e la destinazione siano nella stessa versione.
-
log_bin
(binlog) deve essere abilitato nell'origine. -
Il parametro dell'istanza
binlog_expire_logs_second
nelle istanze di origine e destinazione deve essere impostato su almeno 72 ore. -
Il parametro di istanza
binlog_row_metadata
nelle istanze di origine e di destinazione deve essere impostato su Completo per consentire la replica DDL (Data Definition Language).Nota: in questa esercitazione, l'origine esegue MySQL versione
5.7.44
, dove il parametrobinlog_row_metadata
non è supportato. Pertanto, la replica DDL non è supportata. -
La modalità GTID (Global Transaction Identifier) deve essere nell'origine se l'istanza MySQL di Oracle Heatwave di destinazione dispone di High Availability (HA), altrimenti è facoltativa.
-
Rivedere i tipi di dati supportati. Per ulteriori informazioni, vedere MySQL: Tipi di dati, oggetti e operazioni supportati.
-
Esaminare le limitazioni di replica DDL. Per ulteriori informazioni, vedere Uso 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 della shell MySQL quali
util.dumpInstance
eutil.loadDump
. - Metodo 2: utilizzando le utility della shell MySQL come
util.copyInstance
. - Metodo 3: uso di OCI GoldenGate per Extract e Replicat iniziali per eseguire il caricamento iniziale dei dati.
Nota: in questa esercitazione verrà utilizzato
util.copyInstance
per il caricamento iniziale. - Metodo 1: utilizzo di utility della shell MySQL quali
-
Host bastion OCI con client MySQL e utility shell MySQL installata in OCI.
-
FastConnect/IPSec/VPN, regole di entrata e liste di sicurezza aggiornate per consentire la comunicazione tra l'origine on premise, Oracle Heatwave MySQL di destinazione, bastion e OCI GoldenGate.
Limiti
-
Incremento automatico problemi colonna.
-
Se una tabella ha una 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 che la risoluzione e il rilevamento dei conflitti basati sull'indicatore orario possano funzionare.
Task 1: Crea istanze MySQL di origine e destinazione
-
Origine:
-On-premise Hostname: MySQLCI57 OEL 7.9 MySQL version 5.7.44 Intel Hardware Standard.Flex3 with 4 CPUs and 32GB Dedicated VM
-
Destinazione:
-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
-
Host bastion OCI:
-OCI Hostname: Bastion OEL 8 with Intel hardware Standard.Flex3 with 4CPUs and 32GB
Task 2: Test delle connessioni tra istanze Bastion, On-Premises e Oracle Heatwave MySQL
-
Installare il client MySQL e la utility Shell MySQL nell'host Bastion OCI.
-
Eseguire il test della connessione da OCI Bastion all'istanza MySQL in locale di origine.
[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)
-
Eseguire il test della connessione dall'istanza gestita MySQL on premise di origine all'istanza gestita Oracle Heatwave 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)
Task 3: Creare utenti per OCI GoldenGate
-
Origine:
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'@'%';
-
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'@'%'; 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;
Task 4: Imposta parametri obbligatori nel database di origine per OCI GoldenGate
Non è obbligatorio attivare GTID sull'origine se la destinazione è standalone (non HA). Ma se il target è HA, si consiglia vivamente di attivare GTID sull'origine. È obbligatorio attivare la modalità binlog
.
-
Modificare il file
/etc/my.cnf
e aggiungere le righe seguenti.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
-
Riavviare il server MySQL.
Systemctl stop mysqld Systemctl start mysqld Systemctl status mysqld
Per un elenco completo o parametri, controllare le impostazioni e i requisiti del log delle transazioni. Per ulteriori informazioni, vedere Opzione B: utilizzare il bastion personale su OCI Compute.
-
Eseguire il comando seguente per verificare che i log binari siano abilitati ora.
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)
-
Eseguire il comando seguente per verificare che la modalità GTID (
gtid_mode
) sia attiva.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
Nota: è comune che la prima query mostri valori NULL per GTID. Questo perché in MySQL
versions 5.7
il valore GTID viene memorizzato solo nella tabellamysql.gtid_executed
.
Task 5: Creare lo schema airportdb
(solo metadati) nel database di destinazione
-
Estrai i metadati dello schema dal database di origine.
[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.
-
Importare i metadati dello schema nel database di destinazione.
[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
Task 6: Impostare la distribuzione OCI GoldenGate e aggiungere connessioni
Esistono diversi blog e esercitazioni su come impostare le distribuzioni OCI GoldenGate, pertanto in questa sezione verranno illustrati alcuni passi.
-
Eseguire il login a OCI Console e selezionare GoldenGate Distribuzioni.
-
Fare clic su Crea distribuzione e immettere le informazioni necessarie come mostrato nell'immagine riportata di seguito.
-
Aggiungere i dettagli di connessione di origine e destinazione nella pagina Crea distribuzione.
-
Assegnare le connessioni alla distribuzione OCI GoldenGate. Fare clic sul nome della connessione, quindi su Assegna distribuzione.
-
Utilizzando il servizio OCI Bastion, impostare l'inoltro delle porte per la porta
443
, quindi eseguire il login alla console OCI GoldenGate. -
Convalidare le connessioni al database dalla console OCI GoldenGate.
-
Fare clic sul menu Hamburger e le due connessioni aggiunte alla distribuzione verranno visualizzate nel task 6.4.
-
Fare clic su Connetti per convalidare le connessioni. Se le connessioni hanno esito positivo, verrà visualizzata l'opzione per creare la tabella dei checkpoint facendo clic su Checkpoint +.
Si consiglia di aggiungere le connessioni utilizzando la distribuzione OCI GoldenGate in OCI in quanto aggiungerà automaticamente il DNS agli indirizzi IP, senza questi DNS le connessioni di test non riusciranno.
-
Task 7: Crea processi Extract e Replicat
-
Prima di creare il processo Extract, assicurarsi che
gtid_mode
sia ON nel database di origine, soprattutto se la destinazione è HA.Esistono due metodi per aggiungere Extract:
-
Metodo 1: è possibile aggiungere Extract dopo che il caricamento iniziale (istanza di copia o dump) è stato completato e utilizzare un metodo di creazione delle istanze preciso. Per ulteriori informazioni, vedere Creazione di un'istanza precisa per MySQL in MySQL mediante le utility Shell MySQL e Oracle GoldenGate.
Per aggiungere Extract e avviarlo per eseguire l'acquisizione dei dati da quel particolare GTID o binlog come mostrato nell'immagine seguente. Oracle consiglia di utilizzare questo metodo.
Nota: qui il set GTID viene preso dal file JSON del comando
dumpInstance
o dall'output dei comandicopyInstance
. -
Metodo 2: è possibile aggiungere Extract all'inizio prima ancora di avviare il caricamento iniziale dei dati e poi modificare Replicat per iniziare con una particolare posizione
gtidexecuted/binlog#
e binlog visualizzata nel file JSON del filedumpInstance()
o nell'output dicopyInstance()
.Utilizzare il parametro
HANDLECOLLISION
con questo metodo per evitare problemi di dati duplicati.Nota: per questo sommario, è stato utilizzato il metodo 2.
Modificare il file dei parametri di estrazione:
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.*;
Nota: se si aggiunge
DDL INCLUDE MAPPED
al file dei parametri Extract, verrà visualizzato un errore che indica che la replica DDL non è supportata per MySQLversion 5.7.4
.
-
-
Avviare il processo Extract.
-
Extract è in esecuzione e genera il file trail, ora crea Replicat.
-
Creare prima la tabella di checkpoint. Andare alla sezione Configurazione, selezionare il database di destinazione e fare clic su Checkpoint + per creare la tabella di checkpoint.
-
Crea il processo Replicat. Poiché si tratta di una replica unidirezionale, possiamo utilizzare Replicat parallelo per ottenere prestazioni migliori. Per la replica bidirezionale è supportato solo Replicat classico.
Non avviare il processo Replicat, ma crearlo. Verrà avviato dopo l'importazione dei dati.
-
Modificare il file dei parametri. È inoltre possibile aggiungere parametri
PARALLEL
oppure verrà utilizzato il parallelismo predefinito.REPLICAT rep1 USERIDALIAS MySQLGG1, DOMAIN OracleGoldenGate MAP airportdb.*, TARGET airportdb.*;
-
Task 8: Copia dati da origine a destinazione mediante copyInstance()
-
Eseguire una lavorazione a secco utilizzando l'opzione
dryRun:"true"
dicopyInstance()
.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):
-
Se non si verificano errori, rimuovere l'opzione
dryRun
ed eseguire di nuovo il caricamento dei dati. L'output finale dovrebbe essere il seguente: Nessun errore segnalato.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
Nota: prendere nota del GTID eseguito mostrato nell'output di
copyInstance()
e utilizzarlo per modificare il Replicat.
Task 9: Modifica Replicat e Start
Utilizzare il numero di file di log che è 000006
e il numero di posizione di log che è 626
come mostrato nell'output di copyInstance()
nel task 8. Questo file di log e questa posizione di log devono essere utilizzati nel formato per generare CSN 000006:000000000000626
.
Modificare Replicat e fare clic su Avvia per iniziare.
Stato Replicat visualizzato come In esecuzione.
Nota: se è stato utilizzato il metodo 1 per aggiungere Extract come mostrato nel task 7, la modifica di Replicat non sarà necessaria. In questo POC, è stato utilizzato il metodo 2 per aggiungere Extract. Entrambi i metodi funzionano bene.
Task 10: Esegui test DML
Eseguire il test della replica eseguendo l'attività DML sull'origine.
-
Origine:
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)
-
Destinazione:
[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)
Collegamenti correlati
-
Connettersi a Oracle Cloud Infrastructure GoldenGate utilizzando un IP privato
-
MySQL: prerequisiti per la configurazione DDL basata sul 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 di implementazione Lift - Database)
Altre risorse di apprendimento
Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti di formazione gratuiti sul canale YouTube di Oracle Learning. Inoltre, visitare education.oracle.com/learning-explorer per diventare Oracle Learning Explorer.
Per la documentazione del prodotto, visitare Oracle Help Center.
Migrate On-Premises MySQL Database to Oracle HeatWave MySQL Managed Instance using OCI GoldenGate
G34892-01
Copyright ©2025, Oracle and/or its affiliates.