Observação:
- Este tutorial requer acesso ao Oracle Cloud. Para se inscrever em uma conta gratuita, consulte Conceitos básicos do Oracle Cloud Infrastructure Free Tier.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
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
- Migre o banco de dados MySQL on-premises para a instância gerenciada do Oracle HeatWave MySQL na OCI usando o OCI GoldenGate.
Pré-requisitos
-
O banco de dados de origem MySQL é on-premises e a instância gerenciada do Oracle Heatwave MySQL de destino e o OCI Bastion host estão em vigor.
-
Como essa é uma replicação unidirecional, o destino pode estar em uma versão superior à origem. Em caso de replicação bidirecional, é recomendável que a origem e o destino estejam na mesma versão.
-
log_bin
(binlog) deve ser ativado na origem. -
O parâmetro de instância
binlog_expire_logs_second
nas instâncias de origem e destino deve ser definido para pelo menos 72 horas. -
O parâmetro de instância
binlog_row_metadata
nas instâncias de origem e de destino deve ser definido como completo para permitir a replicação da DDL (Data Definition Language).Observação: Neste tutorial, a origem está executando o parâmetro MySQL versão
5.7.44
, no qual o parâmetrobinlog_row_metadata
não é suportado. Portanto, não há suporte para a replicação DDL. -
O modo de identificador de transação global (GTID) deverá estar na origem se a instância MySQL do Oracle Heatwave de destino tiver alta disponibilidade (HA), caso contrário, será opcional.
-
Verifique os tipos de dados com suporte. Para obter mais informações, consulte MySQL: Tipos de Dados, Objetos e Operações Suportados.
-
Verifique as limitações de replicação de DDL. Para obter mais informações, consulte Usando Replicação de DDL.
-
A instância de destino deve ser criada com antecedência da origem usando um destes métodos:
- Método 1: Usando utilitários de shell MySQL como
util.dumpInstance
eutil.loadDump
. - Método 2: Usando utilitários de shell MySQL como
util.copyInstance
. - Método 3: Usando o OCI GoldenGate para Extract e Replicat iniciais para executar o carregamento de dados inicial.
Observação: Neste tutorial, usaremos
util.copyInstance
para a carga inicial. - Método 1: Usando utilitários de shell MySQL como
-
OCI Bastion host com cliente MySQL e utilitário Shell MySQL instalados no OCI.
-
FastConnect/IPSec/VPN, regras de entrada e listas de segurança atualizadas para permitir a comunicação entre origem on-premises, Oracle Heatwave de destino MySQL, bastion e OCI GoldenGate.
Limitações
-
Problemas de coluna de incremento automático.
-
Se uma tabela tiver uma coluna e não for chave primária ou chave exclusiva, o mapeamento falhará porque a combinação de todas as colunas dessa tabela é a mesma na origem e no destino.
-
Tipos de dados, DDL e outras limitações de recursos.
-
Ao usar a replicação Ativo-Ativo, os fusos horários devem ser os mesmos em ambos os sistemas para que a resolução e a detecção de conflitos baseados em timestamp possam operar.
Tarefa 1: Criar Instâncias de Origem e de Destino MySQL
-
Origem:
-On-premise Hostname: MySQLCI57 OEL 7.9 MySQL version 5.7.44 Intel Hardware Standard.Flex3 with 4 CPUs and 32GB Dedicated VM
-
Destino:
-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 do OCI Bastion:
-OCI Hostname: Bastion OEL 8 with Intel hardware Standard.Flex3 with 4CPUs and 32GB
Tarefa 2: Testar Conexões entre Instâncias do Serviço Bastion, On-Premises e Oracle Heatwave MySQL
-
Instale o cliente MySQL e o utilitário Shell MySQL no host do OCI Bastion.
-
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)
-
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
-
Origem:
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'@'%';
-
Destino:
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;
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
.
-
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
-
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.
-
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)
-
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 tabelamysql.gtid_executed
.
Tarefa 5: Criar o Esquema airportdb
(Somente metadados) no Banco de Dados de Destino
-
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.
-
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.
-
Faça log-in na Console do OCI e selecione GoldenGate Deployments.
-
Clique em Criar implantação e especifique as informações necessárias, conforme mostrado na imagem a seguir.
-
Adicione detalhes da conexão de origem e destino na página Criar implantação.
-
Designe as conexões à implantação do OCI GoldenGate. Clique no nome da conexão e depois em Designar implantação.
-
Usando o serviço OCI Bastion, configure o encaminhamento de porta para a porta
443
e faça log-in na console OCI GoldenGate. -
Validar as conexões de banco de dados na console GoldenGate do OCI.
-
Clique no menu Hambúrguer e você verá as duas conexões adicionadas à implantação na Tarefa 6.4.
-
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.
-
Tarefa 7: Criar Processos de Extract e Replicat
-
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.
Observação: aqui, o conjunto GTID é obtido do arquivo JSON do
dumpInstance
ou da saída dos comandoscopyInstance
. -
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 dodumpInstance()
ou da saída docopyInstance()
.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 MySQLversion 5.7.4
.
-
-
Inicie o processo de Extração.
-
O Extract está em execução e gerando o arquivo de trilha. Agora, crie o Replicat.
-
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.
-
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.
-
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()
-
Execute um dryrun usando a opção
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):
-
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.
Status do Replicat mostrando como Em Execução.
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.
-
Origem:
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)
-
Destino:
[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)
Links Relacionados
-
Estabelecer Conexão com o Oracle Cloud Infrastructure GoldenGate usando um IP privado
-
MySQL: Pré-requisitos para Configuração de DDL Baseada em Log de Transações
-
Carregando Dados de Arquivo para Replicat na Arquitetura de Microsserviços
-
MySQL: Tipos de Dados, Objetos e Operações Suportados para o OCI GoldenGate
Confirmações
- Autor - Chakradhar Jagganagari (Especialista em Implementação de Elevação - Banco de Dados)
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.
Migrate On-Premises MySQL Database to Oracle HeatWave MySQL Managed Instance using OCI GoldenGate
G34895-01
Copyright ©2025, Oracle and/or its affiliates.