Sintaxe do myisamchk
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 MariaDB:
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 MariaDB versão 3.23 a forma mais simples de evitar este problema é utilizar CHECK TABLE
no lugar de myisamchk
para verificar as tabelas.