| 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
  : 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 :| 
# clients is using or hasn't closed the table properly
 | 
 
En d'autres termes, les seuls moyens d'obtenir ce genre d'erreur sont :
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.
 
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. |