Diagnosticando e Solucionando Problemas de Replicação de Entrada

Diagnosticando e Solucionando Erros de Replicação de Entrada

Isole erros de replicação de entrada recuperando informações relacionadas à replicação de entrada.

Usando o MySQL Shell

Use o Shell MySQL ou um programa cliente MySQL para recuperar informações relacionadas à replicação de entrada.

Esta tarefa requer o seguinte:
  • Um sistema de banco de dados de réplica em execução.
  • MySQL Shell ou um programa cliente MySQL conectado ao sistema de banco de dados de réplica.
Execute um ou mais dos seguintes comandos no sistema de banco de dados de réplica para recuperar informações relacionadas à replicação de entrada:
  • SHOW REPLICA STATUS \G

    Mostra informações de status sobre parâmetros essenciais dos encadeamentos de réplica. Consulte SHOW REPLICA STATUS.

  • SELECT * FROM performance_schema.replication_connection_status \G

    Mostra o status atual do encadeamento de Entrada/Saída que trata a conexão da réplica com a origem. Consulte replication_connection_status.

  • SELECT * FROM performance_schema.replication_applier_status_by_worker \G

    Mostra detalhes das transações tratadas pelos encadeamentos do applier em uma réplica. Consulte replication_applier_status_by_worker.

Códigos de Erro do Receptor de Replicação de Entrada

Esta tabela mostra alguns dos códigos de erro comuns do receptor de replicação de entrada.

Tabela 22-4 Códigos de Erro do Receptor de Replicação de Entrada

Código do Erro Descrição
MY-1045: ER_ACCESS_DENIED_ERROR; Access denied for user '%s'@'%s'
  • O nome de usuário ou a senha de origem estão incorretos. Verifique suas credenciais.
  • O usuário não tem permissão para acessar a origem. Verifique a origem e certifique-se de que o usuário de replicação esteja configurado corretamente.
MY-1227 (42000): Access denied; you need (at least one of) the SUPER or SET_USER_ID privilege(s) for this operation Você tem duas opções:
  • Especifique o mesmo nome de usuário em DEFINER e Nome de usuário do Applier. Você só precisa do privilégio SET_USER_ID quando os nomes de usuário em DEFINER e Nome de usuário do Aplicador são diferentes. Consulte Criando um Canal de Replicação.
  • Entre em contato com o Suporte Técnico da Oracle para conceder o privilégio SET_USER_ID ao nome de usuário do Aplicador.
MY-1236: ER_MASTER_FATAL_ERROR_READING_BINLOG Got fatal error %d from master when reading data from binary log: '%s' Consulte Resolvendo o Erro Fatal 1236.
MY-2003: Network connection has been refused O nome do host e a porta estão incorretos ou a origem não está em execução. Verifique o nome do host e a porta que você definiu e confirme se a origem está em execução.
MY-3159: ER_SECURE_TRANSPORT_REQUIRED Connections using insecure transport are prohibited while --require_secure_transport=ON A origem requer uma conexão segura. Confirme que você selecionou uma das opções de SSL quando definiu seu canal.
Para obter a lista completa de mensagens de erro MySQL, consulte Referência de Mensagem de Erro do Servidor.

Códigos de Erro do Applier de Replicação de Entrada

Esta tabela mostra alguns dos códigos de erro comuns do aplicador de replicação de entrada.

Tabela 22-5 Códigos de Erro do Applier de Replicação de Entrada

Código do Erro Descrição
  • MY-1146: ER_NO_SUCH_TABLE;
  • MY-1032: HA_ERR_KEY_NOT_FOUND
  • MY-1062: HA_ERR_FOUND_DUPP_KEY
  • MY-1064: ERROR IN SQL syntax
  • MY-1050: ER_TABLE_EXISTS_ERROR
  • MY-1051: ER_BAD_TABLE_ERROR
  • MY-1146: ER_NO_SUCH_TABLE
  • MY-1007: ER_DB_CREATE_EXISTS
  • MY-1054: ER_BAD_FIELD_ERROR

