Note:

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

Requisitos

Tarea 1: Despliegue de OCI GoldenGate

  1. Conéctese a la consola de OCI, busque GoldenGate, seleccione servicio GoldenGate y haga clic en Crear despliegue.

  2. 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).

Tarea 2: Creación de usuarios en instancias de Oracle HeatWave MySQL

  1. 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

  1. Vaya a la página de despliegue GoldenGate de OCI y haga clic en Conexiones para configurar la conexión.

    Imagen en la que se muestra cómo crear una conexión

  2. Introduzca la información de conexión.

    Imagen en la que se muestran las conexiones GoldenGate

  3. Repita los pasos anteriores para agregar conexiones de origen y destino.

  4. Seleccione Despliegues y haga clic en Conexiones asignadas para asignar las conexiones al despliegue.

    Imagen en la que se muestra cómo asignar conexiones al despliegue

Tarea 4: Configuración de reglas de entrada y listas de seguridad para la consola GoldenGate de OCI

  1. 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
    
  2. 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.

    1. Valide las conexiones de instancia MySQL en la consola de OCI.

      Imagen en la que se muestra cómo probar una conexión

    2. Valide las mismas conexiones desde la consola de OCI GoldenGate.

      Imagen en la que se muestra cómo probar una conexión en la consola GG

Tarea 5: Creación de los procesos de extracción y replicación

  1. Cree una extracción principal (EXT1).

    1. Conéctese a la consola de OCI GoldenGate.

    2. Vaya a Visión general y haga clic en + en la sección Extractos.

      Imagen en la que se muestra cómo agregar EXTRACT

    3. Introduzca la información de extracción.

      Imagen en la que se muestran los detalles de EXTRACT

    4. 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.

    5. 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.

  2. Cree un Replicat principal (REP1).

    1. Conéctese a la consola de OCI GoldenGate.

    2. Vaya a Visión general y haga clic en + en la sección Replicat.

      Imagen en la que se muestran los detalles de 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)
      
    3. 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.

    4. 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:

      1. Vaya a la sección Replicat en la consola de OCI GoldenGate.

      2. Seleccione el replicat, haga clic en Alter, Edit, BEGIN, seleccione GTID e introduzca el GTID.

  3. 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.

    1. 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.
    2. 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.*;
      
    3. 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

  1. 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.

    1. Conéctese a la consola de OCI GoldenGate.

    2. 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
      
  2. 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.

    1. 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.

    2. 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.

      1. Cree una extracción principal para el origen (todavía no inicie el proceso).

      2. Cree un Extract de carga inicial para el origen (no inicie el proceso aún) y capture el GTID en el origen.

      3. 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.

      4. Cree un Replicat principal para el destino (todavía no inicie el proceso).

      5. 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).

    3. A continuación se muestra el orden en el que se deben iniciar los procesos al utilizar Extract de carga inicial.

      1. Inicie el Extract principal y anote el GTID con el que se registra.

      2. Inicie el Replicat creado para la extracción de carga inicial.

      3. Edite el Extract de carga inicial y modifíquelo para que comience con el GTID que obtuvo al iniciar el Extract principal.

      4. 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

Agradecimientos

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.