Replicação - Amazon Relational Database Service

Replicação

Os procedimentos armazenados a seguir controlam como as transações são replicadas de um banco de dados externo para o RDS para MySQL, ou do RDS para MySQL para um banco de dados externo. Para aprender a usar a replicação baseada em identificadores de transação global (GTIDs) com o RDS para MySQL, consulte Usar a replicação baseada em GTID para o Amazon RDS for MySQL.

mysql.rds_next_master_log

Altera a posição do log da instância de banco de dados de origem para o início do próximo log binário na instância de banco de dados de origem. Use este procedimento somente se estiver recebendo o erro 1236 de E/S de replicação em uma réplica de leitura.

Sintaxe

CALL mysql.rds_next_master_log( curr_master_log );

Parâmetros

curr_master_log

O índice do arquivo de log mestre atual. Por exemplo, se o arquivo atual dor denominado mysql-bin-changelog.012345, o índice será 12345. Para determinar o nome do arquivo de log do mestre, execute o comando SHOW REPLICA STATUS e veja o campo Master_Log_File.

nota

As versões anteriores do MySQL usavam SHOW SLAVE STATUS em vez de SHOW REPLICA STATUS. Se você estiver usando uma versão do MySQL anterior à 8.0.23, use SHOW SLAVE STATUS.

Observações de uso

O usuário mestre deve executar o procedimento mysql.rds_next_master_log.

Atenção

Chame mysql.rds_next_master_log somente se a replicação falhar após um failover de uma instância de banco de dados multi-AZ que for a origem da replicação, e o campo Last_IO_Errno do SHOW REPLICA STATUS reportar o erro 1236 de E/S.

Chamar mysql.rds_next_master_log pode resultar em perda de dados na réplica de leitura caso as transações na instância de origem não tenham sido gravadas no log binário no disco antes do evento de failover.

Você pode reduzir a chance de que isso aconteça configurando os parâmetros sync_binlog e innodb_support_xa da instância de origem como 1, embora isso possa reduzir a performance. Para obter mais informações, consulte Solucionar problemas de uma réplica de leitura do MySQL.

Exemplos

Suponha que a replicação falhe em uma réplica de leitura do RDS para MySQL. A execução de SHOW REPLICA STATUS\G na réplica de leitura retorna o seguinte resultado:

*************************** 1. row *************************** Replica_IO_State: Source_Host: myhost.XXXXXXXXXXXXXXX.rr-rrrr-1.rds.amazonaws.com Source_User: MasterUser Source_Port: 3306 Connect_Retry: 10 Source_Log_File: mysql-bin-changelog.012345 Read_Source_Log_Pos: 1219393 Relay_Log_File: relaylog.012340 Relay_Log_Pos: 30223388 Relay_Source_Log_File: mysql-bin-changelog.012345 Replica_IO_Running: No Replica_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Source_Log_Pos: 30223232 Relay_Log_Space: 5248928866 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Source_SSL_Allowed: No Source_SSL_CA_File: Source_SSL_CA_Path: Source_SSL_Cert: Source_SSL_Cipher: Source_SSL_Key: Seconds_Behind_Master: NULL Source_SSL_Verify_Server_Cert: No Last_IO_Errno: 1236 Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position; the first event 'mysql-bin-changelog.013406' at 1219393, the last event read from '/rdsdbdata/log/binlog/mysql-bin-changelog.012345' at 4, the last byte read from '/rdsdbdata/log/binlog/mysql-bin-changelog.012345' at 4.' Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Source_Server_Id: 67285976

O campo Last_IO_Errno mostra que a instância está recebendo o erro 1236 de E/S. O campo Master_Log_File mostra que o nome do arquivo é mysql-bin-changelog.012345, o que significa que o índice de arquivos de log é 12345. Para resolver o erro, chame mysql.rds_next_master_log com o seguinte parâmetro:

CALL mysql.rds_next_master_log(12345);
nota

As versões anteriores do MySQL usavam SHOW SLAVE STATUS em vez de SHOW REPLICA STATUS. Se você estiver usando uma versão do MySQL anterior à 8.0.23, use SHOW SLAVE STATUS.

mysql.rds_reset_external_master

Reconfigura uma instância de banco de dados do RDS para MySQL para que não seja mais uma réplica de leitura de uma instância do MySQL executada fora do Amazon RDS.

Importante

Para executar esse procedimento, autocommit deve estar habilitado. Para habilitá-lo, defina o parâmetro autocommit como 1. Para obter informações sobre como modificar parâmetros, consulte Modificar parâmetros em um grupo de parâmetros de banco de dados.

Sintaxe

CALL mysql.rds_reset_external_master;

Observações de uso

