Observação:

Migrar o MySQL Database Local para a Instância Gerenciada do Oracle HeatWave MySQL usando a OCI GoldenGate

Introdução

O Oracle Cloud Infrastructure GoldenGate (OCI GoldenGate) é um serviço totalmente gerenciado que ajuda os engenheiros de dados a mover dados em tempo real, em escala, de um ou mais sistemas de gerenciamento de dados para bancos de dados da OCI. Projete, execute, orquestre e monitore tarefas de replicação de dados em uma única interface sem precisar alocar ou gerenciar qualquer ambiente de computação. O OCI GoldenGate suporta várias origens e destinos, incluindo o serviço de banco de dados MySQL e Oracle HeatWave MySQL.

Neste tutorial, vamos orientá-lo sobre como migrar o banco de dados MySQL local para a instância gerenciada do Oracle HeatWave MySQL usando o OCI GoldenGate.

Objetivos

Pré-requisitos

Limitações

Tarefa 1: Criar Instâncias de Origem e de Destino MySQL

Tarefa 2: Testar Conexões entre Instâncias do Serviço Bastion, On-Premises e Oracle Heatwave MySQL

  1. Instale o cliente MySQL e o utilitário Shell MySQL no host do OCI Bastion.

  2. Teste a conexão do OCI Bastion com a instância MySQL on-premises de origem.

    [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. Teste a conexão do MySQL local de origem com a instância gerenciada do 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)
    

Tarefa 3: Criar Usuários para o OCI GoldenGate

Tarefa 4: Definir Parâmetros Obrigatórios no Banco de Dados de Origem para OCI GoldenGate

Não é obrigatório ativar o GTID na origem se o destino for independente (não HA). Mas, se o destino for HA, é altamente recomendável ativar o GTID na origem. É obrigatório ativar o modo binlog.

  1. Edite o arquivo /etc/my.cnf e adicione as linhas a seguir.

    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 o servidor MySQL.

    Systemctl stop mysqld
    Systemctl start mysqld
    Systemctl status mysqld
    

    Para obter uma lista ou parâmetros completos, verifique as configurações e os requisitos do log de transações. Para obter mais informações, consulte Opção B: Usar seu próprio bastion no OCI Compute.

  3. Execute o comando a seguir para verificar se os logs de binários estão ativados agora.

    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. Execute o comando a seguir para verificar se o modo GTID (gtid_mode) está ativado.

    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
    

Observação: É comum que a primeira consulta mostre valores NULL para GTID. Isso ocorre porque em MySQL versions 5.7 o valor GTID só é armazenado na tabela mysql.gtid_executed.

