Usar a replicação baseada em GTID - Amazon Relational Database Service

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 na documentação do MySQL.

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.

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

gtid_mode

OFF, OFF_PERMISSIVE, ON_PERMISSIVE, ON

OFF especifica que novas transações são anônimas (ou seja, não têm GTIDs) e que uma transação deve ser anônima para ser replicada.

OFF_PERMISSIVE especifica que novas transações são anônimas, mas todas podem ser replicadas.

ON_PERMISSIVE especifica que novas transações são GTID, mas todas podem ser replicadas.

ON especifica que novas transações são GTID e que uma transação deve ser GTID para ser replicada.

enforce_gtid_consistency

OFF, ON, WARN

OFF permite que as transações violem a consistência GTID.

ON evita que as transações violem a consistência GTID.

WARN permite que as transações violem a consistência GTID, mas gera um aviso quando ocorre uma violaçã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 e ON_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. O ON requer que o banco de dados de destino também use a replicação baseada em GTID. O ON_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
  1. 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 ou ON_PERMISSIVE

    • enforce_gtid_consistencyON

    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.

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

  3. 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 na documentação do MySQL.

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

  2. (Opcional) Redefina os parâmetros GTID e teste o comportamento da instância de banco de dados e as réplicas de leitura:

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

      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.

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

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

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

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

      • enforce_gtid_consistencyON

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

  4. Aguarde a replicação de todas as transações anônimas. Para verificar se elas estão replicadas, faça o seguinte:

    1. Execute a instrução a seguir na instância de banco de dados de origem.

      SHOW MASTER STATUS;

      Observe os valores nas colunas File e Position.

    2. 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 seja 107, 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.

  5. Redefina os parâmetros GTID apenas para replicação baseada em GTID.

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

      • enforce_gtid_consistencyON

    2. Reinicialize a instância de banco de dados e cada réplica de leitura.

  6. 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
  1. Em cada réplica de leitura, execute o seguinte procedimento:

    CALL mysql.rds_set_master_auto_position(0);
  2. Redefina o gtid_mode como ON_PERMISSIVE.

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

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

  3. Redefina o gtid_mode como OFF_PERMISSIVE.

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

    2. Reinicialize a instância de banco de dados do MySQL e cada réplica de leitura.

  4. Aguarde todas as transações GTID serem aplicadas a todas as réplicas de leitura. Para conferir se elas foram aplicadas, siga estas etapas:

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

    2. 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 seja 107, 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);
  5. Redefina os parâmetros de GTID para desabilitar a replicação baseada em GTID.

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

      • enforce_gtid_consistencyOFF

    2. Reinicialize a instância de banco de dados do MySQL e cada réplica de leitura.