O usuário mestre deve executar o procedimento mysql.rds_reset_external_master. Esse procedimento deve ser executado na instância de banco de dados MySQL a ser removida como a réplica de leitura de uma instância do MySQL sendo executada externamente ao Amazon RDS.

nota

Recomendamos que você use réplicas de leitura para gerenciar a replicação entre duas instâncias de banco de dados do Amazon RDS, sempre que possível. Quando você o fizer, recomendamos o uso somente desse e de outros procedimentos armazenados relacionados a replicação. Essas práticas permitem o uso de topologias de replicação mais complexas entre as instâncias de banco de dados do Amazon RDS. Oferecemos esses procedimentos armazenados principalmente para permitir a replicação com instâncias do MySQL externas ao Amazon RDS. Para obter informações sobre como gerenciar a replicação entre instâncias de banco de dados do Amazon RDS, consulte Trabalhar com réplicas de leitura de instância de banco de dados.

Para obter mais informações sobre como usar a replicação para importar dados de uma instância do MySQL sendo executada externamente ao Amazon RDS, consulte Configurar a replicação da posição do arquivo de log binário com uma instância de origem externa.

mysql.rds_set_external_master

Configura uma instância de banco de dados do RDS para MySQL para que seja uma réplica de leitura de uma instância do MySQL executada fora do Amazon RDS.

Importante

Para executar esse procedimento, autocommit deve estar habilitado. Para habilitá-lo, defina o parâmetro autocommit como 1. Para obter informações sobre como modificar parâmetros, consulte Modificar parâmetros em um grupo de parâmetros de banco de dados.

nota

É possível usar o procedimento mysql.rds_set_external_master_with_delay armazenado para configurar uma instância de banco de dados de origem externa e uma replicação atrasada.

Sintaxe

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 , ssl_encryption );

Parâmetros

host_name

O nome de host ou o endereço IP da instância do MySQL executada externamente ao Amazon RDS que se tornará a instância de banco de dados de origem.

host_port

A porta usada para executar a instância do MySQL executada externamente ao Amazon RDS a ser configurada como a instância de banco de dados de origem. Se sua configuração de rede inclui replicação de porta Secure Shell (SSH) que converte o número da porta, especifique o número da porta exposto pelo SSH.

replication_user_name

O ID de um usuário com as permissões REPLICATION CLIENT e REPLICATION SLAVE na instância do MySQL executada externamente ao Amazon RDS. Recomendamos que você forneça uma conta que seja usada unicamente para a replicação com a instância externa.

replication_user_password

A senha do ID de usuário especificada em replication_user_name.

mysql_binary_log_file_name

O nome do log binário na instância de banco de dados de origem que contém as informações de replicação.

mysql_binary_log_file_location

O local no log binário mysql_binary_log_file_name no qual a replicação começa a ler as informações de replicação.

É possível determinar o nome e a localização do arquivo de binlog executando SHOW MASTER STATUS na instância do banco de dados de origem.

ssl_encryption

Um valor que especifica se a criptografia do Secure Sockets Layer (SSL) será usada na conexão de replicação. 1 especifica para usar criptografia de SSL, 0 especifica para não usar criptografia. O padrão é 0.

nota

A opção MASTER_SSL_VERIFY_SERVER_CERT não tem suporte. Essa opção é definida como 0, o que significa que a conexão é criptografada, mas os certificados não são verificados.

Observações de uso

O usuário mestre deve executar o procedimento mysql.rds_set_external_master. Esse procedimento deve ser executado na instância de banco de dados MySQL que será configurada como a réplica de leitura de uma instância do MySQL externa ao Amazon RDS.

Antes de executar mysql.rds_set_external_master, é necessário configurar a instância do MySQL executada externamente ao Amazon RDS para ser uma instância de banco de dados de origem. Para conectar-se à instância do MySQL sendo executada externamente ao Amazon RDS, você deve especificar valores de replication_user_name e replication_user_password que indicam um usuário de replicação com permissões de REPLICATION CLIENT e REPLICATION SLAVE na instância externa do MySQL.

Como configurar uma instância externa do MySQL como uma instância de banco de dados de origem
  1. Usando o cliente do MySQL de sua escolha, conecte-se à instância externa do MySQL e crie uma conta de usuário a ser usada para a replicação. Veja um exemplo a seguir.

    MySQL 5.7

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';

    MySQL 8.0

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED WITH mysql_native_password BY 'password';
    nota

    Especifique uma senha diferente do prompt mostrado aqui como prática recomendada de segurança.

  2. Na instância externa do MySQL, conceda privilégios de REPLICATION CLIENT e REPLICATION SLAVE para seu usuário de replicação. O exemplo a seguir concede privilégios de REPLICATION CLIENT e REPLICATION SLAVE ao usuário 'repl_user' em todos os bancos de dados de seu domínio.

    MySQL 5.7

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';

    MySQL 8.0

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com';

