Beruflich Dokumente
Kultur Dokumente
Pode ser usado de uma maneira muito similar ao mysqldump quando o assunto for quais bancos de dados e tabelas devem ser escolhidas. O mysqlcheck tem um recurso especial comparado comparado aos outros clientes; o comportamento padro, verificando as tabelas (-c), pode ser alterado renomeando o binrio. Se voc deseja ter uma ferramenta que repare as tabelas como o procedimento padro, voc deve copiar o mysqlcheck para o disco com um outro nome, mysqlrepair, ou crie um link simblico com o nome mysqlrepair. Se voc chamar mysqlrepair agora, ele ir reparar as tabelas como seu procedimento padro. Os nomes que podem ser utilizados para alterar o comportamento padro do mysqlcheck so:
mysqlrepair: A opo padro ser -r mysqlanalyze: A opo padro ser -a mysqloptimize: A opo padro ser -o
As opes disponveis para o mysqlcheck esto listadas aqui, por favor verifique o que a sua verso suporta com o mysqlcheck --help.
-A, --all-databases
Verifica todos os bancos de dados. Isto o mesmo que --databases com todos os bancos de dados selecionados.
-1, --all-in-1
Em vez de fazer uma consulta para cada tabela, execute todas as consultas separadamente para cada banco de dados. Nomes de tabelas estaro em uma lista separada por vrgula. Anlise as tabelas fornecidas.
-#, --debug=...
Se uma tabela checada est corrompida, ela corrigida automaticamente. O reparo ser feito depois que todas as tabelas tiverem sido checadas e forem detectadas tabelas corrompidas. Log de sada de depurao. Normalmente 'd:t:o,filename'
-C, --check-only-changed
Verifica somente tabelas que foram alteradas desde a ltima conferncia ou que no foram fechada corretamente. Utilize compresso no protocolo server/cliente.
-B, --databases
Exibe esta mensagem de ajuda e sai. Para verificar diversos bancos de dados. Perceba a diferena no uso; Neste caso nenhuma tabela ser fornecida. Todos os argumentos so tratados como nomes de bancos de dados.
Configura o conjunto de caracteres padro. Verifica somente as tabelas que no foram fechadas corretamente
Continue mesmo se ns obtermos um erro de sql. Se voc estiver utilizando esta opo com CHECK TABLE, ir garantir que a tabela est 100 por cento consistente, mas leva bastante tempo. Se voc utilizar esta opo com REPAIR TABLE, ele ir executar um comando de reparos na tabela, que no s ir demorar muito tempo para executar, mas tambm pode produzir muitas linhas de lixo.
Conecta mquina. Mais rpido que verificao extendida, mas encontra somente 99.99 de todos os erros. Deve resolver a maioria dos casos.
Otimizador de tabelas Senha para usar ao conectar ao servidor. Se a senha no for fornecida ser solicitada no terminal.
Nmero de porta para usar para conexo. Se esta opo for utilizada com CHECK TABLE, evita a busca de registros verificando links errados. Esta a conferncia mais rpida. Se voc estiver utilizando esta opo com REPAIR TABLE, ela tentar reparar somente a rvore de ndices. Este o mtodo de reparo mais rpido para uma tabela.
-r, --repair
-s, --silent
Pode corrigir quase tudo exceto chaves nicas que no so nicas. Exibe somente mensagens de erro.
Usurio para o login, se no for o usurio atual. Exibe informao sobre os vrios estgios. Exibe informao sobre a verso e sai.
Arquivo
`nome_tabela.frm' `nome_tabela.MYD' `nome_tabela.MYI'
Propsito Arquivo com definies da tabela (form) Arquivo de dados Arquivo de ndices
Cada um destes trs tipos de arquivos est sujeito a corrupo de vrias formas, mas problemas ocorrem mais frequentemente em arquivos de dados e ndices. O myisamchk trabalha criando uma cpia do arquivo de dados `.MYD' linha a linha. Ele termina o estgio de reparos removendo o antigo arquivo `.MYD' e renomeando o novo arquivo com nome original. Se for utilizada a opo --quick, myisamchk no cria um arquivo `.MYD' temporrio, mas assume que o arquivo `.MYD' est correto e somente gera um novo arquivo ndice sem mexer no arquivo de dados. Isto seguro, pois o myisamchk detecta automaticamente se o arquivo `.MYD' est corrompido e aborda o reparo neste caso. Voc pode tambm fornecer duas opes --quick para o myisamchk. Neste caso, o myisamchk no aborta em alguns erros (como chaves duplicadas) mas tenta resolv-los modificando o arquivo `.MYD'. Normalmente o uso de duas opes --quick til somente se voc tiver muito pouco espao em disco para realizer um reparo normal. Neste caso voc deve pelo menos fazer um backup antes de executar o myisamchk.
Encontra 99.99% de todos os erros. O que ele no pode encontrar corrompimento que envolva SOMENTE o arquivo de dados (que no comum). Se voc desejar conferir uma tabela, voc deve executar normalmente o myisamchk sem opes ou com as opes -s ou --silent.
myisamchk -m nome_tabela
myisamchk -e nome_tabela
Encontra 99.999% de todos os erros. Ele verifica primeiramente erros em todas as entradas do ndice e ento le todos os registros. Ele calcula um checksum para todas as chaves nos registros e verifica se o checksum o mesmo que o checksum das chaves na rvore de ndices. Realiza a verificao completa de todos os dados (-e significa ``conferncia extendida''). Ele faz uma conferncia lendo todas as chaves de cada registro para verificar se eles realmente apontam para o registro correto. Isto pode demorar MUITO tempo em uma tabela grande com vrias chaves. myisamchk normalmente ir parar depois do primeiro erro que encontrar. Se voc deseja obter mais informaes, pode adicionar a opo --verbose (-v). Isto faz o myisamchk continuar a percorrer a tabela at um mximo de 20 erros. Em utilizao normal, um simples myisamchk (sem argumentos alm do nome da tabela) suficiente.
myisamchk -e -i nome_tabela
Como o comando anterior, mas a opo -i diz ao myisamchk para exibir algumas informaes estatsticas tambm.
Unexpected end of file Record file is crashed Got error ### from table handler Para obter mais informaes sobre o erro voc pode executar perror ###. Aqui esto os erros mais comuns que indicam um problema com a tabela:
shell> perror 126 127 132 134 135 136 141 144 145 126 = Index file is crashed / Wrong file format 127 = Record-file is crashed 132 = Old database file 134 = Record was already deleted (or record file crashed) 135 = No more room in record file 136 = No more room in index file 141 = Duplicate unique key or constraint on write or update 144 = Table is crashed and last repair failed 145 = Table was marked as crashed and should be repaired
Note que o erro 135 (no mais no arquivo de registro), no um erro que pode ser corrigido por um simples reparo. Neste caso voc deve fazer:
ALTER TABLE tabela MAX_ROWS=xxx AVG_ROW_LENGTH=yyy;
Voc tambm pode usar esta tcnica para o erro 136 (no mais no arquivo de ndice). Em outros casos, voc deve reparar suas tabelas. myisamchk pode normalmente detectar a maioria das coisas que estiverem erradas. O processo de reparo involve at quatro estgios, descritos abaixo. Antes de comear, voc deve mudar para o diretrio do banco de dados e conferir as permisses dos arquivos de tabelas. Tenha certeza que eles possam ser lidos pelo usurio do Unix com o qual mysqld executado (e para voc, porque voc precisa acessar os arquivos que est conferindo). Se no
estiverem, voc precisa alterar os arquivos, eles tambm devem ter a permisso de escrita para voc. Se voc estiver utilizando o MySQL verso 3.23.16 e superior, voc pode (e deve) usar os comandos CHECK e REPAIR para conferir e corrigir tabelas MyISAM. See section 4.5.4 Sintaxe de CHECK TABLE. See section 4.5.5 Sintaxe do REPAIR TABLE. A seo do manual sobre manuteno de tabelas inclui as opes para isamchk/myisamchk. See section 4.5.6 Utilizando myisamchk para Manuteno de Tabelas e Recuperao em Caso de Falhas. A seguinte seo so para os casos onde o comando acima falhar ou se voc desejar usar os recursos extendidos que o isamchk e myisamchk fornecem. Se voc for reparar uma tabela da linha de comandos, deve primeiro desligar o servidor mysqld. Perceba que quando voc executa mysqladmin shutdown em um servidor remoto, o servidor mysqld ir continuar funcionando por um tempo depois do mysqladmin retornar, at que todas as queries parem e todas as chaves sejam descarregadas no disco. Estgio 1: Verificando suas tabelas Execute myisamchk *.MYI ou myisamchk -e *.MYI se voc tiver tempo disponvel. Utilize a opo -s (silencioso) para suprimir informaes desnecessrias. Se o servidor mysqld parar, deve ser utilizada a opo --update para dizer ao myisamchk marcar a tabela como 'checada'. Voc deve reparar somente as tabelas em que o myisamchk indicar um erro. Para tais tabelas, v para o estgio 2. Se voc obter erros estranhos na verficao (como nos erros out of memory), ou se o myisamchk quebrar, v para o estgio 3. Estgio 2: Reparo simples e seguro NOTA: Se voc deseja que os reparos sejam mais rpidos, devem ser usadas as opes: -O sorf_buffer=# -O key_buffer=# (onde # seria 1/4 da memria disponvel) para todos comandos isamchk/myisamchk. Primeiro, tente usar myisamchk -r -q nome_tabela (-r -q significa ``modo de recuperao rpida''). Ele tentar reparar o arquivo de ndice sem mexer no arquivo de dados. Se o arquivo de dados estiver normal e os links apagados apontam nas localizaes corretas dentro do arquivo de dados, isto deve funcionar e a tabela ser corrigida. Inicie o reparo da prxima tabela. Outra maneira seria utilizar os seguintes procedimentos: 1. Faa um backup do arquivo de dados antes de continuar.
2. Utilize myisamchk -r nome_tabela (-r significa modo de ``recuperao''). Isto remover registros incorretos e deletados do arquivo de dados e reconstroi o arquivo de ndices. 3. Se o passo anterior falhar, utilize myisamchk --safe-recover nome_tabela. O modo de recuperao segura utiliza um metdo de recuperao antiga que trata de alguns casos que o modo de recuperao comum no consegue (porm mais lento). Se voc obter erros estranhos no reparo (como em erros out of memory), ou se o myisamchk falhar, v para o estgio 3. Estgio 3: Reparo difcil Voc s deve atingir este estgio se o primeiro bloco de 16K do arquivo de ndice estiver destrudo ou conter informaes incorretas, ou se o arquivo de ndice no existir. Neste caso, necessrio criar um novo arquivo de ndice. Faa como a seguir: 1. Mova o arquivo de dados para algum lugar seguro. 2. Use o arquivo de descrio de tabelas para criar novos arquivos (vazios) de dados e ndices:
3. 4. 5. 6. shell> mysql> mysql> mysql> mysql nome_bd SET AUTOCOMMIT=1; TRUNCATE TABLE nome_tabela; quit
Se sua verso do MySQL no possuir TRUNCATE TABLE, utilize DELETE FROM nome_tabela. 7. Copie o antigo arquivo de dados de volta para o novo arquivo de dados criado. (No s mova o antigo arquivo de volta para o novo arquivo; voc deve uma cpia no caso de algo der errado.) Volte ao estgio 2. myisamchk -r -q deve funcionar agora. (Isto no deve ser um loop eterno.) No MySQL 4.0.2 voc tambm pode utilizar REPAIR ... USE_FRM o qual realiza todo o procedimento automaticamente. Estgio 4: Reparo muito difcil Voc deve atingir este estgio somente se o arquivo de descrio tambm falhar. Isto nunca deve acontecer, porque o arquivo de descrio no alterado depois da tabela ser criada: 1. Restaure o arquivo de descrio de um backup e volte ao estgio 3. Voc pode tambm restaurar o arquivo de ndice e voltar ao estgio 2. No ltimo caso, voc deve iniciar com myisamchk -r. 2. Se voc no tem um backup mas sabe exatamente como a tabela foi criada, crie uma cpia da tabela em outro banco de dados. Remova o novo arquivo de dados, e ento
mova a descrio e arquivos de ndice do outro banco de dados para o banco de dados com problemas. Isto lhe fornece um novo arquivos ndice e descrio, mas mantm o arquivo de dados da mesma forma. Volte ao estgio 2 e tente reconstruir o arquivo de ndices.
Voc pode otimizar uma tabela da mesma forma utilizando a instruo SQL OPTIMIZE TABLE. OPTIMIZE TABLE faz o reparo de tabelas, analisa chaves e tambm ordena a rvore de ndices para fazer pesquisas por chave mais rpidas. Tambm no existem possibilidade de interao no desejvel entre o utilitrio e o servidor, porque o servidor faz todo o trabalho quando voc utiliza OPTIMIZE TABLE. See section 4.6.1 Sintaxe de OPTIMIZE TABLE.
myisamchk tambm tem um nmero de outras opo que podem ser
Para uma descrio completa da opo. See section 4.5.6.1 Sintaxe do myisamchk.
Um teste ainda melhor seria verificar qualquer tabela cuja a data da ltima modificao mais recente que a do arquivo `.pid'. Voc tambm deve verificar suas tabelas regularmente durante a operao normal do sistema. Na MySQL AB, ns executamos uma tarefa agendada cron para conferir todas nossas tabelas importantes uma vez por semana utilizando uma linha com esta no arquivo `crontab':
35 0 * * 0 /diretrio/do/myisamchk --fast --silent /diretrio/de/dados/*/*.MYI
Isto exibe informaes sobre tabelas com falhas para que possamos examin-las e repar-las quando necessrio. Como ns no estamos tendo tabelas com falhas inesperadas (tabelas corrompidas por razes diferentes de problemas de hardware) por vrios anos (isto realmente verdade), uma vez por semana mais que suficiente para ns. Ns recomendamos que para iniciar, voc execute myisamchk -s a cada noite em todas as tabelas que foram atualizadas durantes as ltimas 24 horas, at que voc confie no MySQL como ns confiamos. Normalmente voc no precisar de tanta manuteno em suas tabelas MySQL. Se voc estiver alterando tabelas com registros de tamanho dinmico (tabelas com colunas VARCHAR, BLOB ou TEXT) ou tem tabelas com vrios registros apagados voc pode desejar de tempos em tempos (uma vez ao ms?) desfragmentar/recuperar espao das tabelas. Voc pode fazer isto utilizando OPTIMIZE TABLE nas tabelas em questo ou se voc puder desligar o servidor mysqld por um tempo faa:
isamchk -r --silent --sort-index -O sort_buffer_size=16M */*.ISM myisamchk -r --silent --sort-index -O sort_buffer_size=16M */*.MYI