Note:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse en una cuenta gratuita, consulte Introducción a la cuenta gratuita de Oracle Cloud Infrastructure.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al finalizar el laboratorio, sustituya estos valores por otros específicos de su entorno en la nube.
Migración de MySQL Database local a una instancia gestionada por Oracle HeatWave MySQL mediante OCI GoldenGate
Introducción
Oracle Cloud Infrastructure GoldenGate (OCI GoldenGate) es un servicio totalmente gestionado que ayuda a los ingenieros de datos a mover los datos en tiempo real, a escala, de uno o más sistemas de gestión de datos a bases de datos de OCI. Diseñe, ejecute, organice y supervise tareas de replicación de datos en una sola interfaz sin tener que asignar ni gestionar ningún entorno informático. OCI GoldenGate soporta varios orígenes y destinos, incluidos MySQL y el servicio de base de datos Oracle HeatWave MySQL.
En este tutorial, le guiaremos sobre cómo migrar la base de datos MySQL local a la instancia gestionada por Oracle HeatWave MySQL mediante OCI GoldenGate.
Objetivos
- Migre la base de datos MySQL local a la instancia gestionada de Oracle HeatWave MySQL en OCI mediante OCI GoldenGate.
Requisitos
-
La base de datos MySQL de origen es local y la instancia gestionada MySQL de Oracle Heatwave de destino y el host de OCI Bastion están en su lugar.
-
Dado que se trata de una replicación unidireccional, el destino puede estar en una versión superior a la del origen. En caso de replicación bidireccional, se recomienda que el origen y el destino estén en la misma versión.
-
log_bin
(binlog) debe estar activado en el origen. -
El parámetro de instancia
binlog_expire_logs_second
en las instancias de origen y destino se debe definir en al menos 72 horas. -
El parámetro de instancia
binlog_row_metadata
en las instancias de origen y destino se debe definir en full para permitir la replicación del lenguaje de definición de datos (DDL).Nota: En este tutorial, el origen está ejecutando la versión MySQL
5.7.44
, donde el parámetrobinlog_row_metadata
no está soportado. Por lo tanto, la replicación de DDL no está soportada. -
El modo de identificador de transacción global (GTID) debe estar en el origen si la instancia MySQL de Oracle Heatwave de destino tiene alta disponibilidad (HA); de lo contrario, es opcional.
-
Revisión de los tipos de dato soportados. Para obtener más información, consulte MySQL: tipos de dato, objetos y operaciones soportados.
-
Revise las limitaciones de replicación de DDL. Para obtener más información, consulte Uso de la replicación DDL.
-
La instancia de destino se debe crear con antelación desde el origen mediante uno de estos métodos:
- Método 1: uso de utilidades de shell MySQL como
util.dumpInstance
yutil.loadDump
. - Método 2: uso de utilidades de shell MySQL como
util.copyInstance
. - Método 3: uso de OCI GoldenGate para Extract y Replicat iniciales para realizar la carga de datos inicial.
Nota: En este tutorial, utilizaremos
util.copyInstance
para la carga inicial. - Método 1: uso de utilidades de shell MySQL como
-
Host de OCI Bastion con el cliente MySQL y la utilidad Shell MySQL instalados en OCI.
-
FastConnect/IPSec/VPN, reglas de entrada y listas de seguridad actualizadas para permitir la comunicación entre el origen local, el destino Oracle Heatwave MySQL, el bastión y OCI GoldenGate.
Limitaciones
-
Incidencias de columna de incremento automático.
-
Si una tabla tiene una columna y no es clave primaria ni clave única, la asignación falla porque la combinación de todas las columnas de esa tabla es la misma en el origen y el destino.
-
Tipos de dato, DDL y otras limitaciones de funciones.
-
Cuando se utiliza la replicación Activo-Activo, las zonas horarias deben ser las mismas en ambos sistemas, de modo que la resolución y la detección de conflictos basados en el registro de hora puedan funcionar.
Tarea 1: Creación de instancias MySQL de origen y destino
-
Origen:
-On-premise Hostname: MySQLCI57 OEL 7.9 MySQL version 5.7.44 Intel Hardware Standard.Flex3 with 4 CPUs and 32GB Dedicated VM
-
Objetivo:
-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 de OCI Bastion:
-OCI Hostname: Bastion OEL 8 with Intel hardware Standard.Flex3 with 4CPUs and 32GB
Tarea 2: Prueba de conexiones entre instancias MySQL de Bastion, locales y Oracle Heatwave
-
Instale el cliente MySQL y la utilidad de shell MySQL en el host de OCI Bastion.
-
Probar la conexión de OCI Bastion a la instancia MySQL local de origen.
[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)
-
Pruebe la conexión del origen local MySQL a la instancia gestionada MySQL de Oracle Heatwave.
[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)
Tarea 3: Creación de usuarios para OCI GoldenGate
-
Origen:
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'@'%';
-
Objetivo:
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;
Tarea 4: Definición de parámetros obligatorios en la base de datos de origen para OCI GoldenGate
No es obligatorio activar GTID en el origen si el destino es independiente (no HA). Sin embargo, si el destino es HA, se recomienda activar GTID en el origen. Es obligatorio activar el modo binlog
.
-
Edite el archivo
/etc/my.cnf
y agregue las siguientes líneas.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
-
Reinicie el servidor MySQL.
Systemctl stop mysqld Systemctl start mysqld Systemctl status mysqld
Para obtener una lista o parámetros completos, consulte los requisitos y la configuración del log de transacciones. Para obtener más información, consulte Opción B: uso de su propio bastión en OCI Compute.
-
Ejecute el siguiente comando para comprobar que los logs binarios están activados ahora.
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)
-
Ejecute el siguiente comando para verificar que el modo GTID (
gtid_mode
) esté activado.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: Es común que la primera consulta muestre valores NULL para GTID. Esto se debe a que en MySQL
versions 5.7
el valor de GTID solo se almacena en la tablamysql.gtid_executed
.
Tarea 5: Crear el esquema airportdb
(solo metadatos) en la base de datos de destino
-
Extraiga los metadatos del esquema de la base de datos origen.
[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.
-
Importe los metadatos del esquema a la base de datos destino.
[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
Tarea 6: Configuración del despliegue GoldenGate de OCI y adición de conexiones
Hay varios blogs y tutoriales sobre cómo configurar despliegues de OCI GoldenGate, por lo que aquí vamos a mostrar algunos pasos.
-
Conéctese a la consola de OCI y seleccione GoldenGate Despliegues.
-
Haga clic en Crear despliegue e introduzca la información necesaria como se muestra en la siguiente imagen.
-
Agregue los detalles de conexión de origen y destino en la página Crear despliegue.
-
Asigne las conexiones al despliegue GoldenGate de OCI. Haga clic en el nombre de conexión y, a continuación, en Asignar despliegue.
-
Mediante el servicio OCI Bastion, configure el reenvío del puerto al puerto
443
y, a continuación, conéctese a la consola GoldenGate de OCI. -
Valide las conexiones de base de datos desde la consola GoldenGate de OCI.
-
Haga clic en el menú Hamburguesa y verá las dos conexiones agregadas al despliegue en la tarea 6.4.
-
Haga clic en Conectar para validar las conexiones. Si las conexiones se realizan correctamente, verá la opción de crear una tabla de puntos de control haciendo clic en Punto de control +.
Se recomienda agregar las conexiones mediante el despliegue de OCI GoldenGate en OCI, ya que agregará automáticamente el DNS a las direcciones IP, sin estos DNS, las conexiones de prueba fallarán.
-
Tarea 7: Creación de procesos de Extract y Replicat
-
Antes de crear el proceso de extracción, asegúrese de que
gtid_mode
esté ON en la base de datos de origen, especialmente si el destino es HA.Hay dos métodos para agregar Extract:
-
Método 1: puede agregar Extract después de que se haya completado la carga inicial (instancia de copia o volcado) y utilizar un método de instanciación preciso. Para obtener más información, consulte Instanciación precisa para MySQL a MySQL mediante las utilidades de shell MySQL y Oracle GoldenGate.
Para agregar Extract e iniciarla para realizar la captura de datos desde ese GTID o log bin concreto, como se muestra en la siguiente imagen. Oracle recomienda utilizar este método.
Nota: Aquí, el juego de GTID se toma del archivo JSON de
dumpInstance
o de la salida de los comandoscopyInstance
. -
Método 2: puede agregar Extract al principio incluso antes de iniciar la carga de datos inicial y, a continuación, modificar Replicat para que empiece con una posición de binlog y
gtidexecuted/binlog#
concreta que se muestra en el archivo JSON dedumpInstance()
o la salida decopyInstance()
.Utilice el parámetro
HANDLECOLLISION
con este método para evitar cualquier incidencia de datos duplicados.Nota: Para este punto de cuidados, se utilizó el método 2.
Edite el archivo de parámetros de extracción:
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: Si agrega
DDL INCLUDE MAPPED
al archivo de parámetros Extract, obtendrá el error de que la replicación de DDL no está soportada para MySQLversion 5.7.4
.
-
-
Inicie el proceso de Extract.
-
Extract se está ejecutando y generando el archivo de pista; ahora cree Replicat.
-
Cree primero una tabla de puntos de control. Vaya a la sección Configuración, seleccione la base de datos de destino y haga clic en Punto de Control + para crear la tabla de puntos de control.
-
Crear proceso de Replicat. Dado que se trata de una replicación unidireccional, podemos ir con Replicat paralelo para un mejor rendimiento. Para replicación bidireccional, solo se admite Replicat clásico.
No inicie el proceso de Replicat, solo créelo. Lo iniciaremos después de importar los datos.
-
Edite el archivo de parámetros. También puede agregar parámetros
PARALLEL
o se utilizará el paralelismo por defecto.REPLICAT rep1 USERIDALIAS MySQLGG1, DOMAIN OracleGoldenGate MAP airportdb.*, TARGET airportdb.*;
-
Tarea 8: Copia de datos del origen al destino mediante copyInstance()
-
Realice una ejecución simulada mediante la opción
dryRun:"true"
decopyInstance()
.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):
-
Si no hay errores, elimine la opción
dryRun
y vuelva a ejecutarla para realizar la carga de datos. La salida final se debe parecer a la siguiente: No se han notificado errores.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: Anote el GTID ejecutado que se muestra en la salida de
copyInstance()
y úselo para modificar el Replicat.
Tarea 9: Modificar Replicat e Iniciar
Utilice el número de archivo log que es 000006
y el número de posición de log que es 626
como se muestra en la salida de copyInstance()
en la tarea 8. Este archivo log y la posición de log se deben utilizar con el formato para generar CSN 000006:000000000000626
.
Modifique Replicat y haga clic en Iniciar para iniciar.
El estado de Replicat se muestra como En ejecución.
Nota: Si ha utilizado el método 1 para agregar Extract como se muestra en la tarea 7, no será necesario modificar Replicat. En este punto de control, se utilizó el método 2 para agregar Extract. Cualquiera de los métodos funciona bien.
Tarea 10: Ejecutar pruebas DML
Pruebe la replicación realizando la actividad DML en el origen.
-
Origen:
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)
-
Objetivo:
[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)
Enlaces relacionados
-
Conexión a Oracle Cloud Infrastructure GoldenGate mediante una IP privada
-
MySQL: requisitos para la configuración de DDL basada en log de transacciones
-
Carga de datos del archivo a Replicat en la arquitectura de microservicios
-
MySQL: tipos de dato, objetos y operaciones soportados para OCI GoldenGate
Acuses de recibo
- Autor: Chakradhar Jagganagari (Experto en implantación de elevadores - Base de datos)
Más recursos de aprendizaje
Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.
Para obtener documentación sobre el producto, visite Oracle Help Center.
Migrate On-Premises MySQL Database to Oracle HeatWave MySQL Managed Instance using OCI GoldenGate
G34889-01
Copyright ©2025, Oracle and/or its affiliates.