Para usar a replicação criptografada, configure a instância de banco de dados de origem para usar conexões SSL.

nota

Recomendamos que você use réplicas de leitura para gerenciar a replicação entre duas instâncias de banco de dados do Amazon RDS, sempre que possível. Quando você o fizer, recomendamos o uso somente desse e de outros procedimentos armazenados relacionados a replicação. Essas práticas permitem o uso de topologias de replicação mais complexas entre as instâncias de banco de dados do Amazon RDS. Oferecemos esses procedimentos armazenados principalmente para permitir a replicação com instâncias do MySQL externas ao Amazon RDS. Para obter informações sobre como gerenciar a replicação entre instâncias de banco de dados do Amazon RDS, consulte Trabalhar com réplicas de leitura de instância de banco de dados.

Depois de chamar mysql.rds_set_external_master para configurar uma instância de banco de dados do Amazon RDS, é possível chamar mysql.rds_start_replication na réplica de leitura para iniciar o processo de replicação. É possível chamar mysql.rds_reset_external_master para remover a configuração da réplica de leitura.

Quando mysql.rds_set_external_master é chamado, o Amazon RDS grava a hora, o usuário e uma ação do set master nas tabelas mysql.rds_history e mysql.rds_replication_status.

Exemplos

Ao executar em uma instância de banco de dados MySQL, o exemplo a seguir configura a instância do banco de dados para ser uma réplica de leitura de uma instância do MySQL que é executada externamente ao Amazon RDS.

call mysql.rds_set_external_master( 'Externaldb.some.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.0777', 120, 0);

mysql.rds_set_external_master_with_auto_position

Configura uma instância de banco de dados do RDS para MySQL para ser uma réplica de leitura de uma instância do MySQL executada externamente em relação ao Amazon RDS. Esse procedimento também configura a replicação atrasada e a replicação baseada em identificadores de transações globais (GTIDs).

Importante

Para executar esse procedimento, autocommit deve estar habilitado. Para habilitá-lo, defina o parâmetro autocommit como 1. Para obter informações sobre como modificar parâmetros, consulte Modificar parâmetros em um grupo de parâmetros de banco de dados.

Sintaxe

CALL mysql.rds_set_external_master_with_auto_position ( host_name , host_port , replication_user_name , replication_user_password , ssl_encryption , delay );

Parâmetros

host_name

O nome de host ou o endereço IP da instância do MySQL executada externamente ao Amazon RDS que se tornará a instância de banco de dados de origem.

host_port

A porta usada para executar a instância do MySQL executada externamente ao Amazon RDS a ser configurada como a instância de banco de dados de origem. Se sua configuração de rede inclui replicação de porta Secure Shell (SSH) que converte o número da porta, especifique o número da porta exposto pelo SSH.

replication_user_name

O ID de um usuário com as permissões REPLICATION CLIENT e REPLICATION SLAVE na instância do MySQL executada externamente ao Amazon RDS. Recomendamos que você forneça uma conta que seja usada unicamente para a replicação com a instância externa.

replication_user_password

A senha do ID de usuário especificada em replication_user_name.

ssl_encryption

Um valor que especifica se a criptografia do Secure Sockets Layer (SSL) será usada na conexão de replicação. 1 especifica para usar criptografia de SSL, 0 especifica para não usar criptografia. O padrão é 0.

nota

A opção MASTER_SSL_VERIFY_SERVER_CERT não tem suporte. Essa opção é definida como 0, o que significa que a conexão é criptografada, mas os certificados não são verificados.

delay

O número mínimo de segundos para atrasar a replicação da instância de banco de dados de origem.

O limite para esse parâmetro é de um dia (86.400 segundos).

Observações de uso

O usuário mestre deve executar o procedimento mysql.rds_set_external_master_with_auto_position. Esse procedimento deve ser executado na instância de banco de dados MySQL que será configurada como a réplica de leitura de uma instância do MySQL externa ao Amazon RDS.

Esse procedimento é compatível com todas as versões 5.7 do RDS para MySQL e com o RDS para MySQL 8.0.26 e versões 8.0 posteriores.

Antes de executar mysql.rds_set_external_master_with_auto_position, é necessário configurar a instância do MySQL executada externamente ao Amazon RDS para ser uma instância de banco de dados de origem. Para conectar-se à instância do MySQL que é externa ao Amazon RDS, você deve especificar os valores de replication_user_name e replication_user_password. Esses valores devem indicar um usuário de replicação que tenha as permissões REPLICATION CLIENT e REPLICATION SLAVE na instância externa do MySQL.

