Como criar uma réplica do MySQL do Amazon RDS entre regiões em outra conta da AWS?

Última atualização: 08-09-2021

Quero criar uma réplica do MySQL do Amazon Relational Database Service (Amazon RDS) em uma região e conta da AWS diferentes da instância do banco de dados de origem. Como posso fazer isso?

Breve descrição

Você pode criar uma réplica do MySQL do Amazon RDS em outra região e conta da AWS a partir da instância do banco de dados de origem para os seguintes casos de uso:

  • Aprimoramento da recuperação de desastres
  • Aumento na horizontal global
  • Migração entre regiões e contas da AWS

Observação: não há uma maneira direta de criar uma réplica entre regiões em outra conta da AWS usando o console do Amazon RDS ou a AWS Command Line Interface (AWS CLI). As etapas descritas neste artigo configuram uma replicação externa baseada no binlog entre duas instâncias de MySQL do RDS em diferentes contas ou regiões da AWS.

Resolução

Para criar uma réplica do MySQL do Amazon RDS entre regiões em outra conta da AWS, siga estas etapas.

Observação: a conta A contém a instância primária do MySQL do RDS na região de origem. A conta B contém a réplica do MySQL do RDS na região de destino.

1.    Na Conta A (a instância primária do MySQL do Amazon RDS), certifique-se de que o registro em log binário está habilitado. Por padrão, os backups automatizados e o registro em log binário estão habilitados no MySQL do RDS. O registro em log binário está habilitado sempre que os backups automatizados estão habilitados.

Observação: uma interrupção ocorrerá se você alterar o período de retenção de backup de “0" para um valor diferente de zero, ou vice-versa.

2.    Atualize o período de retenção do log binário usando o seguinte comando:

mysql>  CALL mysql.rds_set_configuration(name,value);

Dica: escolha um período de tempo que retenha os arquivos de log binários em sua fonte de replicação por tempo suficiente para que as alterações sejam aplicadas antes da exclusão. O Amazon RDS retém arquivos de binlog em uma instância do MySQL por até 168 horas (7 dias). Para obter mais informações, consulte mysql.rds_set_configuration.

Por exemplo, a sintaxe a seguir define o período de retenção do binlog como 24 horas:

mysql> call mysql.rds_set_configuration('binlog retention hours', 24);

3.    Crie um usuário de replicação na instância primária na Conta A e conceda os privilégios necessários:

mysql> CREATE USER 'repl_user'@'<domain_name>' IDENTIFIED BY '<password>';

4.    Conceda os privilégios de REPLICATION CLIENT (CLIENTE DE REPLICAÇÃO) e REPLICATION SLAVE (ESCRAVO DE REPLICAÇAO) (obrigatórios) ao usuário criado na Etapa 3:

mysql> GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO  'repl_user'@'<domain_name>';

5.    Crie uma réplica de leitura entre regiões na conta primária (Conta A) com a região de destino selecionada.

6.    Faça login na instância de réplica criada na Conta A. Em seguida, confirme que a réplica está em dia com a instância do banco de dados primário:

mysql> SHOW SLAVE STAUS\G

Observação: confira se o valor Seconds_Behind_Master é “0". Quando o valor é “0", a réplica está em dia com a instância do banco de dados primário. Para obter mais informações, consulte Monitoramento da replicação de leitura.

7.    Depois que a réplica de leitura estiver em dia com a instância do banco de dados primário, interrompa a replicação na instância de réplica criada na Etapa 5. Para interromper a replicação, use a seguinte sintaxe:

mysql> call mysql.rds_stop_replication();

8.    Execute o comando SHOW SLAVE STATUS na réplica e registre os valores de saída para Relay_Master_Log_File e Exec_Master_Log_Pos. Os valores Relay_Master_Log_File e Exec_Master_Log_Pos são suas coordenadas de log binário, que são usadas para configurar a replicação externa em etapas posteriores.

9.    Crie um snapshot do banco de dados da instância de réplica na Conta A.

