Recentemente, inspirado por bases de dados corrompidas em um servidor capenga, venho utilizando algumas ferramentas para correção de bases de dados do servidor Mysql.
VERIFICANDO
O Mysql permite que bases de dados sejam checadas com o servidor rodando. Segue a listagem das ferramentas e o estado do servidor ao utilizá-las.
MYSQL CHECK TABLE -- Deve ser utilizado no prompt do servidor Mysql (Logicamente o servidor Mysql deve estar rodando)
mysqlcheck -- O servidor Mysql pode ou não estar rodando.
myisamchk -- O servidor deve estar parado.
Verificando tabelas com o CHECK TABLE
CHECK TABLE tablename[,tablename2...] [option][,option2...]
As opções disponíveis permitem o ajuste da verificação que pode ser mais profunda ou superficial.
Quick
A opção mais rápida, não verifica os "rows" em busca de links incorretos. Geralmente utilizada quando não há suspeita de erros.
Fast
Realiza a verificação das tabelas se as mesmas não forem devidamente fechadas. Geralmente utilizada quando a suspeita de erros na base é mínima. Geralmente em decorrencia de uma falha elétrica.
Changed
Similar ao Fast, mas verifica também tabelas que foram alteradas desde a última verificação.
Medium
A opção "default" se nenhuma opção for especificada. Verifica as linhas a procura de links deletados incorretos, verifica e calcula o checksum de todas as chaves e linhas.
Extented
A opção mais lenta, utilizada quando os outros métodos não apontam erros mas ainda há a suspeita de erros. Bastante lento uma vez que verifica todos os valores de todas as colunas e linhas. Aumentando-se o valor da variável key-buffer-size no arquivo de configuração do Mysql torna a verificação mais rápida.
Verificando tabelas com o mysqlcheck
mysqlcheck [options] dbname tablename [tablename2... ]
As opções para o utilitário permitem checar, analizar, reparar e optimizar as bases de dados.
--auto-repair
Utilizada em conjunto com a opção check, vai automaticamente reparar qualquer dado corrompido encontrado.
--check, -c
Verifica as tabelas.
--check-only-changed, -C
Verifica a base em conjunto com a opção changed acima.
--extended, -e
Verifica a base em conjunto com a opção extended acima.
--fast, -F
Verifica a base em conjunto com a opção fast a acima.
--medium-check, -m
Verifica a base em conjunto com a opção medium acima.
--quick, -q
Verifica a base em conjunto com a opção quick acima.
Verificando tabelas com o comando myisamchk
myisamchk [options] tablename.MYI
Trabalha com tabelas do tipo MyISAM (que possuem arquivos .MYD e .MYI para guardar informações sobre dados e índices)
As principais opções disponíveis para o utilitário são:
--check, -c
Opção default
--check-only-changed, -C
Verifica a base junto com a opção changed acima.
--extend-check, -e
Verifica a base em conjunto com a opção extended acima.
--fast, -F
Verifica a base em conjunto com a opção extended acima.
--force, -f
Executa o mode de reparo caso erros sejam encontrados.
--information, -i
Exibe informações sobre a tabela verificada.
--medium-check, -m
Verifica a base em conjunto com a opção medium acima.
--read-only, -T
Não marca a tabela como verificada.
--update-state, -U
Armazena quando a tabela foi checada e o momento de um eventual crash nos arquivos *.MYI
REPARANDO
Na maioria dos casos apenas os índices estarão corrompidos, (O arquivo de índice é um arquivo menor separado que aponta para o arquivo de dados). Dados realmente corrompidos são raros. Conforme na vimos na verificação são três os métodos de reparo.
MYSQL REPAIR TABLE - Deve ser utilizado com o servidor rodando.
mysqlcheck -- O servidor Mysql pode ou não estar rodando.
myisamchk -- O servidor deve estar parado.
Reparando tabelas com o REPAIR TABLE
REPAIR TABLE tablename[,tablename1...] [options].
As principais opções disponíveis são:
QUICK
O mais rápido, uma vez que o arquivo de dados não é modificado.
EXTENDED
Tenta recuperar todas as linhas possíveis no arquivo de dados, o que pode resultar em linhas com inconsistências. Use em último caso. USE_FRM Usado para reconstruir o arquivo de index caso o mesmo esteja corrompido ou se foi excluído.
USE_FRM
Deve ser utilizado quando os arquivos *.MYI (arquivos de índice) estiverem faltando ou corrompidos. Utilizado para reconstruir os arquivos de index.
Reparando tabelas com o mysqlcheck
mysqlcheck [options] [db_name [tbl_name ...]]
Podem ser utilizadas todas as opções descritas para o utilitário acima adicionando-se a elas a opção (--repair, -r).
Reparando tabelas com o myisamchk
myisamchk [options[ [tablenames]
O servidor deve estar parado, ou as tabelas inativas, o que é garantido quando ao opção --skip-external-locking não está em uso. O caminho para as arquivos .MYI deve ser especificado. As principais opções disponíveis são:
--backup, -B
Cria um backup (.BAK) da tabela antes de repará-la.
--correct-checksum
Realiza correções de checksum.
--data-file-length=valor, -D=valor
Especifica o valor máximo do arquivo de dados. Utilizado na recriação do arquivo.
--extend-check, -e
Tenta recuperar todas as linhas possíveis no arquivo de dados, o que pode resultar em linhas com inconsistências. Use em último caso.
--force, -f
Reescreve arquivos temporários antigos (.TMD) ao invés de abortar o reparo caso encontre um.
--recover, -r
A opção mais utilizada, repara a maioria dos problemas encontrados.
--safe-recover, -o
Verificação mais detalhada, porém mais lenta que a -r. Lê todas as linhas e reconstroi os índices baseado nelas.
--tmpdir=caminho
Altera o caminho de criação dos arquivos temporários
--quick
O método de reparo mais rápido, uma vez que o arquivo de dados não é modificado.
Exemplos:
mysql> CHECK tabela01 EXTENDED;
mysql> REPAIR tabela01 EXTENDED USE_FRM,
mysqlcheck --medium-check --auto-repair banco01 tabela01 -u usuário -p
mysqlcheck --repair --check banco01 tabela01
myisamchk --check --update-state *.MYI
myisamchk --repair --backup *.MYI
Como esses comandos simples consigo resolver a maioria dos problemas em bases de dados Mysql. Quaisquer dúvidas ou contribuições são bem vindas.
Um grande abraço a todos da comunidade.
onde executa isso?
ResponderExcluirno console do php?
estou usando windows perdi um base mysl importante
no console no funciona fica so uma seta quando executo e nada acontece