myisamchk
é chamado desta forma:
shell> myisamchk [opções] nome_tabela
As opções
especificam o que você deseja
que o myisamchk
faça. Elas são descritas
abaixo. (Você também pode obter a lista das opções com
myisamchk --help
.) Sem opções, o
myisamchk
simplesmente checa sua tabela.
Para obter maiores informações ou dizer ao
myisamchk
para tomar ações corretivas,
especifique as opções descritas abaixo e nas seções
seguintes.
nome_tabela
é o nome da tabela do banco de
dados que você deseja verificar/reparar. Se você executar o
myisamchk
em algum lugar diferente do
diretório do banco de dados, você deve especificar o caminho
para o arquivo, porque myisamchk
não faz
idéia de onde seu banco de dados se encontra. Na verdade,
myisamchk
não se importa se os arquivos
estão localizados em um diretório de banco de dado; você
pode copiar os arquivos que correspondem a uma tabela de banco
de dados em outra localização e realizar neste outro lugar
as operações corretivas.
Você pode nomear várias tabelas na linha de comando do
myisamchk
se você desejar. Você também
pode especificar um nome como um arquivo de índice (com o
sufixo .MYI
), que lhe permite especificar
todas tabelas em um diretório utilizando o padrão
*.MYI
. Por exemplo, se você está em um
diretório de banco de dados, você pode checar todas as
tabelas no diretório desta forma:
shell> myisamchk *.MYI
Se você não estiver no diretório do banco de dados, você pode verificar todas as tabelas existentes especificando o caminho para o diretório:
shell> myisamchk /caminho/para/banco_de_dados/*.MYI
Você pode verificar todas as tabelas em todos os bancos de dados especificando um meta caracter com o caminho para o diretório de banco de dados do MySQL:
shell> myisamchk /caminho/para/diretório_dados/*/*.MYI
A maneira recomendada para conferir todas as tabelas rapidamente é:
myisamchk --silent --fast /caminho/para/diretório_dados/*/*.MYI isamchk --silent /caminho/para/diretório_dados/*/*.ISM
Se você quiser conferir todas as tabelas e reparar todas que estiverem corrompidas, pode utilizar linha a seguir:
myisamchk --silent --force --fast --update-state -O key_buffer=64M \ -O sort_buffer=64M -O read_buffer=1M -O write_buffer=1M \ /caminho/para/diretório_dados/*/*.MYI isamchk --silent --force -O key_buffer=64M -O sort_buffer=64M \ -O read_buffer=1M -O write_buffer=1M /caminho/para/diretório_dados/*/*.ISM
A linha acima assume que você tem mais de 64 MB de memória livre.
Perceba que se você obter um erro do tipo:
myisamchk: warning: 1 clients is using or hasn't closed the table properly
Isto significa que você está tentando verificar uma tabela
que está sendo atualizada por outro programa (como o servidor
mysqld
) que ainda não fechou o arquivo ou
que finalizou sem fechar o arquivo corretamente.
Se o mysqld
está em execução, você deve
forçar o sincronimo e fechamento de todas tabelas com
FLUSH TABLES
e assegurar que ninguém mais
esteja utilizando as tabelas quando for executar o
myisamchk
. No MySQL versão 3.23 a forma
mais simples de evitar este problema é utilizar
CHECK TABLE
no lugar de
myisamchk
para verificar as tabelas.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.