(Opcional) Ou você pode usar uma ferramenta nativa que gera backups lógicos (como ysqldump) para exportar dados da instância de réplica na Conta A. A ferramenta nativa pode então ser usada para importar os dados para uma instância do MySQL do RDS da mesma versão recém-criada na Conta B. Com essa abordagem, você não precisa copiar e compartilhar snapshots ou chaves do AWS KMS entre as duas contas. Se você decidir usar essa abordagem, pule para a Etapa 12 para configurar o acesso à rede e a replicação entre as duas instâncias. Antes de adotar essa abordagem, você deve importar dados para a instância do Amazon RDS for MySQL na Conta B.

10.    Compartilhe o snapshot do banco de dados com a Conta B.

Observação: se o snapshot do banco de dados estiver criptografado, a chave do AWS KMS usada para criptografar o snapshot deve ser compartilhada com a conta de destino. Para obter mais informações, consulte Compartilhamento de um snapshot criptografado.

11.    Restaure o snapshot do banco de dados na Conta B.

Observação: uma instância de banco de dados não pode ser restaurada a partir de um snapshot criptografado compartilhado. Em vez disso, faça uma cópia do snapshot do banco de dados e restaure a instância de banco de dados a partir da versão copiada.

12.    Configure acesso à rede entre a Conta A (a conta de origem) e a Conta B (a conta de destino). O acesso à rede permite que o tráfego flua entre as contas de origem e de destino.

13.    Configure as regras do grupo de segurança de entrada para a instância do banco de dados primário da Conta A. Essa configuração permite que o tráfego flua pela Internet pública a partir da instância do MySQL do RDS recém-criada na Conta B (a conta de destino). Os grupos de segurança protegem sua instância do MySQL do Amazon RDS.

Para tráfego de replicação privada, uma conexão de emparelhamento da VPC deve ser criada e aceita entre as duas contas da AWS.

14.    Configure a replicação externa na instância de destino na Conta B:

mysql> CALL mysql.rds_set_external_master (
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , mysql_binary_log_file_name
  , mysql_binary_log_file_location
  );

Por exemplo:

mysql> CALL mysql.rds_set_external_master (mytestinnstance.us-east-1.rds.amazonaws.com', 3306, 'repl_user', '<password>', 'mysql-bin-changelog.000031', 107, 0);

mytestinnstance.us-east-1.rds.amazonaws.com: endpoint da instância primária
3306: porta da instância primária
repl_user: nome de usuário da replicação, criado na Etapa 3
password: senha do usuário criada na Etapa 3
mysql-bin-changelog.000031: nome do arquivo de log binário da saída da Etapa 8
107: posição do log binário a partir da saída da Etapa 8

15.    Inicie a replicação na instância restaurada na Conta B:

CALL mysql.rds_start_replication;

Veja abaixo um exemplo de saída:

+-------------------------+
| Message                 |
+-------------------------+
| Slave running normally. |
+-------------------------+

16.    Execute o seguinte comando na instância da Conta B para conferir o status da replicação:

mysql> show replica status \G

Observação: para o MySQL versão 8.0.22 e superiores, SHOW SLAVE STATUS está defasado e SHOW REPLICA STATUS está disponível para uso. Para obter mais informações, consulte Checking replication status (Verificando o status da replicação) no site do MySQL.

17.    Exclua a réplica (que funcionou como uma instância intermediária) criada na Etapa 5. Essa réplica foi usada para extrair coordenadas do log binário sem precisar suspender as gravações na instância primária na Conta A.

Considerações sobre replicação entre regiões

Considere as seguintes abordagens para replicação entre regiões:

  • Uma instância de banco de dados de origem pode ter réplicas de leitura entre regiões em várias regiões da AWS. Para obter mais informações, consulte Criação de uma réplica de leitura em outra região da AWS.
  • Você pode esperar uma demora maior para qualquer réplica de leitura que esteja em uma região da AWS diferente da região da instância de origem. Essa demora se deve aos canais de rede mais longos entre os datacenters regionais. Para obter informações sobre demora na replicação, consulte Monitoramento da replicação de leitura.
  • Os dados transferidos para replicação entre regiões incorrem em cobranças de transferência de dados do Amazon RDS. Para obter mais informações sobre essas cobranças de transferência de dados, consulte Custos de replicação entre regiões.

Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?