Tables MyISAM corrompues
<<<
Des clients utilisent la table, ou bien elle n'a pas été fermée correctement Le moteur de tables MyISAM
>>>

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.

<< Des clients utilisent la table, ou bien elle n'a pas été fermée correctement >>
Tables MyISAM corrompues Problèmes avec les tables MyISAM Le moteur de tables MyISAM