Chaque fichier MyISAM
.MYI
possède un compteur dans l'entête
qui peut être utilisé pour savoir si une table a été
fermée Proprement.
Si vous obtenez l'avertissement suivant de la part de
CHECK TABLE
ou
myisamchk
:
# clients is using or hasn't closed the table properly
cela signifie que le compteur n'est plus synchrone. Cela ne signifie Pas que la table est corrompue, mais que vous devez au moins effectuer une vérification sur la table pour vous assurer de son bon fonctionnement.
Le compteur fonctionne de la fa¸on suivante :
La première fois qu'une table est mise à jour dans MySQL, un compteur dans l'entête du fichier est incrémenté.
Le compteur ne change pas pour les mises à jours suivantes.
Lors de la fermeture de la dernière instance d'une table
(à cause d'un FLUSH
ou qu'il n'y a
plus de place dans le cache de la table) le compteur est
décrémenté si la table n'a pas été mise à jour.
Lorsque vous réparez la table ou vérifiez quel est en bon état, le compteur est remis à zéro.
Pour éviter les problèmes d'interactions avec d'autres processus qui peuvent vérifier la table, le compteur n'est pas décrémenté à la fermeture si sa valeur était zéro.
En d'autres termes, les seuls moyens d'obtenir ce genre d'erreur sont :
Les tables MyISAM
sont copiés sans
LOCK
et FLUSH
TABLES
.
MySQL a planté entre une mise à jour et la fermeture finale. (Notez que la table peut encore être bonne, vu que MySQL écrit toujours pour tout entre deux requêtes.)
quelqu'un a exécuté myisamchk
--recover
ou myisamchk
--update-state
sur une table qui était
utilisée par mysqld
.
Plusieurs serveurs mysqld
utilisent la
table et l'un d'eux a exécuté dessus un
REPAIR
ou un CHECK
pendant qu'elle était utilisée par un autre serveur.
Dans ce cas là, l'utilisation de CHECK
n'est pas très grave (même si vous obtiendrez des
avertissements sur les autres serveurs), mais
REPAIR
doit être évitée vu qu'elle
remplace actuellement le fichier de données part un
nouveau, ce qui n'est pas signalé aux autres serveurs.
En général, c'est une mauvaise idée que de partager un dossier de données avec plusieurs serveurs. Voyez la section Section 5.10, « Faire fonctionner plusieurs serveurs MySQL sur la même machine » pour plus de détails.
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.