Eu uso Amazon rds e tenho uma réplica de região cruzada. Enquanto eu estava fazendo algumas alterações de esquema, minha réplica de leitura me deu esse erro e a replicação parou.
Mensagem: Erro de replicação de réplica de leitura - SQLError: 1146, motivo: Tabela de erro phppoint_koreannoona.phppos_items não existe na consulta. Banco de dados padrão: DB_NAME;. Consulta: ALTER TABLE phppos_items DROP COLUMN aaatex_qb_item_name
O que causaria isso? A tabela está no mestre. Minha migração DID removeu esse campo, mas a tabela inteira estava faltando no escravo.
Eu tive que reconstruir escravo.
Vamos aos fatos, depois teremos que entrar na especulação:
Você executou uma
ALTER TABLE
consulta em uma tabela que não existia. Sua tabela existia no mestre no momento em que a alteração foi executada (caso contrário, ela não teria passado pelo log binário e tentado ser executada na réplica), mas não existia na réplica. Isso faz com que a replicação seja interrompida porque não pode continuar de maneira consistente.O que pode fazer uma tabela existir no mestre e não na réplica? Várias opções:
Outra coisa aconteceu que fez com que as réplicas ficassem fora de sincronia. A razão exata dependerá muito do ambiente, configuração e aplicação. Alguns exemplos incluem:
Uma falha da réplica em uma configuração não segura contra falhas
As coordenadas de replicação foram alteradas inadequadamente ou outra manutenção introduziu um erro na replicação
Instruções de gravação ou configuração não seguras são usadas, o que leva a inconsistências
A filtragem é usada, levando a inconsistências de dados
As consultas foram executadas no mestre com a replicação/binlog desabilitada
Como consertar isso?
A maneira mais segura de corrigir inconsistências em uma réplica é recriá-la do zero. Você pode copiar uma única tabela e sincronizá-la com relativa facilidade se ela tiver uma quantidade baixa de gravações, mas isso não impedirá que outros dados se desloquem em outras tabelas.
Como evitar que isso aconteça novamente?
A parte mais importante é fazer verificações nos locais para detectar problemas antecipadamente. Ferramentas como pt-table-checksum ou dumps e comparações simples podem permitir que você detecte diferenças mais cedo. É impossível, com as informações fornecidas, dizer exatamente o que causou isso, pois a configuração do mysql será segura ou não, dependendo da configuração específica. Alguns conselhos gerais: