Usar a replicação baseada em GTID
O conteúdo a seguir explica como usar identificadores de transações globais (GTIDs) com a replicação de logs binários (binlog) entre instâncias de banco de dados do Amazon RDS para MySQL.
Se você usa a replicação de logs binários e não conhece a replicação baseada em GTID com o MySQL, consulte Replication with global transaction identifiers
A replicação baseada em GTID só é compatível com todas as versões 5.7 do RDS para MySQL e com o RDS para MySQL versão 8.0.26 e versões 8.0 posteriores do MySQL. Todas as instâncias de banco de dados do MySQL em uma configuração de replicação devem atender a esse requisito.
Tópicos
- Visão geral dos identificadores de transações globais (GTIDs)
- Parâmetros para replicação baseada em GTID
- Configuração da replicação baseada em GTID para novas réplicas de leitura
- Configuração da replicação baseada em GTID para réplicas de leitura existentes
- Desabilitação da replicação baseada em GTID para uma instância de banco de dados do RDS for MySQL com réplicas de leitura
Visão geral dos identificadores de transações globais (GTIDs)
GTIDs são identificadores exclusivos gerados para transações MySQL confirmadas. Você pode usar GTIDs para tornar a replicação de log binário mais simples e fácil de solucionar.
O MySQL usa dois tipos diferentes de transações para a replicação de log binário:
-
Transações GTID – Transações identificadas por um GTID.
-
Transações anônimas – transações que não têm um GTID atribuído.
Em uma configuração de replicação, GTIDs são exclusivos entre todas as instâncias de banco de dados. Os GTIDs simplificam a configuração da replicação porque ao usá-los você não precisa consultar posições de arquivo de log. Os GTIDs também facilitam o rastreamento de transações replicadas e a determinação da consistência da instância de origem e de réplicas.
É possível usar replicação baseada em GTID para replicar dados com réplicas de leitura do RDS for MySQL. É possível configurar a replicação baseada em GTID ao criar réplicas de leitura ou você pode converter réplicas de leitura existentes para usar a replicação baseada em GTID.
Você também pode utilizar a replicação baseada em GTID em uma configuração de replicação atrasada com o RDS for MySQL. Para obter mais informações, consulte Configurar replicação atrasada com o MySQL.
Parâmetros para replicação baseada em GTID
Use os parâmetros a seguir para configurar a replicação baseada em GTID.
Parâmetro | Valores válidos | Descrição |
---|---|---|
|
|
|
|
|
|
nota
No AWS Management Console, o parâmetro gtid_mode
aparece como gtid-mode
.
Para a replicação baseada em GTID, use estas configurações para o grupo de parâmetros da instância de banco de dados ou réplica de leitura:
-
ON
eON_PERMISSIVE
somente são aplicáveis à replicação de saída de uma instância de banco de dados do RDS. Esses dois valores fazem com que a sua instância de banco de dados do RDS usem GTIDs para transações que são replicadas. OON
requer que o banco de dados de destino também use a replicação baseada em GTID. OON_PERMISSIVE
torna a replicação baseada em GTID opcional no banco de dados de destino. -
OFF_PERMISSIVE
, se definido, significa que as instâncias de banco de dados do RDS podem aceitar a replicação de entrada de um banco de dados de origem. Eles podem fazer isso independentemente de o banco de dados de origem usar a replicação baseada em GTID. -
OFF
, se definido, significa que sua instância de banco de dados do RDS apenas aceita a replicação de entrada de bancos de dados de origem que não usam a replicação baseada em GTID.
Para obter mais informações sobre parameter groups, consulte Trabalhar com grupos de parâmetros.
Configuração da replicação baseada em GTID para novas réplicas de leitura
Quando a replicação baseada em GTID é habilitada para uma instância de banco de dados do RDS for MySQL, a replicação é configurada automaticamente para réplicas de leitura da instância de banco de dados.
Como habilitar a replicação baseada em GTID para novas réplicas de leitura
-
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_mode
–ON
ouON_PERMISSIVE
-
enforce_gtid_consistency
–ON
Para obter mais informações sobre a definição de parâmetros de configuração usando grupos de parâmetros, consulte Trabalhar com grupos de parâmetros.
-
-
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 sobre como fazer isso, consulte Reinicializar uma instância de banco de dados .
-
Crie uma ou mais réplicas de leitura da instância de banco de dados. Para obter mais informações sobre como fazer isso, consulte Como criar uma réplica de leitura.
O Amazon RDS tenta estabelecer a replicação baseada em GTID entre a instância de banco de dados do MySQL e as réplicas de leitura usando o MASTER_AUTO_POSITION
. Caso a tentativa falhe, o Amazon RDS usa posições de arquivo de log na replicação com as réplicas de leitura. Para obter mais informações sobre o MASTER_AUTO_POSITION
, consulte GTID Auto-Positioning
Configuração da replicação baseada em GTID para réplicas de leitura existentes
Para uma instância de banco de dados do RDS for MySQL existente com réplicas de leitura que não usam a replicação baseada em GTID, é possível configurar a replicação baseada em GTID entre a instância de banco de dados e as réplicas de leitura.
Como habilitar a replicação baseada em GTID para réplicas de leitura existentes
-
Se a instância de banco de dados ou qualquer réplica de leitura estiver utilizando uma versão 8.0 do RDS for MySQL inferior a 8.0.26, faça upgrade da instância de banco de dados ou da réplica de leitura para 8.0.26 ou uma versão posterior do MySQL 8.0. Todas as versões 5.7 do RDS para MySQL são compatíveis com replicação baseada em GTID.
Para ter mais informações, consulte Atualizar o mecanismo de banco de dados MySQL.
-
(Opcional) Redefina os parâmetros GTID e teste o comportamento da instância de banco de dados e as réplicas de leitura:
-
Verifique se o grupo de parâmetros associado a uma instância de banco de dados e cada réplica de leitura tem o parâmetro
enforce_gtid_consistency
definido comoWARN
.Para obter mais informações sobre a definição de parâmetros de configuração usando grupos de parâmetros, consulte Trabalhar com grupos de parâmetros.
-
Se você tiver alterado o grupo de parâmetros da instância de banco de dados, reinicie a instância de banco de dados. Se você tiver alterado o grupo de parâmetros para uma réplica de leitura, reinicie a réplica de leitura.
Para obter mais informações, consulte Reinicializar uma instância de banco de dados .
-
Execute a instância de banco de dados e as réplicas de leitura com a workload normal e monitore os arquivos de log.
Caso você veja avisos sobre transações incompatíveis com GTID, ajuste o aplicativo de maneira que ele só use recursos compatíveis com GTID. Verifique se a instância de banco de dados não estiver gerando avisos sobre transações incompatíveis com GTID antes de avançar à próxima etapa.
-
-
Redefina os parâmetros GTID para replicação baseada em GTID que permite transações anônimas até que as réplicas de leitura tenham processado todas elas.
-
Verifique se o grupo de parâmetros associado a uma instância de banco de dados e cada réplica de leitura tem as seguintes configurações de parâmetro:
-
gtid_mode
–ON_PERMISSIVE
-
enforce_gtid_consistency
–ON
-
-
Se você tiver alterado o grupo de parâmetros da instância de banco de dados, reinicie a instância de banco de dados. Se você tiver alterado o grupo de parâmetros para uma réplica de leitura, reinicie a réplica de leitura.
-
-
Aguarde a replicação de todas as transações anônimas. Para verificar se elas estão replicadas, faça o seguinte:
-
Execute a instrução a seguir na instância de banco de dados de origem.
SHOW MASTER STATUS;
Observe os valores nas colunas
File
ePosition
. -
Em cada réplica de leitura, use as informações de arquivo e posição de sua instância de origem na etapa anterior para executar a consulta a seguir.
SELECT MASTER_POS_WAIT('
file
',position
);Por exemplo, caso o nome do arquivo seja
mysql-bin-changelog.000031
e a posição seja107
, execute a declaração a seguir.SELECT MASTER_POS_WAIT('mysql-bin-changelog.000031', 107);
Se a réplica de leitura ultrapassar a posição especificada, a consulta retornará imediatamente. Do contrário, a função aguarda. Prossiga para a próxima etapa quando a consulta retornar para todas as réplicas de leitura.
-
-
Redefina os parâmetros GTID apenas para replicação baseada em GTID.
-
Verifique se o grupo de parâmetros associado a uma instância de banco de dados e cada réplica de leitura tem as seguintes configurações de parâmetro:
-
gtid_mode
–ON
-
enforce_gtid_consistency
–ON
-
-
Reinicialize a instância de banco de dados e cada réplica de leitura.
-
-
Em cada réplica de leitura, execute o procedimento a seguir.
CALL mysql.rds_set_master_auto_position(1);
Desabilitação da replicação baseada em GTID para uma instância de banco de dados do RDS for MySQL com réplicas de leitura
Você pode desabilitar a replicação baseada em GTID para uma instância de banco de dados MySQL com réplicas de leitura.
Para desabilitar a replicação baseada em GTID para uma instância de banco de dados do RDS for MySQL com réplicas de leitura
-
Em cada réplica de leitura, execute o seguinte procedimento:
CALL mysql.rds_set_master_auto_position(0);
-
Redefina o
gtid_mode
comoON_PERMISSIVE
.-
Verifique se o grupo de parâmetros associado a uma instância de banco de dados do MySQL e cada réplica de leitura tem possuem
gtid_mode
definido comoON_PERMISSIVE
.Para obter mais informações sobre a definição de parâmetros de configuração usando grupos de parâmetros, consulte Trabalhar com grupos de parâmetros.
-
Reinicialize a instância de banco de dados do MySQL e cada réplica de leitura. Para obter mais informações sobre como reiniciar, consulte Reinicializar uma instância de banco de dados .
-
-
Redefina o
gtid_mode
comoOFF_PERMISSIVE
.-
Verifique se o grupo de parâmetros associado a uma instância de banco de dados do MySQL e cada réplica de leitura tem possuem
gtid_mode
definido comoOFF_PERMISSIVE
. -
Reinicialize a instância de banco de dados do MySQL e cada réplica de leitura.
-
-
Aguarde todas as transações GTID serem aplicadas a todas as réplicas de leitura. Para conferir se elas foram aplicadas, siga estas etapas:
-
Na instância de banco de dados do RDS for MySQL , execute o comando
SHOW MASTER STATUS
.Sua saída deve ser semelhante ao resultado a seguir.
File Position ------------------------------------ mysql-bin-changelog.000031 107 ------------------------------------
Observe o arquivo e posicione na saída.
-
Em cada réplica de leitura, use as informações de arquivo e posição de sua instância de origem na etapa anterior para executar a seguinte consulta:
Para o MySQL versão 8.0.26 e versões posteriores do MySQL 8.0
SELECT SOURCE_POS_WAIT('
file
',position
);Para as versões do MySQL 5.7
SELECT MASTER_POS_WAIT('
file
',position
);Por exemplo, caso o nome do arquivo seja
mysql-bin-changelog.000031
e a posição seja107
, execute a seguinte declaração:Para o MySQL versão 8.0.26 e versões posteriores do MySQL 8.0
SELECT SOURCE_POS_WAIT('mysql-bin-changelog.000031', 107);
Para as versões do MySQL 5.7
SELECT MASTER_POS_WAIT('mysql-bin-changelog.000031', 107);
-
-
Redefina os parâmetros de GTID para desabilitar a replicação baseada em GTID.
-
Verifique se o grupo de parâmetros associado à instância de banco de dados MySQL e cada réplica de leitura possuem as seguintes configurações de parâmetro:
-
gtid_mode
–OFF
-
enforce_gtid_consistency
–OFF
-
-
Reinicialize a instância de banco de dados do MySQL e cada réplica de leitura.
-