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ção | O que faz |
--check | Verifica a integridade da tabela |
--repair | Repara tabelas corrompidas |
--auto-repair | Faz o reparo automaticamente |
--optimize | Otimiza a tabela após o reparo |
--all-databases | Aplica 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 !
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