Como configurar uma instância externa do MySQL como uma instância de banco de dados de origem
  1. Usando o cliente do MySQL de sua escolha, conecte-se à instância externa do MySQL e crie uma conta de usuário a ser usada para a replicação. Veja um exemplo a seguir.

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'
  2. Na instância externa do MySQL, conceda privilégios de REPLICATION CLIENT e REPLICATION SLAVE para seu usuário de replicação. O exemplo a seguir concede privilégios de REPLICATION CLIENT e REPLICATION SLAVE ao usuário 'repl_user' em todos os bancos de dados de seu domínio.

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'

Para obter mais informações, consulte Configurar a replicação da posição do arquivo de log binário com uma instância de origem externa.

nota

Recomendamos que você use réplicas de leitura para gerenciar a replicação entre duas instâncias de banco de dados do Amazon RDS, sempre que possível. Quando você o fizer, recomendamos o uso somente desse e de outros procedimentos armazenados relacionados a replicação. Essas práticas permitem o uso de topologias de replicação mais complexas entre as instâncias de banco de dados do Amazon RDS. Oferecemos esses procedimentos armazenados principalmente para permitir a replicação com instâncias do MySQL externas ao Amazon RDS. Para obter informações sobre como gerenciar a replicação entre instâncias de banco de dados do Amazon RDS, consulte Trabalhar com réplicas de leitura de instância de banco de dados.

Depois de chamar mysql.rds_set_external_master_with_auto_position para configurar uma instância de banco de dados do Amazon RDS, é possível chamar mysql.rds_start_replication na réplica de leitura para iniciar o processo de replicação. É possível chamar mysql.rds_reset_external_master para remover a configuração da réplica de leitura.

Ao chamar mysql.rds_set_external_master_with_auto_position, o Amazon RDS registra a hora, o usuário e uma ação do set master nas tabelas mysql.rds_history e mysql.rds_replication_status.

Para a recuperação de desastres, você pode usar esse procedimento com o procedimento armazenado mysql.rds_start_replication_until ou o mysql.rds_start_replication_until_gtid. Para efetuar roll forward de alterações para uma réplica de leitura atrasada no momento imediatamente antes de um desastre, é possível executar o procedimento mysql.rds_set_external_master_with_auto_position. Depois que o procedimento mysql.rds_start_replication_until_gtid interromper a replicação, é possível promover a réplica de leitura para ser a nova instância de banco de dados primária usando as instruções em Promoção de uma réplica de leitura a uma instância de banco de dados autônoma.

Para usar o procedimento mysql.rds_rds_start_replication_until_gtid, a replicação baseada em GTID deve estar habilitada. Para ignorar uma transação específica baseada em GTID que seja conhecida por causar desastres, use o procedimento armazenado mysql.rds_skip_transaction_with_gtid. Para obter mais informações sobre como trabalhar com a replicação baseada em GTID, consulte Usar a replicação baseada em GTID para o Amazon RDS for MySQL.

Exemplos

Ao executar em uma instância de banco de dados MySQL, o exemplo a seguir configura a instância do banco de dados para ser uma réplica de leitura de uma instância do MySQL que é executada externamente ao Amazon RDS. Ele define o atraso mínimo de replicação como uma hora (3.600 segundos) na instância de banco de dados MySQL. Uma alteração da instância do banco de dados de origem MySQL executada externamente ao Amazon RDS não é aplicada à réplica de leitura da instância de banco de dados MySQL por pelo menos uma hora.

call mysql.rds_set_external_master_with_auto_position( 'Externaldb.some.com', 3306, 'repl_user', 'SomePassW0rd', 0, 3600);

mysql.rds_set_external_master_with_delay

Configura uma instância de banco de dados do RDS para MySQL para ser uma réplica de leitura de uma instância do MySQL executada externamente em relação ao Amazon RDS e configura a replicação atrasada.

Importante

Para executar esse procedimento, autocommit deve estar habilitado. Para habilitá-lo, defina o parâmetro autocommit como 1. Para obter informações sobre como modificar parâmetros, consulte Modificar parâmetros em um grupo de parâmetros de banco de dados.

Sintaxe

CALL mysql.rds_set_external_master_with_delay ( host_name , host_port , replication_user_name , replication_user_password , mysql_binary_log_file_name , mysql_binary_log_file_location , ssl_encryption , delay );

Parâmetros

host_name

O nome de host ou o endereço IP da instância do MySQL executada externamente ao Amazon RDS que se tornará a instância de banco de dados de origem.

host_port

A porta usada para executar a instância do MySQL executada externamente ao Amazon RDS a ser configurada como a instância de banco de dados de origem. Se sua configuração de rede inclui replicação de porta SSH que converte o número da porta, especifique o número da porta exposto pelo SSH.

replication_user_name

O ID de um usuário com as permissões REPLICATION CLIENT e REPLICATION SLAVE na instância do MySQL executada externamente ao Amazon RDS. Recomendamos que você forneça uma conta que seja usada unicamente para a replicação com a instância externa.

replication_user_password

A senha do ID de usuário especificada em replication_user_name.

mysql_binary_log_file_name

O nome do log binário na instância de banco de dados de origem contém as informações de replicação.

mysql_binary_log_file_location

O local no log binário mysql_binary_log_file_name no qual a replicação começará a ler as informações de replicação.

É possível determinar o nome e a localização do arquivo de binlog executando SHOW MASTER STATUS na instância do banco de dados de origem.

ssl_encryption

Um valor que especifica se a criptografia do Secure Sockets Layer (SSL) será usada na conexão de replicação. 1 especifica para usar criptografia de SSL, 0 especifica para não usar criptografia. O padrão é 0.

nota

A opção MASTER_SSL_VERIFY_SERVER_CERT não tem suporte. Essa opção é definida como 0, o que significa que a conexão é criptografada, mas os certificados não são verificados.

delay

O número mínimo de segundos para atrasar a replicação da instância de banco de dados de origem.

O limite para esse parâmetro é de um dia (86.400 segundos).

Observações de uso

O usuário mestre deve executar o procedimento mysql.rds_set_external_master_with_delay. Esse procedimento deve ser executado na instância de banco de dados MySQL que será configurada como a réplica de leitura de uma instância do MySQL externa ao Amazon RDS.

Antes de executar mysql.rds_set_external_master_with_delay, é necessário configurar a instância do MySQL executada externamente ao Amazon RDS para ser uma instância de banco de dados de origem. Para conectar-se à instância do MySQL que é externa ao Amazon RDS, você deve especificar os valores de replication_user_name e replication_user_password. Esses valores devem indicar um usuário de replicação que tenha as permissões REPLICATION CLIENT e REPLICATION SLAVE na instância externa do MySQL.

Como configurar uma instância externa do MySQL como uma instância de banco de dados de origem
  1. Usando o cliente do MySQL de sua escolha, conecte-se à instância externa do MySQL e crie uma conta de usuário a ser usada para a replicação. Veja um exemplo a seguir.

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'
  2. Na instância externa do MySQL, conceda privilégios de REPLICATION CLIENT e REPLICATION SLAVE para seu usuário de replicação. O exemplo a seguir concede privilégios de REPLICATION CLIENT e REPLICATION SLAVE ao usuário 'repl_user' em todos os bancos de dados de seu domínio.

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'

Para obter mais informações, consulte Configurar a replicação da posição do arquivo de log binário com uma instância de origem externa.

nota

Recomendamos que você use réplicas de leitura para gerenciar a replicação entre duas instâncias de banco de dados do Amazon RDS, sempre que possível. Quando você o fizer, recomendamos o uso somente desse e de outros procedimentos armazenados relacionados a replicação. Essas práticas permitem o uso de topologias de replicação mais complexas entre as instâncias de banco de dados do Amazon RDS. Oferecemos esses procedimentos armazenados principalmente para permitir a replicação com instâncias do MySQL externas ao Amazon RDS. Para obter informações sobre como gerenciar a replicação entre instâncias de banco de dados do Amazon RDS, consulte Trabalhar com réplicas de leitura de instância de banco de dados.

Depois de chamar mysql.rds_set_external_master_with_delay para configurar uma instância de banco de dados do Amazon RDS, é possível chamar mysql.rds_start_replication na réplica de leitura para iniciar o processo de replicação. É possível chamar mysql.rds_reset_external_master para remover a configuração da réplica de leitura.

Ao chamar mysql.rds_set_external_master_with_delay, o Amazon RDS registra a hora, o usuário e uma ação do set master nas tabelas mysql.rds_history e mysql.rds_replication_status.

Para a recuperação de desastres, você pode usar esse procedimento com o procedimento armazenado mysql.rds_start_replication_until ou o mysql.rds_start_replication_until_gtid. Para efetuar roll forward de alterações para uma réplica de leitura atrasada no momento imediatamente antes de um desastre, é possível executar o procedimento mysql.rds_set_external_master_with_delay. Depois que o procedimento mysql.rds_start_replication_until interromper a replicação, é possível promover a réplica de leitura para ser a nova instância de banco de dados primária usando as instruções em Promoção de uma réplica de leitura a uma instância de banco de dados autônoma.

Para usar o procedimento mysql.rds_rds_start_replication_until_gtid, a replicação baseada em GTID deve estar habilitada. Para ignorar uma transação específica baseada em GTID que seja conhecida por causar desastres, use o procedimento armazenado mysql.rds_skip_transaction_with_gtid. Para obter mais informações sobre como trabalhar com a replicação baseada em GTID, consulte Usar a replicação baseada em GTID para o Amazon RDS for MySQL.

