Encontrei um novo problema ontem com um dos meus bancos de dados escravos MySQL 5.5 que são executados no EC2 na AWS. O banco de dados foi criado a partir de um snapshot de outro escravo. Os dados estão corretos, mas para pelo menos uma tabela um índice secundário está retornando resultados incompletos. Consultar uma tabela filho pelo id pai estava retornando 498 linhas quando deveria ter retornado 504. Consultar as 6 linhas ausentes pela chave primária funcionou e o id pai correto foi retornado, então o problema é com o índice secundário.
Este problema é altamente preocupante para mim, pois, presumivelmente, mesmo que todos os dados no escravo correspondam ao mestre, ainda obterei resultados incorretos de algumas consultas executadas no escravo.
Minha solução de força bruta foi reconstruir a tabela inteira assim:
alter table my_table engine = innodb;
Isso resolveu o problema dessa tabela específica, mas fico com as seguintes perguntas:
1) How can I determine if other tables have similar index corruption?
2) What's the most efficient way to fix the corrupt indexes?
Encontrei alguns bons recursos online para encontrar e corrigir a corrupção de dados do InnoDB, mas não encontrei nada relevante para a corrupção do índice do InnoDB.
Eu olhei no log de erros do MySQL e não encontrei uma arma fumegante. Eu encontrei alguns erros preocupantes do InnoDB. Estou assumindo que este é um problema separado, mas pode estar relacionado:
130109 9:46:41 InnoDB: unable to find a record to delete-mark
InnoDB: tuple DATA TUPLE: 2 fields;
0: len 4; hex 04af1f21; asc !;;
1: len 4; hex 0a1c03bd; asc ;;
InnoDB: record PHYSICAL RECORD: n_fields 2; compact format; info bits 0
0: len 4; hex 04af1f21; asc !;;
1: len 4; hex 0a052a77; asc *w;;