Note:

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

Requisitos

Limitaciones

Tarea 1: Creación de instancias MySQL de origen y destino

Tarea 2: Prueba de conexiones entre instancias MySQL de Bastion, locales y Oracle Heatwave

  1. Instale el cliente MySQL y la utilidad de shell MySQL en el host de OCI Bastion.

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

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.

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

  3. 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)
    
  4. 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 tabla mysql.gtid_executed.

Tarea 5: Crear el esquema airportdb (solo metadatos) en la base de datos de destino

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

  1. Conéctese a la consola de OCI y seleccione GoldenGate Despliegues.

  2. Haga clic en Crear despliegue e introduzca la información necesaria como se muestra en la siguiente imagen.

    Imagen en la que se muestra cómo crear el despliegue de Golden Gate

  3. Agregue los detalles de conexión de origen y destino en la página Crear despliegue.

    Imagen en la que se muestra cómo crear una conexión de puerta dorada para el origen

    Imagen en la que se muestra cómo crear una conexión de puerta dorada para el destino

    Imagen en la que se muestran ambas conexiones agregadas en GG

  4. Asigne las conexiones al despliegue GoldenGate de OCI. Haga clic en el nombre de conexión y, a continuación, en Asignar despliegue.

    Imagen en la que se muestra cómo asignar el despliegue a una conexión

    Imagen en la que se muestra la conexión de origen asignada al despliegue

    Imagen en la que se muestra la conexión de destino asignada al despliegue

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

    Imagen que muestra la URL de la página de inicio de goldengate

  6. Valide las conexiones de base de datos desde la consola GoldenGate de OCI.

    1. Haga clic en el menú Hamburguesa y verá las dos conexiones agregadas al despliegue en la tarea 6.4.

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

      Imagen en la que se muestran las conexiones Goldengate y se prueban las conexiones

Tarea 7: Creación de procesos de Extract y Replicat

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

      Imagen que muestra la configuración de extracción de goldengate

      Nota: Aquí, el juego de GTID se toma del archivo JSON de dumpInstance o de la salida de los comandos copyInstance.

    • 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 de dumpInstance() o la salida de copyInstance().

      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 MySQL version 5.7.4.

  2. Inicie el proceso de Extract.

    Imagen que muestra que se está ejecutando el extracto de goldengate

  3. Extract se está ejecutando y generando el archivo de pista; ahora cree Replicat.

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

      Imagen que muestra la creación de la tabla de puntos de control de goldengate

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

      Imagen que muestra la creación de réplicas de goldengate

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

  1. Realice una ejecución simulada mediante la opción dryRun:"true" de copyInstance().

    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):
    
  2. 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. Imagen en la que se muestra cómo modificar el replicado

El estado de Replicat se muestra como En ejecución.

Imagen que muestra el estado de la réplica

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.

Acuses de recibo

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.