Observação:

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

Pré-requisitos

Tarefa 1: Implantar o OCI GoldenGate

  1. Faça log-in na Console do OCI, procure GoldenGate, selecione GoldenGate service e clique em Criar Implantação.

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

Tarefa 2: Criar Usuários em Instâncias MySQLOracle HeatWave MySQL do Oracle HeatWave

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

  1. Vá para a página de implantação GoldenGate do OCI e clique em Conexões para configurar a conexão.

    Imagem mostrando como criar uma conexão

  2. Especifique as informações da conexão.

    Imagem mostrando Conexões GoldenGate

  3. Repita as etapas acima para adicionar conexões de origem e destino.

  4. Selecione Implantações e clique em Conexões Designadas para designar as conexões à implantação.

    Imagem mostrando como designar conexões à implantação

Tarefa 4: Configurar Regras de Entrada e Listas de Segurança para a Console GoldenGate do OCI

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

    1. Valide as conexões da instância MySQL na Console do OCI.

      Imagem mostrando como testar uma conexão

    2. Valide as mesmas conexões na Console do OCI GoldenGate.

      Imagem mostrando como testar uma conexão na console do GG

Tarefa 5: Criar os Processos Extract e Replicat

  1. Crie um Extract principal (EXT1).

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

    2. Vá para Visão Geral e clique em + na seção Extrações.

      Imagem mostrando como adicionar EXTRACT

    3. Insira as informações de Extração.

      Imagem mostrando detalhes EXTRACT

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

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

  2. Criar um Replicat principal (REP1).

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

    2. Vá para Visão Geral e clique em + na seção Replicat.

      Imagem mostrando detalhes 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)
      
    3. 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.

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

      1. Vá para a seção Replicat na Console do OCI GoldenGate.

      2. Selecione o replicat, clique em Alterar, Editar, INICIAR, selecione GTID e informe o GTID.

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

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

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

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

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

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

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

      1. Crie uma Extração principal para a origem (ainda não inicie o processo).

      2. Crie um Extract de carga inicial para a origem (ainda não inicie o processo) e capture o GTID na origem.

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

      4. Criar um Replicat principal para o destino (não inicie o processo ainda).

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

    3. Veja a seguir a ordem em que os processos devem ser iniciados ao usar o Extract de carga inicial.

      1. Inicie o processo Extract principal e anote o GTID com o qual ele se registra.

      2. Iniciar o processo Replicat que foi criado para o Extract de carga inicial.

      3. Edite o Extract de carga inicial e altere-o para iniciar com GTID obtido ao iniciar o Extract principal.

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

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