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.
Configurar a Replicação Bidirecional entre Duas instâncias gerenciadas pelo Oracle Heatwave MySQL usando o 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 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, orientaremos você como configurar a replicação bidirecional usando o OCI GoldenGate entre duas instâncias do Oracle HeatWave MySQL na OCI.
Objetivos
- Configure a replicação bidirecional entre duas instâncias gerenciadas pelo Oracle HeatWave MySQL usando a OCI GoldenGate na OCI.
Pré-requisitos
-
As instâncias de origem e destino do Oracle HeatWave MySQL devem estar usando o mecanismo
InnoDB
e devem estar em execução nas versões5.7
ou8.*
. -
Para replicação bidirecional, recomenda-se usar a mesma versão da instância MySQL na origem e no destino.
-
O parâmetro de instância
binlog_expire_logs_second
nas instâncias de origem e destino deve ser definido como pelo menos 72 horas. -
O parâmetro de instância
binlog_row_metadata
nas instâncias de origem e destino deve ser definido como completo para permitir a replicação da DDL (Data Definition Language).Observação: Os parâmetros da instância só podem ser alterados criando uma Configuração Personalizada. Para obter mais informações, consulte Como Criar uma Configuração Personalizada para MySQL.
-
Revise os tipos de dados suportados. Para obter mais informações, consulte MySQL: Tipos de Dados, Objetos e Operações Suportados.
-
Revise as limitações de replicação de DDL. Para obter mais informações, consulte Usando a Replicação DDL.
-
A instância de destino deve ser criada antecipadamente da origem usando um destes métodos:
- Método 1: Usando utilitários shell MySQL como
util.dumpInstance
eutil.loadDump
. - Método 2: Por meio da opção de backup e restauração baseada na Console do OCI.
- Método 3: Usando o OCI GoldenGate para Extract e Replicat iniciais para executar o carregamento de dados inicial. Neste tutorial, este método foi usado (Tarefa 7).
- Método 1: Usando utilitários shell MySQL como
-
Por design, as DDLs da tabela de pulsação são ignoradas pelo processo Extract. Você deve criar a tabela de pulsação manualmente no destino.
-
Bastion host com cliente MySQL instalado.
-
Regras de entrada e listas de segurança atualizadas para permitir a comunicação entre a origem, o destino, o bastion e o OCI GoldenGate.
Tarefa 1: Implantar o OCI GoldenGate
-
Faça log-in na Console do OCI, procure GoldenGate, selecione GoldenGate service e clique em Criar Implantação.
-
Especifique as seguintes informações e clique em Criar.
- Nome: Digite
MySQLggdeployment1
. - Tipo de Implantação: Selecione Replicação de dados.
- Selecionar Tecnologia: Selecione MySQL.
- Selecionar Versão: Digite
21.15
. - Configuração de hardware: Digite # de OCPUs.
- Seleção de sub-rede: Selecione a sub-rede.
- Tipo de Licença Selecione o tipo de licença.
- Nome da instância: Digite
GGInstance1
. - Armazenamento de Credenciais: Selecione GoldenGate (crie um novo segredo de senha ou selecione um existente).
- Nome: Digite
Tarefa 2: Criar Usuários em Instâncias MySQLOracle HeatWave MySQL do Oracle HeatWave
-
Use o OCI Bastion host para estabelecer conexão com instâncias MySQL de origem e destino e criar usuários para os processos Extract e Replicat GoldenGate do OCI. Execute a seguinte consulta:
-
Na instância MySQL de origem.
> 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'@'%';
-
Na instância 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'@'%';
-
Tarefa 3: Configurar Conexões na Implantação GoldenGate do OCI
-
Vá para a página de implantação GoldenGate do OCI e clique em Conexões para configurar a conexão.
-
Especifique as informações da conexão.
-
Repita as etapas acima para adicionar conexões de origem e destino.
-
Selecione Implantações e clique em Conexões Designadas para designar as conexões à implantação.
Tarefa 4: Configurar Regras de Entrada e Listas de Segurança para a Console GoldenGate do OCI
-
Configure regras de entrada e atualize listas de segurança para permitir a comunicação entre as instâncias do Oracle HeatWave MySQL, a implantação do OCI GoldenGate e a computação do OCI Bastion.
Observação: Se você estiver usando VPN, poderá ignorar esta etapa.
Siga as etapas listadas aqui: Opção B: Use seu próprio bastion no OCI Compute.
ssh -i <private-ssh-key-of-bastion-compute> opc@<bastion-compute-public-ip> -L 443:<GoldenGategate-deployment-hostname>:443 -N
-
Teste as conexões para bancos de dados de origem e de destino na Console do OCI e por meio da Console do OCI GoldenGate.
-
Valide as conexões da instância MySQL na Console do OCI.
-
Valide as mesmas conexões na Console do OCI GoldenGate.
-
Tarefa 5: Criar os Processos Extract e Replicat
-
Crie um Extract principal (
EXT1
).-
Faça log-in na Console do OCI GoldenGate.
-
Vá para Visão Geral e clique em + na seção Extrações.
-
Insira as informações de Extração.
-
Edite o arquivo de parâmetros conforme necessário. O arquivo de parâmetros a seguir captura todas as alterações no banco de dados
classicmodels
, incluindo alterações DDL.EXTRACT ext1 USERIDALIAS MySQLpoc1, DOMAIN OracleGoldenGate EXTTRAIL e1 DDL INCLUDE MAPPED TRANLOGOPTIONS FETCHPARTIALJSON TABLE classicmodels.*;
Observação:
MySQLpoc1
é uma instância de origem. -
Inicie o processo Extract e anote o GTID (Global Transaction Identifier) na origem.
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 o processo Extract e mantenha-o em execução o tempo todo, mesmo quando você ainda estiver trabalhando na configuração do banco de dados de destino para garantir que todas as alterações sejam capturadas.
-
-
Criar um Replicat principal (
REP1
).-
Faça log-in na Console do OCI GoldenGate.
-
Vá para Visão Geral e clique em + na seção Replicat.
Observação: O nome da tabela de checkpoint deve ser prefixado com o nome do banco de dados/esquema em letras minúsculas. Se isso não for feito, a criação da tabela de checkpoint falhará.
Por exemplo,
classicmodels.OCIGG_CHECKPOINT_REP1
.É recomendável criar um banco de dados/esquema dedicado separado (por exemplo, esquema
ggadmin
) para a tabela de checkpoint.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 o arquivo de parâmetros conforme necessário. O arquivo de parâmetros a seguir replica todos os objetos no banco de dados
classicmodels
junto com as alterações de DDL.REPLICAT rep1 USERIDALIAS MySQLpoc2, DOMAIN OracleGoldenGate DDL INCLUDE MAPPED MAP classicmodels.*, TARGET classicmodels.*;
Observação:
MySQLpoc2
é uma instância de destino. -
Como esse é o Replicat principal e foi iniciado pela primeira vez, ele começará a se aplicar do arquivo de trilha 0. No entanto, se você quiser alterar o processo Replicat para iniciar em um GTID específico, siga as etapas:
-
Vá para a seção Replicat na Console do OCI GoldenGate.
-
Selecione o replicat, clique em Alterar, Editar, INICIAR, selecione GTID e informe o GTID.
-
-
-
Até agora, configuramos o unidirecional para replicação de DML (Data Manipulation Language) e DDL. Quando a replicação unidirecional estiver em sincronia, poderemos prosseguir com a replicação bidirecional.
-
Repita as etapas 5.1 e 5.2, mas desta vez reverteremos os detalhes de origem e destino. A instância do banco de dados de origem agora atuará como instância de destino e a instância de destino atuará como instância de origem.
- Origem: Digite
MySQLpoc2
. - Destino: Digite
MySQLpoc1
. - Para esse caso de uso, usamos um segundo banco de dados
airportdb
. Você pode configurar a replicação bidirecional para o mesmo banco de dados.
- Origem: Digite
-
Adicionar 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.*;
-
Criar manualmente a tabela de checkpoint, pois esta é uma Replicação Clássica. Somente as Replicações Clássicas e Coordenadas são suportadas para replicação bidirecional.
For example: ggadmin.OCIGG*CHECKPOINT_REP`- Add primary REPLICAT REP2:` REPLICAT rep2 USERIDALIAS MySQLpoc1, DOMAIN OracleGoldenGate DDL INCLUDE MAPPED MAP airportdb.*, TARGET airportdb.\_;
-
Tarefa 6: Executar Testes DDL e DML
Agora que a configuração bidirecional está concluída, é hora de executar testes DML e 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>
Tarefa 7: Configurar Extração de Carga Inicial
-
Configure o Extract de carga inicial se quiser aproveitar o OCI GoldenGate para executar o carregamento inicial de dados no banco de dados de destino.
-
Faça log-in na Console do OCI GoldenGate.
-
Vá para Visão Geral e clique em + na seção Extrair. Isso é muito semelhante à criação de um Extract principal. A única diferença é selecionar o tipo de Extração como Carga Inicial ao criar um Extract.
Arquivo de parâmetros para Extração 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
-
-
Da mesma forma, configure um processo Replicat que lerá os arquivos de trilha gerados pelo processo Extract de carga inicial. Esse processo Replicat e o processo Extract de carga inicial serão eliminados quando a carga inicial for concluída.
-
No banco de dados de destino, certifique-se de que todas as tabelas estejam vazias. Eliminar/Desativar todas as Chaves Estrangeiras no destino. Desativar Triggers e Índices no destino para melhorar o desempenho da carga inicial.
Observação: Faça um backup das DDLs dos objetos de esquema antes de eliminar qualquer uma delas.
-
Veja a seguir a ordem em que os processos Extract e Replicat devem ser criados se você estiver usando o Extract de carga inicial para o carregamento de dados inicial.
-
Crie uma Extração principal para a origem (ainda não inicie o processo).
-
Crie um Extract de carga inicial para a origem (ainda não inicie o processo) e capture o GTID na origem.
-
Crie um processo Replicat para processar os arquivos de trilha gerados pelo Extract de carga inicial para o destino (ainda não inicie o processo).
Observação: Não há um tipo de Replicat separado para a carga inicial.
-
Criar um Replicat principal para o destino (não inicie o processo ainda).
-
Usar a mesma tabela de checkpoint para o Replicat de carga inicial e o Replicat principal. O processo Replicat de carga inicial aponta para arquivos de trilha Extract iniciais e o processo Replicat principal aponta para arquivos de trilha Extract principais (ambos os arquivos de trilha são diferentes).
-
-
Veja a seguir a ordem em que os processos devem ser iniciados ao usar o Extract de carga inicial.
-
Inicie o processo Extract principal e anote o GTID com o qual ele se registra.
-
Iniciar o processo Replicat que foi criado para o Extract de carga inicial.
-
Edite o Extract de carga inicial e altere-o para iniciar com GTID obtido ao iniciar o Extract principal.
-
Iniciar o Replicat principal.
Observação:
- Iniciar o Replicat principal somente depois que o Extract e o Replicat da carga inicial estiverem em sincronia (LAG 0).
- Crie ou ative as chaves estrangeiras antes de iniciar o Replicat principal.
Crie índices (se você os eliminou anteriormente para melhorar o desempenho da carga inicial) antes de iniciar o processo Replicat principal.
-
-
Limitações
-
Somente Replicat Clássico e Coordenado suportam replicação bidirecional e multidirecional; o Replicat paralelo não é suportado.
-
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 detecção de conflitos com base em timestamp possam operar.
Links Relacionados
-
Estabelecer Conexão com o Oracle Cloud Infrastructure GoldenGate usando um IP privado
-
MySQL: Pré-requisitos para Configuração DDL Baseada em Log de Transações
-
Carregando Dados do Arquivo para Replicat na Arquitetura de Microsserviços
-
MySQL: Tipos de Dados, Objetos e Operações Suportados para OCI GoldenGate
Confirmações
- Autor - Chakradhar Jagganagari (Especialista em Implementação de LIFT - Personalizado, 3rd party, VM Database & Apps)
Mais Recursos de Aprendizagem
Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o Oracle Help Center.
Set up Bidirectional Replication Between Two Oracle Heatwave MySQL managed instances using OCI GoldenGate
G29687-02
Copyright ©2025, Oracle and/or its affiliates.