Note:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse para obtener 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 la práctica, sustituya estos valores por otros específicos de su entorno en la nube.
Configurar la replicación bidireccional entre dos instancias gestionadas de 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 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 configurar la replicación bidireccional mediante OCI GoldenGate entre dos instancias de Oracle HeatWave MySQL en OCI.
Objetivos
- Configure la replicación bidireccional entre dos instancias gestionadas de Oracle HeatWave MySQL mediante OCI GoldenGate en OCI.
Requisitos
-
Las instancias de Oracle HeatWave MySQL de origen y destino deben utilizar el motor
InnoDB
y deben estar en ejecución en las versiones5.7
o8.*
. -
Para la replicación bidireccional, se recomienda utilizar la misma versión de la instancia MySQL en el origen y el destino.
-
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 completo para permitir la replicación del lenguaje de definición de datos (DDL).Nota: Los parámetros de instancia solo se pueden cambiar mediante la creación de una configuración personalizada. Para obtener más información, consulte Creación de una configuración personalizada para MySQL.
-
Revise los tipos de datos 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 de 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: mediante la opción de copia de seguridad y restauración basada en la consola de OCI.
- Método 3: Uso de OCI GoldenGate para Extract y Replicat iniciales para realizar la carga de datos inicial. En este tutorial se ha utilizado este método (Tarea 7).
- Método 1: Uso de utilidades de shell MySQL como
-
Por diseño, el Extract ignora las DDL de la tabla de latidos. Debe crear la tabla de latidos manualmente en el destino.
-
Host bastión con cliente MySQL instalado.
-
Reglas de entrada y listas de seguridad actualizadas para permitir la comunicación entre el origen, el destino, el bastión y OCI GoldenGate.
Tarea 1: Despliegue de OCI GoldenGate
-
Conéctese a la consola de OCI, busque GoldenGate, seleccione servicio GoldenGate y haga clic en Crear despliegue.
-
Introduzca la siguiente información y haga clic en Crear.
- Nombre: introduzca
MySQLggdeployment1
. - Tipo de despliegue: seleccione Replicación de datos.
- Seleccionar tecnología: seleccione MySQL.
- Seleccionar versión: introduzca
21.15
. - Configuración de hardware: introduzca # de OCPU.
- Selección de subred: seleccione la subred.
- Tipo de licencia: seleccione el tipo de licencia.
- Nombre de instancia: introduzca
GGInstance1
. - Almacén de credenciales: seleccione GoldenGate (cree un nuevo secreto de contraseña o seleccione uno existente).
- Nombre: introduzca
Tarea 2: Creación de usuarios en instancias de Oracle HeatWave MySQL
-
Utilice el host de OCI Bastion para conectarse a las instancias MySQL de origen y destino y crear usuarios para los procesos de extracción y replicación de OCI GoldenGate. Ejecute la siguiente consulta:
-
En la instancia MySQL de origen.
> 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'@'%';
-
En la instancia de destino 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'@'%';
-
Tarea 3: Configuración de conexiones en el despliegue GoldenGate de OCI
-
Vaya a la página de despliegue GoldenGate de OCI y haga clic en Conexiones para configurar la conexión.
-
Introduzca la información de conexión.
-
Repita los pasos anteriores para agregar conexiones de origen y destino.
-
Seleccione Despliegues y haga clic en Conexiones asignadas para asignar las conexiones al despliegue.
Tarea 4: Configuración de reglas de entrada y listas de seguridad para la consola GoldenGate de OCI
-
Configure reglas de entrada y actualice las listas de seguridad para permitir la comunicación entre las instancias de Oracle HeatWave MySQL, el despliegue de OCI GoldenGate y los recursos informáticos de OCI Bastion.
Nota: Si utiliza VPN, puede omitir este paso.
Siga los pasos que se muestran aquí: Opción B: utilice su propio bastión en OCI Compute.
ssh -i <private-ssh-key-of-bastion-compute> opc@<bastion-compute-public-ip> -L 443:<GoldenGategate-deployment-hostname>:443 -N
-
Pruebe las conexiones para las bases de datos de origen y destino en la consola de OCI y a través de la consola de OCI GoldenGate.
-
Valide las conexiones de instancia MySQL en la consola de OCI.
-
Valide las mismas conexiones desde la consola de OCI GoldenGate.
-
Tarea 5: Creación de los procesos de extracción y replicación
-
Cree una extracción principal (
EXT1
).-
Conéctese a la consola de OCI GoldenGate.
-
Vaya a Visión general y haga clic en + en la sección Extractos.
-
Introduzca la información de extracción.
-
Edite el archivo de parámetros según sea necesario. El siguiente archivo de parámetros captura todos los cambios en la base de datos
classicmodels
, incluidos los cambios de DDL.EXTRACT ext1 USERIDALIAS MySQLpoc1, DOMAIN OracleGoldenGate EXTTRAIL e1 DDL INCLUDE MAPPED TRANLOGOPTIONS FETCHPARTIALJSON TABLE classicmodels.*;
Nota:
MySQLpoc1
es una instancia de origen. -
Inicie Extract y anote el identificador de transacción global (GTID) en el origen.
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>
Inicie Extract y manténgalo en ejecución todo el tiempo, incluso cuando aún esté trabajando en la configuración de la base de datos de destino para asegurarse de que se capturan todos los cambios.
-
-
Cree un Replicat principal (
REP1
).-
Conéctese a la consola de OCI GoldenGate.
-
Vaya a Visión general y haga clic en + en la sección Replicat.
Nota: El nombre de la tabla de puntos de control debe tener como prefijo el nombre de base de datos/esquema en minúsculas. Si no lo hace, la creación de la tabla de puntos de control fallará.
Por ejemplo,
classicmodels.OCIGG_CHECKPOINT_REP1
.Se recomienda crear una base de datos/esquema dedicado independiente (por ejemplo, esquema
ggadmin
) para la tabla de puntos de control.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)
-
Edite el archivo de parámetros según sea necesario. El siguiente archivo de parámetros replica todos los objetos de la base de datos
classicmodels
junto con los cambios de DDL.REPLICAT rep1 USERIDALIAS MySQLpoc2, DOMAIN OracleGoldenGate DDL INCLUDE MAPPED MAP classicmodels.*, TARGET classicmodels.*;
Nota:
MySQLpoc2
es una instancia de destino. -
Puesto que este es el Replicat principal y se inició por primera vez, comenzará a aplicar desde el archivo de pista 0. Sin embargo, si desea modificar el Replicat para que comience desde un GTID concreto, siga los pasos:
-
Vaya a la sección Replicat en la consola de OCI GoldenGate.
-
Seleccione el replicat, haga clic en Alter, Edit, BEGIN, seleccione GTID e introduzca el GTID.
-
-
-
Hasta ahora, hemos configurado unidirectional para la replicación de lenguaje de manipulación de datos (DML) y DDL. Una vez que la replicación unidireccional está sincronizada, podemos continuar con la replicación bidireccional.
-
Repita los pasos 5.1 y 5.2, pero esta vez revertiremos los detalles de origen y destino. La instancia de base de datos de origen actuará ahora como instancia de destino y la instancia de destino actuará como instancia de origen.
- Origen: introduzca
MySQLpoc2
. - Destino: introduzca
MySQLpoc1
. - Para este caso de uso, hemos utilizado una segunda base de datos
airportdb
. Puede configurar la replicación bidireccional para la misma base de datos.
- Origen: introduzca
-
Agregue el Extract principal (
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.*;
-
Cree manualmente una tabla de puntos de control, ya que se trata de un Replicat clásico. Solo se admiten los replicados clásicos y coordinados para la replicación bidireccional.
For example: ggadmin.OCIGG*CHECKPOINT_REP`- Add primary REPLICAT REP2:` REPLICAT rep2 USERIDALIAS MySQLpoc1, DOMAIN OracleGoldenGate DDL INCLUDE MAPPED MAP airportdb.*, TARGET airportdb.\_;
-
Tarea 6: Ejecución de pruebas DDL y DML
Una vez finalizada la configuración bidireccional, es el momento de ejecutar pruebas DML y DDL simples.
--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>
Tarea 7: Configurar extracción de carga inicial
-
Configure el Extract de carga inicial si desea aprovechar OCI GoldenGate para realizar la carga inicial de datos en la base de datos de destino.
-
Conéctese a la consola de OCI GoldenGate.
-
Vaya a Visión general y haga clic en + en la sección Extraer. Esto es muy similar a la creación de un Extract principal. La única diferencia es seleccionar Tipo de extracción como Carga inicial al crear un Extract.
Archivo de parámetros para la extracción de carga inicial.
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
-
-
Asimismo, configure un Replicat que leerá los archivos de pista generados por la carga inicial de Extract. Este Replicat y el Extract de carga inicial se borrarán una vez que se haya completado la carga inicial.
-
En la base de datos destino, asegúrese de que todas las tablas están vacías. Borrar/Desactivar todas las claves ajenas en el destino. Desactivar Disparadores e Índices en el Destino para mejorar el rendimiento de carga inicial.
Nota: Realice una copia de seguridad de las DDL de objetos de esquema antes de borrarlas.
-
A continuación se muestra el orden en el que se deben crear los procesos de Extract y Replicat si se utiliza Extract de carga inicial para la carga de datos inicial.
-
Cree una extracción principal para el origen (todavía no inicie el proceso).
-
Cree un Extract de carga inicial para el origen (no inicie el proceso aún) y capture el GTID en el origen.
-
Cree un Replicat para procesar los archivos de pista generados por el Extract de carga inicial para el destino (todavía no inicie el proceso).
Nota: No hay ningún tipo de Replicat independiente para la carga inicial.
-
Cree un Replicat principal para el destino (todavía no inicie el proceso).
-
Utilice la misma tabla de puntos de control para Replicat de carga inicial y Replicat principal. La carga inicial de Replicat apunta a los archivos de pista de Extract iniciales y los puntos de Replicat principales a los archivos de pista de Extract principales (ambos archivos de pista son diferentes).
-
-
A continuación se muestra el orden en el que se deben iniciar los procesos al utilizar Extract de carga inicial.
-
Inicie el Extract principal y anote el GTID con el que se registra.
-
Inicie el Replicat creado para la extracción de carga inicial.
-
Edite el Extract de carga inicial y modifíquelo para que comience con el GTID que obtuvo al iniciar el Extract principal.
-
Inicie el Replicat principal.
Nota:
- Inicie el Replicat principal solo después de que tanto Extract como Replicat de carga inicial para la carga inicial estén sincronizados (LAG 0).
- Cree o active las claves ajenas antes de iniciar el Replicat principal.
Cree índices (si los ha borrado anteriormente para mejorar el rendimiento de carga inicial) antes de iniciar el Replicat principal.
-
-
Limitaciones
-
Solo los replicados clásicos y coordinados admiten la replicación bidireccional y multidireccional, no se admite el Replicat paralelo.
-
Incremento automático de problemas de columnas.
-
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.
-
Al utilizar la replicación activo-activo, las zonas horarias deben ser las mismas en ambos sistemas para que la resolución y la detección de conflictos basadas en el registro de hora puedan funcionar.
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 en Replicat en la arquitectura de microservicios
-
MySQL: tipos de dato, objetos y operaciones soportados para OCI GoldenGate
Agradecimientos
- Autor: Chakradhar Jagganagari (especialista en implementación de LIFT - Personalizado, 3a parte, VM Database & Apps)
Más recursos de aprendizaje
Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de formación gratuita 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.
Set up Bidirectional Replication Between Two Oracle Heatwave MySQL managed instances using OCI GoldenGate
G29681-02
Copyright ©2025, Oracle and/or its affiliates.