O procedimento mysql.rds_set_external_master_with_delay está disponível nestas versões do RDS para MySQL:

  • MySQL 8.0.26 e versões 8.0 posteriores

  • Todas as versões 5.7

Exemplos

Ao executar em uma instância de banco de dados MySQL, o exemplo a seguir configura a instância do banco de dados para ser uma réplica de leitura de uma instância do MySQL que é executada externamente ao Amazon RDS. Ele define o atraso mínimo de replicação como uma hora (3.600 segundos) na instância de banco de dados MySQL. Uma alteração da instância do banco de dados de origem MySQL executada externamente ao Amazon RDS não é aplicada à réplica de leitura da instância de banco de dados MySQL por pelo menos uma hora.

call mysql.rds_set_external_master_with_delay( 'Externaldb.some.com', 3306, 'repl_user', 'SomePassW0rd', 'mysql-bin-changelog.000777', 120, 0, 3600);

mysql.rds_set_master_auto_position

Define o modo de replicação de base nas posições do arquivo de log binário ou nos identificadores de transações globais (GTIDs).

Sintaxe

CALL mysql.rds_set_master_auto_position ( auto_position_mode );

Parâmetros

auto_position_mode

Um valor que indica se será usada a replicação de posição do arquivo de log ou a replicação com base no GTID:

  • 0: usar o método de replicação com base na posição do arquivo de log binário. O padrão é 0.

  • 1: usar o método de replicação com base no GTID.

Observações de uso

O usuário principal deve executar o procedimento mysql.rds_set_master_auto_position.

Esse procedimento é compatível com todas as versões 5.7 do RDS para MySQL e com o RDS para MySQL 8.0.26 e versões 8.0 posteriores.

mysql.rds_set_source_delay

Define o número mínimo de segundos para atrasar a replicação da instância de banco de dados de origem para a réplica de leitura atual. Use esse procedimento quando estiver conectado a uma réplica de leitura para atrasar a replicação da instância de banco de dados de origem.

Sintaxe

CALL mysql.rds_set_source_delay( delay );

Parâmetros

delay

O número mínimo de segundos para atrasar a replicação da instância de banco de dados de origem.

O limite para esse parâmetro é de um dia (86.400 segundos).

Observações de uso

O usuário mestre deve executar o procedimento mysql.rds_set_source_delay.

Para a recuperação de desastres, você pode usar esse procedimento com o procedimento armazenado mysql.rds_start_replication_until ou o mysql.rds_start_replication_until_gtid. Para efetuar roll forward de alterações para uma réplica de leitura atrasada no momento imediatamente antes de um desastre, é possível executar o procedimento mysql.rds_set_source_delay. Depois que o procedimento mysql.rds_start_replication_until ou mysql.rds_start_replication_until_gtid interromper a replicação, é possível promover a réplica de leitura para ser a nova instância de banco de dados primária usando as instruções em Promoção de uma réplica de leitura a uma instância de banco de dados autônoma.

Para usar o procedimento mysql.rds_rds_start_replication_until_gtid, a replicação baseada em GTID deve estar habilitada. Para ignorar uma transação específica baseada em GTID que seja conhecida por causar desastres, use o procedimento armazenado mysql.rds_skip_transaction_with_gtid. Para obter mais informações sobre a replicação baseada em GTID, consulte Usar a replicação baseada em GTID para o Amazon RDS for MySQL.

O procedimento mysql.rds_set_source_delay está disponível nestas versões do RDS para MySQL:

  • MySQL 8.0.26 e versões 8.0 posteriores

  • Todas as versões 5.7

Exemplos

Para atrasar a replicação da instância de banco de dados de origem para a réplica de leitura atual por pelo menos uma hora (3.600 segundos), é possível chamar mysql.rds_set_source_delay com o seguinte parâmetro:

CALL mysql.rds_set_source_delay(3600);

mysql.rds_skip_transaction_with_gtid

Ignora a replicação de uma transação com o identificador de transação global (GTID) especificado em uma instância de banco de dados MySQL.

Você pode usar esse procedimento para a recuperação de desastres, quando uma transação baseada em GTID específica for conhecida por causar desastres. Use esse procedimento armazenado para ignorar a transação problemática. Exemplos de transações problemáticas incluem transações que desabilitam a replicação, excluem dados importantes ou fazem com que a instância de banco de dados se torne indisponível.

Sintaxe

CALL mysql.rds_skip_transaction_with_gtid ( gtid_to_skip );

Parâmetros

gtid_to_skip

O GTID da transação de replicação a ser ignorada.

Observações de uso

O usuário principal deve executar o procedimento mysql.rds_skip_transaction_with_gtid.

Esse procedimento é compatível com todas as versões 5.7 do RDS para MySQL e com o RDS para MySQL 8.0.26 e versões 8.0 posteriores.