Tarefa 5: Criar o Esquema airportdb (Somente metadados) no Banco de Dados de Destino

  1. Extraia os metadados do esquema do banco de dados de origem.

    [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 os metadados do esquema para o banco de dados de 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
    

Tarefa 6: Configurar a Implantação do OCI GoldenGate e Adicionar Conexões

Há vários blogs, tutoriais sobre como configurar implantações do OCI GoldenGate, portanto, aqui vamos mostrar algumas etapas.

  1. Faça log-in na Console do OCI e selecione GoldenGate Deployments.

  2. Clique em Criar implantação e especifique as informações necessárias, conforme mostrado na imagem a seguir.

    Imagem mostrando como criar implantação do golden gate

  3. Adicione detalhes da conexão de origem e destino na página Criar implantação.

    Imagem mostrando como criar a conexão Golden Gate para a origem

    Imagem mostrando como criar a conexão golden gate para o destino

    Imagem mostrando as duas conexões adicionadas no GG

  4. Designe as conexões à implantação do OCI GoldenGate. Clique no nome da conexão e depois em Designar implantação.

    Imagem mostrando como designar a implantação a uma conexão

    Imagem mostrando a conexão de origem designada à implantação

    Imagem mostrando a conexão de destino designada à implantação

  5. Usando o serviço OCI Bastion, configure o encaminhamento de porta para a porta 443 e faça log-in na console OCI GoldenGate.

    Imagem mostrando o URL da home page do goldengate

  6. Validar as conexões de banco de dados na console GoldenGate do OCI.

    1. Clique no menu Hambúrguer e você verá as duas conexões adicionadas à implantação na Tarefa 6.4.

    2. Clique em Conectar para validar as conexões. Se as conexões forem bem-sucedidas, você verá a opção de criar uma tabela de checkpoint clicando em Checkpoint +.

      É altamente recomendável adicionar as conexões usando a implantação GoldenGate do OCI no OCI, pois ele anexará automaticamente o DNS aos endereços IP. Sem esses DNS, as conexões de teste falharão.

      Imagem mostrando conexões goldengate e testando conexões

Tarefa 7: Criar Processos de Extract e Replicat

  1. Antes de criar o processo de Extract, certifique-se de que gtid_mode esteja ON no banco de dados de origem, especialmente se o destino for HA.

    Há dois métodos para adicionar Extract:

    • Método 1: Você pode adicionar Extract após a conclusão da carga inicial (instância de cópia ou dump) e usar o método de instanciação preciso. Para obter mais informações, consulte Instanciação Precisa de MySQL para MySQL Usando Utilitários de Shell MySQL e Oracle GoldenGate.

      Para adicionar o Extract e iniciá-lo para fazer a captura de dados desse GTID ou binlog específico, conforme mostrado na imagem a seguir. A Oracle recomenda o uso desse método.

      Imagem mostrando a configuração do Extract do goldengate

      Observação: aqui, o conjunto GTID é obtido do arquivo JSON do dumpInstance ou da saída dos comandos copyInstance.

    • Método 2: Você pode adicionar Extract logo no início antes mesmo de iniciar o carregamento inicial de dados e depois alterar o Replicat para começar com um gtidexecuted/binlog# e uma posição de binlog específicos exibidos no arquivo JSON do dumpInstance() ou da saída do copyInstance().

      Use o parâmetro HANDLECOLLISION com esse método para evitar qualquer problema de dados duplicado.

      Observação: para este Ponto de Contato, o Método 2 foi usado.

      Edite o arquivo de parâmetros de extração:

      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.*;
      

      Observação: Se você adicionar DDL INCLUDE MAPPED ao arquivo de parâmetros Extract, receberá um erro de que a replicação DDL não é suportada para MySQL version 5.7.4.

  2. Inicie o processo de Extração.

    Imagem mostrando o extrato de goldengate em execução

  3. O Extract está em execução e gerando o arquivo de trilha. Agora, crie o Replicat.

    1. Crie a tabela de checkpoint primeiro. Vá para a seção Configuração, selecione o banco de dados de destino e clique em Ponto de Verificação + para criar a tabela de pontos de verificação.

      Imagem mostrando a criação da tabela de checkpoint do goldengate

    2. Criar o processo Replicat. Como essa é uma replicação unidirecional, podemos usar o Replicat paralelo para obter melhor desempenho. Para replicação bidirecional, só há suporte para Replicat clássico.

      Não inicie o processo Replicat, apenas crie-o. Vamos iniciá-lo depois que os dados forem importados.

      Imagem mostrando a criação do replicat do goldengate

    3. Edite o arquivo de parâmetros. Você também pode adicionar parâmetros PARALLEL ou o paralelismo padrão será usado.

      REPLICAT rep1
      USERIDALIAS  MySQLGG1, DOMAIN OracleGoldenGate
      MAP airportdb.*, TARGET airportdb.*;
      

Tarefa 8: Copiar Dados da Origem para o Destino usando o copyInstance()

  1. Execute um dryrun usando a opção 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. Se não houver erros, remova a opção dryRun e execute novamente para executar o carregamento de dados. A saída final deve ter esta aparência: Nenhum erro reportado.

    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
    

Observação: Anote o GTID executado mostrado na saída de copyInstance() e use-o para alterar o processo Replicat.

Tarefa 9: Alterar Replicat e Iniciar

Use o número do arquivo de log 000006 e o número da posição do log 626, conforme mostrado na saída do copyInstance() na Tarefa 8. Esse arquivo de log e a posição do log devem ser usados no formato para gerar o CSN 000006:000000000000626.

Altere o processo Replicat e clique em Iniciar para iniciar. Imagem mostrando como alterar replicat

Status do Replicat mostrando como Em Execução.

Imagem mostrando o status do replicat

Observação: se você tiver usado o Método 1 para adicionar o processo Extract, conforme mostrado na Tarefa 7, o processo Replicat de alteração não será necessário. Neste ponto, usamos o Método 2 para adicionar o processo Extract. Ambos os métodos funcionam bem.

Tarefa 10: Executar Testes DML

Teste a replicação executando a atividade DML na origem.

Confirmações

Mais Recursos de Aprendizagem

Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal do Oracle Learning YouTube. Além disso, acesse education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.