Replicação com uma instância MySQL ou MariaDB executada externamente ao Amazon RDS - Amazon Relational Database Service

Replicação com uma instância MySQL ou MariaDB executada externamente ao Amazon RDS

Você pode configurar a replicação entre uma instância de banco de dados MariaDB ou MySQL do Amazon RDS e uma instância MySQL ou MariaDB externa ao Amazon RDS.

Antes de começar

Você pode configurar a replicação usando a posição do arquivo de log binário de transações replicadas. No MySQL Amazon RDS 5.7.23 e no MySQL 5.7 em versões posteriores, você também pode configurar a replicação usando GTIDs.

As permissões necessárias para iniciar a replicação em uma instância de banco de dados do Amazon RDS são restritas e não estão disponíveis ao seu usuário mestre do Amazon RDS. Por isso, certifique-se de usar os comandos mysql.rds_set_external_master e mysql.rds_start_replication do Amazon RDS para configurar a replicação entre seu banco de dados online e seu banco de dados do Amazon RDS.

Para definir o formato de registro em log binário para um banco de dados MySQL e MariaDB, atualize o parâmetro binlog_format. Se a instância de banco de dados usar o grupo de parâmetros da instância de banco de dados padrão, crie um novo grupo de parâmetros de banco de dados para modificar as configurações de binlog_format. Recomendamos usar a configuração padrão para binlog_format, que é MIXED. No entanto, você também pode definir binlog_format como ROW ou STATEMENT se precisar de um formato específico de log binário. Reinicie a instância de banco de dados para que a alteração entre em vigor.

Para obter informações sobre como definir o parâmetro binlog_format, consulte Formato de registro em log binário. Para obter informações sobre as implicações de tipos de replicação do MySQL diferentes, consulte Advantages and Disadvantages of Statement-Based and Row-Based Replication na documentação do MySQL.

nota

Use o procedimento neste tópico para configurar a replicação em todos os casos, exceto quando a instância externa for o MariaDB versão 10.0.2 ou superior e a instância do Amazon RDS for o MariaDB. Nesse caso, use o procedimento em Configuração da replicação baseada em GTID em uma instância de banco de dados MariaDB do Amazon RDS para configurar a replicação baseada em GTID.

Configuração da replicação da posição do arquivo de log binário com uma instância de origem externa

Siga estas diretrizes ao configurar uma instância de origem externa e uma réplica no Amazon RDS:

  • Monitore eventos de failover para a instância do banco de dados do Amazon RDS, que é sua réplica. Se ocorrer um failover, a instância de banco de dados que for a sua réplica poderá ser recriada em um novo host com um endereço de rede diferente. Para obter informações sobre como monitorar eventos de failover, consulte Usar a notificação de evento do Amazon RDS.

  • Mantenha os logs binários (binlogs) em sua instância de origem até confirmar que foram aplicados à réplica. Esta manutenção garante que seja possível restaurar sua instância de origem em caso de falha.

  • Ative backups automatizados na sua instância de banco de dados do Amazon RDS. Ativar backups automáticos garante que seja possível restaurar sua réplica para um determinado ponto no tempo, caso seja necessário ressincronizar sua instância de origem e sua réplica. Para obter informações sobre backups e restauração Point-In-Time, consulte Como fazer backup e restauração de uma instância de banco de dados do Amazon RDS.

