Recuperando Tabelas Corrompidas no MySQL com MyISAM: myisamchk e mysqlcheck

Se você trabalha com sistemas que utilizam MySQL com engine MyISAM, pode eventualmente se deparar com erros de corrupção de tabelas — especialmente após travamentos, quedas de energia ou falhas de disco. Neste artigo, você vai aprender a recuperar essas tabelas utilizando duas ferramentas nativas: myisamchk e mysqlcheck.


⚠️ Quando usar isso?

  • O serviço mysqld não inicia por corrupção de tabelas.

  • Você vê mensagens como:

      Incorrect key file for table 'cdr'; try to repair it
      Table './asterisk/cdr' is marked as crashed and should be repaired
    
  • Você usa o MyISAM (comuns em sistemas Asterisk, CDRs, sistemas legados).


📁 Localização dos arquivos MyISAM

Cada tabela MyISAM é composta por três arquivos:

  • .frm → estrutura da tabela

  • .MYD → dados

  • .MYI → índices

Normalmente armazenados em:

/var/lib/mysql/NOME_DO_BANCO/

🔧 Método 1: Recuperação com myisamchk

✅ Passo 1: Pare o MySQL

Isso é essencial! myisamchk deve ser usado com o serviço desligado.

systemctl stop mysqld
# ou
systemctl stop mysql

✅ Passo 2: Rodar o comando de reparo

myisamchk -r /var/lib/mysql/*/*.MYI

Você pode especificar apenas uma tabela se quiser:

Obs: Aqui no exemplo estou utilizando a tabela cdr do asterisk

myisamchk -r /var/lib/mysql/asterisk/cdr.MYI

✅ Passo 3: Verificar status

myisamchk /var/lib/mysql/asterisk/cdr.MYI

Se ainda houver erro, tente com a opção --safe-recover:

myisamchk --safe-recover /var/lib/mysql/asterisk/cdr.MYI

✅ Passo 4: Reinicie o MySQL

systemctl start mysqld

🧪 Método 2: Usando mysqlcheck (sem parar o serviço)

O mysqlcheck pode ser usado com o serviço MySQL rodando. É ideal para verificar e reparar sem downtime (com ressalvas).

✅ Reparar um banco específico:

mysqlcheck -u root -p --auto-repair --check --optimize asterisk

✅ Reparar todas as tabelas de todos os bancos:

mysqlcheck -u root -p --auto-repair --all-databases

⚙️ Opções úteis

OpçãoO que faz
--checkVerifica a integridade da tabela
--repairRepara tabelas corrompidas
--auto-repairFaz o reparo automaticamente
--optimizeOtimiza a tabela após o reparo
--all-databasesAplica a todos os bancos de dados

📌 Dicas finais

  • Sempre faça backup dos arquivos .MYD e .MYI antes de iniciar qualquer reparo.

  • O MyISAM não tem suporte a transações ou integridade relacional, o que o torna mais suscetível a corrupção em falhas abruptas.

  • Considere migrar tabelas críticas para InnoDB se possível.


🧠 Conclusão

A corrupção de tabelas MyISAM é um problema comum em ambientes legados. Saber usar myisamchk e mysqlcheck corretamente pode te salvar de muita dor de cabeça e garantir a continuidade dos serviços.

Curtiu esse conteúdo? Compartilha com seu time técnico e fique ligado aqui no blog para mais dicas de administração Linux, MySQL e VoIP!

Valeu Pessoal, até a proxima !

1
Subscribe to my newsletter

Read articles from Hudson Alves Amaral directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Hudson Alves Amaral
Hudson Alves Amaral