Eu tenho algumas tabelas que são particionadas e têm vários índices em um escravo replicado. Após copiar o snap shot (seguro verificado) para um novo escravo e atualizar o mysqld de 5.1.42 para 5.5.15 e reiniciar a replicação, estou recebendo falhas do InnoDB com a mensagem de erro "Ponteiro inválido ..."
Esses erros ocorreram em 2 servidores com hardware e sistema operacional diferentes. Depois de correr:
ALTER TABLE .... COALESCE PARTION n;
o problema desaparece para essa mesa.
Porém, minha pergunta é de escopo maior e é "Como você identifica a corrupção da tabela do InnoDB?" ou reformulou "Como você avalia a integridade da tabela do InnoDB?" É "CHECK TABLE" a única ferramenta disponível para identificar problemas pré-crash?
Não tenho certeza se isso importa, mas as falhas ocorreram em execução: Versão: soquete '5.5.15-55-log': porta '/opt/mysql.sock': porta 3306 Percona Server (GPL), versão rel21.0, revisão 158
fonte
Respostas:
Morgan dá uma dica em seu comentário de que o InnoDB está constantemente procurando páginas corrompidas, fazendo somas de verificação nas páginas que lê. Se o InnoDB encontrar uma incompatibilidade de soma de verificação, ele
travaráo servidor.Se você deseja acelerar esse processo (em vez de esperar que o InnoDB leia a página corrompida), você pode usar
innochecksum
:Uma ressalva interessante:
Portanto, sim, para uma tabela on-line
CHECK TABLE
é provavelmente a ferramenta (ou como indicado em outra resposta,mysqlcheck
se você quiser fazer mais do que um único banco de dados de cada vez.)Se você pode desligar seu banco de dados, pode forçar as somas de verificação usando
innochecksum
Anedótico: Em um espaço de tabela innodb de 29 GB (com
innodb_file_per_table=1
), esse script levou cerca de 2 minutosComo um bônus, no entanto, como você está executando o Percona, eles implementaram um novo método para uma soma de verificação rápida do innodb . Eu nunca o usei, mas pode acelerar o processo.
fonte
AVISO: antes de tentar qualquer uma dessas instruções, é altamente recomendável verificar se há um backup saudável do seu banco de dados em mãos, apenas por precaução. (obrigado a @Nick pelo aviso)
Tente usar o
mysqlcheck
comando Em um terminal:Este comando produzirá uma lista de todas as tabelas e um status informando se houve algum tipo de corrupção:
Com isso em mãos, você já saberá quais mesas precisa reparar. Apenas no caso de você querer reparar tudo de uma vez:
Mais sobre
mysqlcheck
: http://dev.mysql.com/doc/refman/5.0/en/mysqlcheck.htmlNota: você marcou sua pergunta com percona . Eu não tinha idéia do que era aquilo, então pesquisei no Google. Parece ser um fork do MySQL, mas não tenho motivos para acreditar que os comandos sejam incompatíveis (dedos cruzados).
Alguém me indicou este guia que contém instruções mais específicas para a recuperação do banco de dados do InnoDB para situações mais críticas em que o banco de dados inteiro não inicia: http://www.softwareprojects.com/resources/programming/t-how-to-fix-mysql -database-myisam-innodb-1634.html
fonte
CHECK TABLE
. A documentação ligada aos estados: "mysqlcheck
usa as instruções SQLCHECK TABLE
,REPAIR TABLE
,ANALYZE TABLE
, eOPTIMIZE TABLE
de uma forma conveniente para o usuário ele determina quais declarações ao uso para a operação que deseja executar, e em seguida, envia as instruções para o servidor para ser executado.. " Isso não é sinônimo; essa é uma interface do usuário para uma coleção de instruções.De acordo com o Guia de Estudo de Certificação do MySQL 5.0, Página 443.444 Seção 30.4 :
Por favor, leia o MySQL Docs sobre InnoDB Forced Recovery
fonte
Gostaria de saber o que acontece se alguém usa os dados do InnoDB criados via InnoDB Plugin e depois muda para outra versão do InnoDB. Isso poderia criar uma possível corrupção de página aos olhos do mysqld.
Observe o que a documentação do MySQL no formato de arquivo InnoDB diz sobre essa possibilidade:
Eu descartaria os dados do escravo. Na verdade, eu usaria apenas força bruta obtendo um despejo lógico (mysqldump) dos dados:
Minha resposta original postada é considerada 'old school'. No entanto, nesse caso, eu definitivamente examinaria os formatos de arquivo usados por .ibd e / ou ibdata1.
fonte