MySQL: Como reparar todos os erros de todos os bancos de dados?

Conhece a Digital Ocean? Tenha VPS em cloud pagando a partir de US$ 5 por mês! Cadastre-se pelo meu link de afiliado aqui e ganhe US$ 10! Dá para testar o plano mais básico por 2 meses, ou o segundo por um... Existem várias distros Linux pré-configuradas, muitos tutoriais de instalação dos serviços web e um excelente suporte. O serviço é rápido e estável, tenho gostado muito! Vale a pena conferir e resgatar os seus 10 dólares de crédito ao ativar sua conta. Eles aceitam PayPal ;)

por Marcos Elias

Dica originalmente publicada em 28/08/2009, atualizada em 03/06/2016; os comandos de reparação e otimização não funcionam mais de uma vez nas versões atuais do MySQL, foi necessário dar o comando em duas partes.

Se você já teve seu servidor desligado por queda de energia, problemas quaisquer ou fez por qualquer motivo uma reiniciada forçada (pelo painel do gerenciamento da hospedagem, por exemplo, sem chamar o reboot no SSH), já deve ter percebido que o MySQL é muito frágil – fácil de apresentar erros em tabelas. Algumas vezes os CMS até funcionam, mas uma ou outra coisa parece estranha ou “trava”.

Depois da reiniciada dá-lhe uma ida no console, e rodar comandos do MySQL, achar o erro, reparar, otimizar… Nessas horas um único comando facilita, né? É só guardar:

mysqlcheck -A --auto-repair -u root -p

AVISO: use dois tracinhos antes do auto-repair. O WordPress pode substituir os 2 por um tracinho maior, então se você copiar e colar o comando acima, pode não funcionar. Troque o usuário root, se for o caso. O -p faz solicitar a senha.

Ele vai checar e reparar automaticamente TODAS as tabelas, sem que você precise ficar procurando qual teve problemas.

Extra: otimize as bases de dados MySQL, todas de uma vez!

Além do comando de reparar, é bom dar depois dele também um para otimizar as tabelas! O MySQL é um vilão de recursos em servidores, mantê-lo em dia bem regulado é sempre fundamental.

Use para isso o parâmetro –optimize, poderia fazer assim:

mysqlcheck -A -u root -p --optimize

O -A indica para fazer com todas as bases de dados.

Uma mão na roda e tanto para administradores. Não é tão difícil decorar (auto-repair, optimize), mas vale a pena guardar em local seguro, pode ser num txt dentro da pasta do root no servidor, como eu faço.

Uma coisa boa é fechar o Apache (ou o servidor que for) ao dar o comando, e quando terminar, iniciar o servidor web novamente. Assim a reparação é feita muito mais rapidamente, já que não terá requisições para atender nem ficar esperando.

Acabei de fazer isso agora no Explorando, depois de uns problemas estranhos com o servidor da hospedagem que deixou o site fora do ar sem que eu pudesse reiniciar a máquina virtual (dava erro).

publicidade
comments powered by Disqus

Comentários arquivados

  1. Johnny escreveu

    Muito bom, mas como extrair um resultado do comando, para ver se tinha tabela com erro?

  2. Roberto escreveu

    Olá, toda vez que eu dou o comando “service mysql restart” aparece o aviso: “Checking for corrupt, not cleanly closed and upgrade needing tables.”
    Segui a sua orientação e utilizei o seu comando: mysqlcheck -u root -p –auto-repair –check –optimize –all-databases
    Porém outro erro apareceu, desta vez: “mysqlcheck doesn’t support multiple contradicting commands.”
    Uso um servidor Ubuntu, o que devo fazer para consertar as tabelas?

  3. escreveu

    Opa Roberto, na época em que escrevi o texto isso funcionava para reparar e já otimizar. Mas nas versões mais recentes do MySQL parece que não dá para rodar os dois comandos juntos mesmo =/ Editei o texto separando, já que precisei disso de novo.