Esses erros ocorrem se os dados na réplica não forem mais sincronizados com a origem. Isso pode ocorrer se os dados na réplica tiverem sido editados manualmente, por exemplo.

Para corrigir esses erros, você deve ressincronizar a origem e a réplica e retomar o canal de replicação.

MY-1205: ER_LOCK_WAIT_TIMEOUT Timeout excedido. Para corrigir esse erro, retome o canal de replicação. Consulte Retomando um Canal.
MY-1595/ MY-013121: RELAY LOG READ FAILURE O log de relay está corrompido e não pode ser lido. Para corrigir esse erro, redefina o canal de replicação. Consulte Redefinindo um Canal.
Para obter a lista completa de mensagens de erro MySQL, consulte Referência de Mensagem de Erro do Servidor.

Resolving Fatal Error 1236

Você obtém o erro quando o GTID definido do dump lógico não é aplicado no sistema de banco de dados ou os logs de binários foram expurgados da origem. Os logs binários forem um requisito obrigatório para replicação.

Usando o MySQL Shell

Use o Shell MySQL para resolver o Fatal Error 1236 que você obtém ao executar a replicação de entrada.

Essa tarefa supõe o seguinte:
  • Você obtém o Fatal Error 1236 ao executar a replicação de entrada:
    Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting
          using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs
          containing GTIDs that the slave requires.

No handshake de conexão inicial, a réplica (Sistema de BD) envia um GTID definido contendo as transações que ele já recebeu, confirmou ou ambas. A origem responde enviando todas as transações registradas em seu log de binários, cujo GTID não está incluído no GTID definido enviado pela réplica. Essa troca garante que a origem envie apenas as transações com um GTID que a réplica ainda não tenha gravado ou confirmado.

Faça o seguinte para resolver o problema:

Resolvendo Problemas de Réplica e Sincronização de Origem

Você obtém os problemas de sincronização quando a réplica está muito atrás da origem e a replicação é irrecuperável.

Observação

Antes de tentar recuperar desse erro, é recomendável investigar o motivo pelo qual o erro ocorreu e tomar a ação corretiva.

Usando o MySQL Shell

Use o Shell MySQL para resolver os problemas de replicação e sincronização de origem.

Essa tarefa supõe o seguinte:
  • A sua origem da réplica de entrada e a replicação não estão mais sincronizadas, a réplica ficou muito atrás da origem e a replicação é irrecuperável.
Observação

Se os valores de gtid de origem forem redefinidos para um valor menor que os da réplica, se um reset master incorreto tiver sido emitido na origem, por exemplo, a replicação de entrada não será recuperável. Nesse cenário, recrie o sistema de banco de dados e a configuração de replicação de entrada.
Faça o seguinte para sincronizar novamente a réplica com a origem:
  1. Interrompa o canal de replicação existente e pause todas as transações na origem.
  2. Exporte os dados de origem para o armazenamento de objetos. Consulte Exportação de uma Instância MySQL.
  3. Remova os objetos de banco de dados mais antigos e os bancos de dados pré-existentes na réplica.
  4. Importe o dump do serviço Object Storage para o Sistema de Banco de Dados. Consulte Importando com o Shell MySQL.
  5. Recupere o valor gtidExecuted da réplica.
  6. Recupere o valor gtidExecuted do arquivo @.json do dump de origem.
  7. Compare o gtidExecuted da réplica com o dump de origem gtidExecuted para obter o delta gtidExecuted.
    Por exemplo, se o gtidExecuted do dump de origem for serverUUID: 1-2000 e o gtidExecuted da réplica for serverUUID:1-1000, o valor delta será 1001-2000.
  8. Conecte-se à réplica da linha de comando e aplique o delta à réplica usando o procedimento armazenado CALL sys.SET_GTID_PURGED("+<ServerUUID>:<DeltaValue>).
    Por exemplo, usando o valor delta mostrado no exemplo anterior:
    call sys.SET_GTID_PURGED("+<ServerUUID>:1001-2000")
  9. Depois que o processo for concluído, retome o canal de replicação.