Como configurar a replicação do arquivo de log binário com uma instância de origem externa

  1. Torne a instância de origem MySQL ou MariaDB somente leitura.

    mysql> FLUSH TABLES WITH READ LOCK; mysql> SET GLOBAL read_only = ON;
  2. Execute o comando SHOW MASTER STATUS na instância do MySQL ou MariaDB de origem para determinar a localização do log binário.

    Você recebe um resultado semelhante ao seguinte exemplo.

    File Position ------------------------------------ mysql-bin-changelog.000031 107 ------------------------------------
  3. Copie o banco de dados da instância externa para a instância de banco de dados do Amazon RDS usando mysqldump. Para bancos de dados muito grandes, convém usar o procedimento em Importar dados para uma instância de banco de dados MariaDB ou MySQL do Amazon RDS com tempo de inatividade reduzido.

    Para Linux, macOS ou Unix:

    mysqldump --databases database_name \ --single-transaction \ --compress \ --order-by-primary \ -u local_user \ -plocal_password | mysql \ --host=hostname \ --port=3306 \ -u RDS_user_name \ -pRDS_password

    Para Windows:

    mysqldump --databases database_name ^ --single-transaction ^ --compress ^ --order-by-primary ^ -u local_user ^ -plocal_password | mysql ^ --host=hostname ^ --port=3306 ^ -u RDS_user_name ^ -pRDS_password
    nota

    Confirme que não há um espaço entre a opção -p e a senha inserida.

    Para especificar o nome do host, o nome do usuário, a porta e a senha para se conectar à instância de banco de dados Amazon RDS, use as opções --host, --user (-u), --port e -p no comando mysql. O nome do host é o nome de Domain Name Service (DNS – Serviço do nome de domínio) do endpoint da instância de banco de dados do Amazon RDS, por exemplo, myinstance.123456789012.us-east-1.rds.amazonaws.com. Você pode encontrar o valor do endpoint nos detalhes da instância no Console de gerenciamento da AWS.

  4. Torne a instância MySQL ou MariaDB de origem novamente gravável.

    mysql> SET GLOBAL read_only = OFF; mysql> UNLOCK TABLES;

    Para obter mais informações sobre como fazer backups para usar com a replicação, consulte a documentação do MySQL.

  5. No Console de gerenciamento da AWS, adicione o endereço IP do servidor que hospeda o banco de dados externo ao grupo de segurança da VPC para a instância de banco de dados do Amazon RDS. Para obter mais informações sobre como modificar um grupo de segurança da VPC, consulte Grupos de segurança para sua VPC no Guia do usuário da Amazon Virtual Private Cloud.

    O endereço IP poderá ser alterado se as seguintes condições forem atendidas:

    • Se você estiver usando um endereço IP público para a comunicação entre a instância de origem externa e a instância de banco de dados.

    • A instância de origem externa foi interrompida e reiniciada.

    Se essas condições forem atendidas, verifique o endereço IP antes de adicioná-lo.

    Você também pode precisar configurar a rede local para permitir conexões com o endereço IP da instância de banco de dados do Amazon RDS. Isso é realizado para que a rede local consiga se comunicar com a instância do MySQL ou do MariaDB externa. Para localizar o endereço IP da instância de banco de dados do Amazon RDS, use o comando host.

    host db_instance_endpoint

    O nome do host é o nome de DNS do endpoint da instância de banco de dados do Amazon RDS.

  6. Usando o cliente de sua preferência, conecte-se à instância externa e crie um usuário a ser usado para a replicação. Use essa conta unicamente para replicação e restringi-la ao seu domínio para melhorar a segurança. Veja um exemplo a seguir.

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
  7. Para a instância externa, conceda os privilégios REPLICATION CLIENT e REPLICATION SLAVE para seu usuário de replicação. Por exemplo, para conceder os privilégios de REPLICATION CLIENT e REPLICATION SLAVE em todos os bancos de dados para o usuário 'repl_user' de seu domínio, emita o seguinte comando.

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
  8. Transforma a instância de banco de dados do Amazon RDS na réplica. Para fazer isso, primeiro se conecte à instância de banco de dados do Amazon RDS como usuário mestre. Depois disso, identifique o banco de dados MySQL ou MariaDB externo como a instância de origem usando o comando mysql.rds_set_external_master. Use o nome do arquivo de log mestre e a posição do log mestre que você determinou na etapa 2. Veja um exemplo a seguir.

    CALL mysql.rds_set_external_master ('mymasterserver.mydomain.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 0);
    nota

    No MySQL do Amazon RDS, é possível escolher usar a replicação atrasada executando o procedimento armazenado mysql.rds_set_external_master_with_delay. Um motivo para usar a replicação atrasada é habilitar a recuperação de desastres com o procedimento armazenado mysql.rds_start_replication_until. Atualmente, a replicação atrasada não tem suporte no MariaDB do Amazon RDS.

  9. Na instância de banco de dados do Amazon RDS, emita o comando mysql.rds_start_replication para iniciar a replicação:

    CALL mysql.rds_start_replication;

Configurar a replicação baseada em GTID com uma instância de origem externa

Ao configurar uma instância de origem externa e uma réplica no Amazon RDS, monitore eventos de failover para a instância de banco de dados do Amazon RDS que seja a réplica. Se ocorrer um failover, a instância de banco de dados que for a sua réplica poderá ser recriada em um novo host com um endereço de rede diferente. Para obter informações sobre como monitorar eventos de failover, consulte Usar a notificação de evento do Amazon RDS.

Importante

A replicação baseada em GTID só é compatível no MySQL Amazon RDS versão 5.7.23 e versões MySQL 5.7 posteriores. A replicação baseada em GTID não é compatível com MySQL Amazon RDS 5.5, 5.6 ou 8.0.

Como configurar a replicação baseada em GTID com uma instância de origem externa

  1. Prepare-se para replicação baseada em GTID:

    1. Verifique se o banco de dados MySQL ou MariaDB externo tem a replicação baseada em GTID habilitada. Para isso, verifique se o banco de dados externo tem os seguintes parâmetros definidos como os valores especificados:

      gtid_modeON

      enforce_gtid_consistencyON

      Para obter mais informações, consulte Replication with Global Transaction Identifiers na documentação do MySQL ou Global Transaction ID na documentação do MariaDB.

    2. Verifique se o grupo de parâmetros associado a uma instância de banco de dados tem as seguintes configurações de parâmetro:

      • gtid_modeON, ON_PERMISSIVE ou OFF_PERMISSIVE

      • enforce_gtid_consistencyON

      Para obter mais informações sobre parameter groups, consulte Como trabalhar com parameter groups de banco de dados.

    3. Se você tiver alterado o grupo de parâmetros da instância de banco de dados, reinicie a instância de banco de dados. Para obter mais informações, consulte Reinicializar uma instância de banco de dados .

  2. Torne a instância de origem MySQL ou MariaDB somente leitura.

    mysql> FLUSH TABLES WITH READ LOCK; mysql> SET GLOBAL read_only = ON;
  3. Copie o banco de dados da instância externa para a instância de banco de dados do Amazon RDS usando mysqldump. Para bancos de dados muito grandes, convém usar o procedimento em Importar dados para uma instância de banco de dados MariaDB ou MySQL do Amazon RDS com tempo de inatividade reduzido.

    Para Linux, macOS ou Unix:

    mysqldump --databases database_name \ --single-transaction \ --compress \ --order-by-primary \ -u local_user \ -plocal_password | mysql \ --host=hostname \ --port=3306 \ -u RDS_user_name \ -pRDS_password

    Para Windows:

    mysqldump --databases database_name ^ --single-transaction ^ --compress ^ --order-by-primary ^ -u local_user ^ -plocal_password | mysql ^ --host=hostname ^ --port=3306 ^ -u RDS_user_name ^ -pRDS_password
    nota

    Confirme que não há um espaço entre a opção -p e a senha inserida.

    Para especificar o nome do host, o nome do usuário, a porta e a senha para se conectar à instância de banco de dados Amazon RDS, use as opções --host, --user (-u), --port e -p no comando mysql. O nome do host é o nome de DNS do endpoint da instância de banco de dados do Amazon RDS, por exemplo, myinstance.123456789012.us-east-1.rds.amazonaws.com. Você pode encontrar o valor do endpoint nos detalhes da instância no Console de gerenciamento da AWS.

  4. Torne a instância MySQL ou MariaDB de origem novamente gravável.

    mysql> SET GLOBAL read_only = OFF; mysql> UNLOCK TABLES;

    Para obter mais informações sobre como fazer backups para usar com a replicação, consulte a documentação do MySQL.

  5. No Console de gerenciamento da AWS, adicione o endereço IP do servidor que hospeda o banco de dados externo ao grupo de segurança da VPC para a instância de banco de dados do Amazon RDS. Para obter mais informações sobre como modificar um grupo de segurança da VPC, consulte Grupos de segurança para sua VPC no Guia do usuário da Amazon Virtual Private Cloud.

    O endereço IP poderá ser alterado se as seguintes condições forem atendidas:

    • Se você estiver usando um endereço IP público para a comunicação entre a instância de origem externa e a instância de banco de dados.

    • A instância de origem externa foi interrompida e reiniciada.

    Se essas condições forem atendidas, verifique o endereço IP antes de adicioná-lo.

    Você também pode precisar configurar a rede local para permitir conexões com o endereço IP da instância de banco de dados do Amazon RDS. Isso é realizado para que a rede local consiga se comunicar com a instância do MySQL ou do MariaDB externa. Para localizar o endereço IP da instância de banco de dados do Amazon RDS, use o comando host.

    host db_instance_endpoint

    O nome do host é o nome de DNS do endpoint da instância de banco de dados do Amazon RDS.

  6. Usando o cliente de sua preferência, conecte-se à instância externa e crie um usuário a ser usado para a replicação. Use essa conta unicamente para replicação e restringi-la ao seu domínio para melhorar a segurança. Veja um exemplo a seguir.

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
  7. Para a instância externa, conceda os privilégios REPLICATION CLIENT e REPLICATION SLAVE para seu usuário de replicação. Por exemplo, para conceder os privilégios de REPLICATION CLIENT e REPLICATION SLAVE em todos os bancos de dados para o usuário 'repl_user' de seu domínio, emita o seguinte comando.

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
  8. Transforma a instância de banco de dados do Amazon RDS na réplica. Para fazer isso, primeiro se conecte à instância de banco de dados do Amazon RDS como usuário mestre. Depois disso, identifique o banco de dados MySQL ou MariaDB externo como a instância primária de replicação usando o comando mysql.rds_set_external_master_with_auto_position. Veja um exemplo a seguir.

    CALL mysql.rds_set_external_master_with_auto_position ('mymasterserver.mydomain.com', 3306, 'repl_user', 'password', 0, 0);
    nota

    No MySQL do Amazon RDS, é possível escolher usar a replicação atrasada executando o procedimento armazenado mysql.rds_set_external_master_with_delay. Um motivo para usar a replicação atrasada é habilitar a recuperação de desastres com o procedimento armazenado mysql.rds_start_replication_until_gtid. Atualmente, a replicação atrasada não tem suporte no MariaDB do Amazon RDS.

  9. Na instância de banco de dados do Amazon RDS, emita o comando mysql.rds_start_replication para iniciar a replicação.

    CALL mysql.rds_start_replication;