Criar Web, manuais e recursos para desenvolvimento web
Manuais
Programas
FAQS
Diretório
Comunidade
  Inicio > Manuais > Manual de MySQL
SEÇÕES
Manuais relacionados
+Manual de MySQL
Categorias
+Bases de dados
+MySQL

Índice do Manual Manual de MySQL
+ Instalação de MySQL em Windows
+ Tipos de dados de MySQL
+ Mysql Control Center
+ phpMyAdmin
+ Instalar o driver ODBC para conectar com uma base de dados MySQL
+ Exportar dados de MySQL a Microsoft Access
+ Exportar dados de Access a MySQL
+ Administrar e actualizar uma base de dados MySQL desde Access
+ Connector/J
+ Cópias de segurança em MySQL
+ Backup MySQL mediante sentenças SQL
+ Backup MySQL com mysqldump
+ Subir uma base de dados ao servidor de Internet
+ Subir uma base de dados MySQL vazia ao servidor
+ Subir uma base de dados MySQL com a estrutura e os dados
+ Migrar uma base de dados a MySQL
+ Como alterar tabelas MySQL
+ Verificação e correção de tabelas corrompidas no MySQL
+ Ferramentas Gráficas para Modelagem de Dados e Administração do MySQL
+ Criação de Database Links
+ Gerenciamento de Usuários e Controle de Acessos do MySQL
+ Trabalhando com os Vários Tipos de Tabelas do MySQL

Descrição dos capítulos

Parceiros
- CSS para Web Design
- S.O.S Designers
- Slackware-Brasil
- Crie seu Web site
- Oficina da Net


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

As técnicas de detecção e correção de tabelas do MySQL, e 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:

As pessoas entrevistadas


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:

As pessoas entrevistadas


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!

Autoria e outras referências sobre este artigo

Manuais relacionados com este artigo
Dentro de Manual de MySQL

Categorias relacionadas
Através das categorias do nosso diretório podem ser encontrados outros tipos de recursos relacionados com este artigo:
+ Entrar em Bases de dados
+ Entrar em MySQL


Comentários dos visitantes
Os comentários dos visitantes são para ampliar a informação do artigo. Todos podem participar.
Acrescentar um comentário do artigo Acrescentar um comentário do artigo



Sobre nós | Copyright | Anuncie | Entrar em contato <criarweb>

Hospedado por Hostnet Hospedagem de Sites