Reparar tabelas corrompidas no MySQL

Já precisou reparar tabelas corrompidas em seu banco de dados MySQL?

Por vezes, pode acontecer de uma tabela do MySQL estar corrompida. Isso acontece quando o storage engine da tabela é o MyISAM. O MyISAM não é mais o motor padrão do MySQL desde a versão 5.6. O padrão atual é o InnoDB (default na 5.6 e 5.7 e possivelmente nas próximas), onde não acontece esse tipo de dificuldade.

Documentação oficial: https://dev.mysql.com/doc/refman/8.0/en/corrupted-myisam-tables.html.

Por que as tabelas corrompem?

Ainda que o formato MyISAM seja bom, útil e confiável (todas as alterações feitas em uma tabela feita por uma instrução SQL são gravadas antes que a instrução retorne), as tabelas podem corromper se algum dos seguintes eventos ocorrer:

- O processo mysqld é interrompido (kill) no meio da escrita;
- O servidor de banco de dados é desligado;
- Falhas de hardware;
- Algum bug no MySQL ou no MyISAM;
- Uso de um programa externo modificando uma tabela enquanto também é modificada pelo server ao mesmo tempo.

Reparar tabelas corrompidas

As tabelas podem ser reparadas através do phpMyAdmin e você mesmo tem acesso a esta funcionalidade.

Vejamos o método complexo via phpMyAdmin, mas vale ressaltar que a opção de "Gerenciar bancos MySQL" do nosso painel de hospedagem já traz um ícone rápido para reparar tabelas. Detalhes em: https://suporte.lucanet.com.br/kb/painel-sites/como-gerenciar-bancos-de-dados-mysql

Primeiramente iremos acessar a opção phpMyAdmin, no painel de hospedagem web. Você será redirecionado para a página de login do seu banco de dados, onde você deve colocar o usuário e senha do mesmo. 

Caso não saiba a senha, poderá alterá-la, mas isso pode fazer com que certo sistema que o utilize deixe de funcionar. O ideal é verificar pela senha no código fonte.

É importante realizar o backup da base de dados antes de fazer qualquer alteração.

O "storage engine" poderá ser alterado para o InnoDB através do seguinte comando e assim evitar futuras dificuldades:

Obs.: Altere o termo nome-da-tabela de acordo com a situação.

ALTER TABLE nome-da-tabela ENGINE=InnoDB;