Exemplos

O exemplo a seguir ignora a replicação da transação com o GTID 3E11FA47-71CA-11E1-9E33-C80AA9429562:23.

call mysql.rds_skip_transaction_with_gtid('3E11FA47-71CA-11E1-9E33-C80AA9429562:23');

mysql.rds_skip_repl_error

Ignora e exclui um erro de replicação em uma réplica de leitura de banco de dados MySQL.

Sintaxe

CALL mysql.rds_skip_repl_error;

Observações de uso

O usuário principal deve executar o procedimento mysql.rds_skip_repl_error em uma réplica de leitura. Para obter mais informações sobre esse procedimento, consulte Chamando o procedimento mysql.rds_skip_repl_error.

Para determinar se há erros, execute o comando SHOW REPLICA STATUS\G do MySQL. Se um erro de replicação não for crítico, execute mysql.rds_skip_repl_error para ignorá-lo. Se houver vários, mysql.rds_skip_repl_error exclui o primeiro erro, depois avisa que há outros ainda. Assim, você pode usar SHOW REPLICA STATUS\G para determinar o plano de ação correto para o próximo erro. Para obter informações sobre os valores retornados, consulte Instrução SHOW REPLICA STATUS na documentação do MySQL.

nota

As versões anteriores do MySQL usavam SHOW SLAVE STATUS em vez de SHOW REPLICA STATUS. Se você estiver usando uma versão do MySQL anterior à 8.0.23, use SHOW SLAVE STATUS.

Para obter mais informações sobre como lidar com erros de replicação no Amazon RDS, consulte Solucionar problemas de uma réplica de leitura do MySQL.

Erro de replicação interrompida

Ao chamar o procedimento mysql.rds_skip_repl_error, você pode receber uma mensagem de erro informando que a réplica está inativa ou desativada.

Essa mensagem de erro aparece quando você executa o procedimento na instância primária em vez da réplica de leitura. Você deve executar esse procedimento na réplica de leitura para que o procedimento funcione.

Essa mensagem de erro também poderá aparecer se você executar o procedimento na réplica de leitura, mas a replicação não poderá ser reiniciada com êxito.

Se você precisar ignorar um grande número de erros, o atraso de replicação poderá aumentar além do período de retenção padrão para arquivos de log binário (binlog). Nesse caso, você poderá encontrar um erro fatal, com os arquivos binlog sendo limpos antes de sua reprodução na réplica de leitura. Essa remoção faz com que a replicação pare, e você não consegue chamar o comando mysql.rds_skip_repl_error para ignorar erros de replicação.

É possível mitigar esse problema aumentando o número de horas em que os arquivos binlog são retidos na instância de banco de dados de origem. Após aumentar o período de retenção de log binário, você pode reiniciar a replicação e chamar o comando mysql.rds_skip_repl_error conforme necessário.

Para definir o período de retenção do binlog, use o procedimento mysql.rds_set_configuration e especifique um parâmetro de configuração 'binlog retention hours', juntamente com o número de horas de retenção dos arquivos binlog no cluster do banco de dados. O exemplo a seguir define o período de retenção para arquivos de log binário em 48 horas.

CALL mysql.rds_set_configuration('binlog retention hours', 48);

mysql.rds_start_replication

Inicia a replicação de uma instância de banco de dados do RDS para MySQL.

nota

Você pode usar o procedimento armazenado mysql.rds_start_replication_until ou mysql.rds_start_replication_until_gtid para iniciar a replicação de uma instância de banco de dados do RDS para MySQL e interromper a replicação no local do arquivo de log binário especificado.

Sintaxe

CALL mysql.rds_start_replication;

Observações de uso

O usuário principal deve executar o procedimento mysql.rds_start_replication.

Para importar dados de uma instância do MySQL fora do Amazon RDS, chame mysql.rds_start_replication na réplica de leitura para iniciar o processo de replicação depois de ter chamado mysql.rds_set_external_master para criar a configuração de replicação. Para obter mais informações, consulte Restauração de um backup em uma instância de banco de dados MySQL.

Para exportar dados para uma instância do MySQL fora do Amazon RDS, chame mysql.rds_start_replication e mysql.rds_stop_replication na réplica de leitura para controlar algumas ações de replicação, como a remoção de logs binários. Para obter mais informações, consulte Exportar dados de uma instância de banco de dados MySQL usando replicação.

Também é possível chamar mysql.rds_start_replication na réplica de leitura para reiniciar qualquer processo de replicação que tenha sido interrompido anteriormente chamando mysql.rds_stop_replication. Para obter mais informações, consulte Trabalhar com réplicas de leitura de instância de banco de dados.

mysql.rds_start_replication_until

