Cada arquivo .MYI
do
MyISAM
tem um contador no cabeçalho que
pode ser usado para verificar se uma tabela foi fechada
apropriadamente.
Se você obteve o seguinte aviso de CHECK
TABLE
ou myisamchk
:
# clients is using or hasn't closed the table properly
isto significa que este contador eta fora de sincronia. Insto não significa que a tabela está corrompida, mas significa que você poderia pelo menos fazer uma verificação na tabeal para verificar se está ok.
O contador funciona da seguinte forma:
A primeira vez que a tabela é atualizada no MySQL, um contador no cabeçalho do arquivo de índice é incrementado.
O contador não é alterado durante outras alterações.
Quando a última intância da tabela é fechda (devido a
um FLUSH
ou porque não há espaço na
cache de tabelas) o contador é decremetado se a tabela
tiver sido atualizada em qualquer ponto.
Quando você raparar a tabela ou verificá-la e ela estiver ok, o contador é zerado.
Para evitar problemas com interações com outros processos que podem fazer uma verificação na tabela, o contador não é decrementado no fechamento se ele for 0.
Em outras palavras, o único modo dele ficar fora de sincronia é:
As tabelas MyISAM
são copiadas sem um
LOCK
e FLUSH TABLES
.
O MySQL ter falhado entre uma atualização e o fechamento final. (Note que a tabela pode ainda estar ok já que o MySQL sempre faz escritas de tudo entre cada instrução.)
Alguém ter feito um myisamchk
--recover
ou myisamchk
--update-state
em uma tabela que estava em uso
por mysqld
.
Muitos servidores mysqld
estrem usando
a tabela e um deles tiver feito um
REPAIR
ou CHECK
da
tabela enquanto ela estava em uso por outro servidor.
Nesta configuração o CHECK
é seguro
de se fazer (mesmo se você obter ovisos de outros
servidor), mas REPAIR
deve ser evitado
pois ele atualmente substitui o arquivo de dados por um
novo, o qual não é mostrado para os outros servidores.
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.