15.1.4 Problèmes avec les tables MyISAM
15.1 Le moteur de tables MyISAM
15 Types de tables MySQL
Manuel de Référence MySQL 4.1 : Version Française
. Tables MyISAM corrompues ->Des clients utilisent la table, ou bien elle n'a pas été fermée correctement
|
15.1.4.2 Des clients utilisent la table, ou bien elle n'a pas été fermée correctement
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 Utiliser plusieurs serveurs sur la même machine pour plus de détails.
|