Si vous utilisez mysqld
avec l'option
--skip-external-locking
(qui est la
configuration par défaut pour certains systèmes, comme
Linux), vous ne pouvez pas utiliser
myisamchk
pour vérifier une table, lorsque
mysqld
utilise aussi la table. Si vous
pouvez être sûr que personne n'utilise cette table via
mysqld
lorsque vous utilisez
myisamchk
, vous n'aurez qu'à utiliser la
commande mysqladmin flush-tables
avant de
commencer à vérifier les tables. Si vous ne pouvez pas
garantir cette condition, vous devez alors éteindre le
serveur mysqld
pour vérifier les tables.
Si vous exécutez myisamchk
alors que
mysqld
modifie la table, vous pourriez
obtenir un diagnostic de corruption de la table, alors que ce
n'est pas le cas.
Si vous n'utilisez pas l'option
--skip-external-locking
, vous pouvez vous
servir de myisamchk
pour vérifier les
tables à tout moment. Pendant que vous le faites, les autres
clients qui tentent de modifier la table devront attendre que
myisamchk
ait fini.
Si vous utilisez myisamchk
pour réparer ou
optimiser les tables, vous devez toujours
vous assurer que mysqld
n'utilise pas cette
table (ce qui s'applique aussi si vous utilisez
--skip-external-locking
). Si vous n'éteignez
pas le serveur mysqld
, vous devez au moins
utiliser mysqladmin flush-tables
avant de
lancer myisamchk
. Vos tables
peuvent être corrompues si le serveur et
myisamchk
travaillent dans une même table
simultanément.
Ce chapitre décrit comment vérifier et gérer les corruptions de données dans les bases MySQL. Si vos tables sont fréquemment corrompues, vous devriez commencer par en rechercher la raison ! See Section A.4.2, « Que faire si MySQL plante constamment ? ».
La section sur les tables MyISAM
contient
différentes raisons pour lesquelles une table peut être
corrompue. See Section 14.1.4, « Problèmes avec les tables MyISAM
».
Lorsque vous effectuez une restauration de table, il est
important que chaque table tbl_name
dans
une base corresponde aux trois fichiers dans le dossier de
base, du dossier de données :
Fichier | Utilisation |
tbl_name.frm |
Définition de la table |
tbl_name.MYD |
Fichier de données |
tbl_name.MYI |
Fichier d'index |
Chacun de ces trois fichiers est sujet à des corruptions diverses, mais les problèmes surviennent généralement dans les fichiers de données ou d'index.
myisamchk
fonctionne en créant une copie
du fichier .MYD
(les données), ligne par
ligne. Il termine sa réparation en supprimant l'ancien
fichier .MYD
et en renommant le nouveau
à la place de l'ancien. Si vous utilisez l'option
--quick
, myisamchk
ne
crée pas de fichier temporaire .MYD
mais
suppose plutôt que le fichier .MYD
est
correct et il génère simplement un nouveau fichier d'index
sans toucher au fichier .MYD
. C'est une
méthode sécuritaire, car myisamchk
va
automatiquement détecter si le fichier
.MYD
est corrompu, et annulera alors la
réparation si c'est le cas. Vous pouvez aussi ajouter deux
options --quick
à
myisamchk
. Dans ce cas,
myisamchk
ne s'interrompt pas sur certaines
erreurs (comme des clés doublons), et essaie de résoudre ce
problème en modifiant le fichier .MYD
.
Normalement, l'utilisation de deux options
--quick
n'est utile que si vous n'avez pas
trop d'espace disque pour réaliser la réparation. Dans ce
cas, vous devez au moins faire une copie de sauvegarde avant
d'utiliser myisamchk
.
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.