Verificação e correção de tabelas corrompidas no MySQL

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (0)  (0)

Veja neste artigo as técnicas de detecção e correção de tabelas do MySQL, bem como os procedimentos para a utilização destas ferramentas.

O MySQL tem se mostrado muito estável no que diz respeito a tabelas corrompidas, mas existem algumas situações que podem levar o banco a danificar uma tabela. Os principais fatores que levariam a esta situação seriam a parada inesperada do SGBD (Sistema Gerenciador de Banco de Dados), neste caso se o MySQL estiver escrevendo alguma informação no disco, esta operação pode ser interrompida antes do término acarretando uma inconsistência. Outra possibilidade seria uma falha de hardware, por exemplo uma tabela pode ser armazenada em uma trilha danificada do disco.

Neste artigo apresento as técnicas de detecção e correção de tabelas do MySQL, bem como os procedimentos para a utilização destas ferramentas. Uma boa prática é a realização de uma vistoria periódica da base de dados a fim de detectar eventuais problemas em seus dados. Com isto, é possível detectar uma tabela corrompida e corrigi-la antes que a sua aplicação pare de funcionar por causa deste erro. O MySQL apresenta duas ferramentas para a verificação de tabelas que são o comando CHECK TABLE e o utilitário myisamchk. O primeiro funciona para todos os tipos de tabelas enquanto o segundo, como o próprio nome sugere, só se aplica à tabelas MyISAM.

O comando CHECK TABLE é a forma mais simples para realizar a verificação de dados, já que se aplica a qualquer tipo de tabela e, por ser um comando do MySQL o mesmo é executado de forma atômica, inibindo qualquer tentativa de alteração da tabela durante o processo de verificação. Este comando pode ser utilizado com as seguintes opções:

- QUICK:
Verifica somente a árvore de índices da tabela;

- FAST:
Verifica somente as tabelas que não foram fechadas corretamente, por exemplo, numa queda do SGBD;

- CHANGED:
Verifica somente as tabelas que não foram alteradas desde a última verificação;

- MEDIUM:
Opção padrão (default), verifica a árvore de índices e os apontamentos destes índices para os dados;

- EXTENDED:
Verifica toda a árvore de índices, as ligações dos índices com os dados e o dado propriamente dito.

Observe que à medida que caminhamos nas opções aumentamos a complexidade da verificação, aumentando a capacidade de detecção de problemas. Por outro lado, quanto maior o nível de verificação, maior será o tempo de execução da tarefa. De um modo geral, os problemas com tabelas estão associados aos seus índices, e neste caso, o modo padrão de verificação é suficiente na maioria dos casos. A seguir está ilustrada a execução de uma verificação de 3 tabelas:

06-06pic01.JPG

No exemplo vemos que a tabela Cidade está OK, isto é, não há nenhuma anomalia. A segunda tabela (Pais) retornou a mensagem "Table is already up to date" o que significa dizer que havia algum problema na tabela, mas o mesmo já foi corrigido pelo próprio comando de verificação. E por último, percebemos que a tabela Lingua está corrompida, portanto teremos que corrigi-la.

O mesmo procedimento pode ser executado através do utilitário myisamchk, caso a tabela seja do tipo MyISAM. O myisamchk apresenta vários parâmetros de execução e pode ser utilizado para verificação, correção e otimização de tabelas. O detalhe em relação a este utilitário é que ele não se comunica com o servidor fazendo um acesso direto aos arquivos da tabela a ser verificada. Por isto, pode ocorrer problemas de concorrência no dado, que deve ser eliminada através da utilização de um LOCK de leitura na tabela a ser verificada:

mysql>LOCK TABLES Cidade READ, Pais READ, Lingua READ;
....
mysql>UNLOCK TABLES;

A execução do myisamchk para o mesmo problema é ilustrada a seguir, sendo que a opção -C utilizada significa CHANGED. Para obter a lista completa de parâmetros utilize a opção --help.

shell> cd DATADIR
shell>myisamchk -C Cidade, Pais, Lingua

Uma vez detectado o problema na tabela, como é o caso da tabela Lingua do exemplo anterior, é necessário corrigir a estrutura desta tabela. Para a correção de tabelas utilizamos o comando REPAIR TABLE, que pode ser executado em dois modos:

- QUICK
Tenta corrigir apenas a árvore de índices, não manipula os dados da tabela;

- EXTENDED
Serão recriados todos os índices da tabela linha a linha, refazendo os apontamentos destes índices para os dados.

O myisamchk pode ser utilizado para a correção de tabelas ao utilizar-se as opções -r ou -o. A seguir vamos fazer a correção da tabela Lingua através do REPAIR TABLE e do myisamchk:

06-06pic02.JPG

shell>cd DATADIR
shell>myisamchk -r Lingua

No exemplo, vimos que a tabela Lingua foi corrigida com sucesso pelo comando REPAIR TABLE, como mostra o comando CHECK TABLE EXTENDED executado na tabela. Portanto, procure verificar as suas tabelas periodicamente, como exemplo, poderíamos criar um script e agendá-lo para fazer a verificação de todas as tabelas do sistema uma vez por semana. Isto poderia ser feito via cron, no caso do Linux ou qualquer agendador de tarefas do SO. Assim, você reduz as possibilidades de a sua aplicação parar por causa de problemas em tabelas.

Abraços e até breve!

Eber M. Duarte

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?