Inicia a replicação de uma instância de banco de dados do RDS para MySQL e interrompe a replicação no local do arquivo de log binário especificado.

Sintaxe

CALL mysql.rds_start_replication_until ( replication_log_file , replication_stop_point );

Parâmetros

replication_log_file

O nome do log binário na instância de banco de dados de origem que contém as informações de replicação.

replication_stop_point

O local no log binário replication_log_file no qual a replicação será interrompida.

Observações de uso

O usuário mestre deve executar o procedimento mysql.rds_start_replication_until.

O procedimento mysql.rds_start_replication_until está disponível nestas versões do RDS para MySQL:

  • MySQL 8.0.26 e versões 8.0 posteriores

  • Todas as versões 5.7

Você pode usar esse procedimento com a replicação atrasada para recuperação de desastres. Se você tiver a replicação atrasada configurada, use esse procedimento para efetuar roll forward de alterações em uma réplica de leitura atrasada para o momento imediatamente antes de um desastre. Depois que esse procedimento interromper a replicação, é possível promover a réplica de leitura para ser a nova instância de banco de dados primária usando as instruções em Promoção de uma réplica de leitura a uma instância de banco de dados autônoma.

Você pode configurar a replicação atrasada usando os seguintes procedimentos armazenados:

O nome do arquivo especificado para o parâmetro replication_log_file deve corresponder ao nome do arquivo do log binário da instância de banco de dados de origem.

Quando o parâmetro replication_stop_point especifica um local de parada no passado, a replicação é interrompida imediatamente.

Exemplos

O exemplo a seguir inicia a replicação e replica as alterações até que ela atinja o local 120 no arquivo de log binário mysql-bin-changelog.000777.

call mysql.rds_start_replication_until( 'mysql-bin-changelog.000777', 120);

mysql.rds_start_replication_until_gtid

Inicia a replicação de uma instância de banco de dados do RDS para MySQL e interrompe a replicação logo depois do identificador de transação global (GTID) especificado.

Sintaxe

CALL mysql.rds_start_replication_until_gtid(gtid);

Parâmetros

gtid

O GTID após o qual a replicação será interrompida.

Observações de uso

O usuário principal deve executar o procedimento mysql.rds_start_replication_until_gtid.

Esse procedimento é compatível com todas as versões 5.7 do RDS para MySQL e com o RDS para MySQL 8.0.26 e versões 8.0 posteriores.

Você pode usar esse procedimento com a replicação atrasada para recuperação de desastres. Se você tiver a replicação atrasada configurada, use esse procedimento para efetuar roll forward de alterações em uma réplica de leitura atrasada para o momento imediatamente antes de um desastre. Depois que esse procedimento interromper a replicação, é possível promover a réplica de leitura para ser a nova instância de banco de dados primária usando as instruções em Promoção de uma réplica de leitura a uma instância de banco de dados autônoma.

Você pode configurar a replicação atrasada usando os seguintes procedimentos armazenados:

Quando o parâmetro gtid especifica uma transação que já tenha sido executada pela réplica, a replicação é interrompida imediatamente.

Exemplos

O exemplo a seguir inicia a replicação e replica as alterações até atingir o GTID 3E11FA47-71CA-11E1-9E33-C80AA9429562:23.

call mysql.rds_start_replication_until_gtid('3E11FA47-71CA-11E1-9E33-C80AA9429562:23');

mysql.rds_stop_replication

Interrompe a replicação de uma instância de banco de dados MySQL.

Sintaxe

CALL mysql.rds_stop_replication;

Observações de uso

O usuário mestre deve executar o procedimento mysql.rds_stop_replication.

Se você estiver configurando a replicação para importar dados de uma instância do MySQL em execução externamente ao Amazon RDS, chame mysql.rds_stop_replication na réplica de leitura para encerrar o processo de replicação após a importação ter sido concluída. Para obter mais informações, consulte Restauração de um backup em uma instância de banco de dados MySQL.

Se estiver configurando a replicação para exportar dados para uma instância do MySQL externa ao Amazon RDS, chame mysql.rds_start_replication e mysql.rds_stop_replication na réplica de leitura para controlar algumas ações de replicação, como a remoção de logs binários. Para obter mais informações, consulte Exportar dados de uma instância de banco de dados MySQL usando replicação.

Você também pode usar mysql.rds_stop_replication para parar uma replicação entre duas instâncias de banco de dados do Amazon RDS. Normalmente, você interrompe a replicação para executar uma operação de execução longa na réplica de leitura, como ao criar um índice grande na réplica de leitura. Também é possível reiniciar qualquer processo de replicação que tenha sido interrompido chamando mysql.rds_start_replication na réplica de leitura. Para obter mais informações, consulte Trabalhar com réplicas de leitura de instância de banco de dados.