C'est une bonne idée que d'effectuer des vérifications des
tables régulièrement, plutôt que d'attendre qu'un problème
survienne. Pour faire ces vérifications, vous pouvez utiliser
la commande myisamchk -s
. L'option
-s
(raccourci pour --silent
)
fait que myisamchk
s'exécute en mode
silencieux, et n'affiche que les messages d'erreurs. Voyez les
sections Section 13.5.2.3, « Syntaxe de CHECK TABLE
» et
Section 13.5.2.6, « Syntaxe de REPAIR TABLE
».
C'est aussi une bonne idée que de vérifier les tables lorsque
le serveur démarre. Par exemple, à chaque fois qu'une machine
redémarre au milieu d'une modification de table, vous devrez
faire une vérification de toutes les tables qui pourraient
être affectées : c'est une ``table supposément corrompue''.
Vous pouvez ajouter un test à safe_mysqld
pour qu'il exécute myisamchk
, afin de
vérifier toutes les tables qui ont été modifiées dans les 24
dernières heures, si il reste un vieux fichier
.pid
(identifiant de processus) après un
redémarrage : le fichier .pid
est créé
par le serveur mysqld
lorsqu'il démarre, et
il est supprimé lorsque le serveur s'arrête dans des
conditions normales. La présence d'un fichier
.pid
au démarrage indique que le serveur
s'est arrêté anormalement.
Un test encore meilleur serait de vérifier toutes les tables
dont la date de modification est plus récente que celle du
fichier .pid
.
Vous devriez aussi vérifiez vos tables régulièrement durant
les opérations normales. Chez MySQL AB, nous utilisons une
tâche en cron
pour vérifier toutes nos
tables importantes au moins une fois par semaine, avec une ligne
comme celle-ci dans le fichier crontab
:
35 0 * * 0 /path/to/myisamchk --fast --silent /path/to/datadir/*/*.MYI
Cela nous affiche les informations sur les tables qui ont été corrompues, de fa¸on à ce que nous puissions les examiner et les réparer.
Comme nous n'avons jamais eu de table qui se soit corrompue inopinément (des tables qui se corrompent pour d'autres raisons que des problèmes matériels) depuis quelques années (ce qui est véridique), une fois par semaine est un bon rythme pour nous.
Nous recommandons que vous commenciez par exécuter la commande
myisamchk -s
chaque nuit, sur toutes les
tables qui ont été modifiées dans les 24 dernières heures,
jusqu'à ce que vous preniez confiance en MySQL.
Normalement, vous n'avez pas à maintenir autant les tables
MySQL. Si vous changez les tables avec un format de ligne
dynamique (les tables avec des colonnes
VARCHAR
, BLOB
ou
TEXT
) ou que vous avez des tables avec de
nombreuses lignes effacées, vous pouvez envisager de faire des
défragmentations du fichier, pour récupérer cet espace. Une
fois par mois est un bon rythme.
Vous pouvez faire cela avec la commande SQL OPTIMIZE
TABLE
sur les tables en question, ou bien, si vous
avez éteint le serveur mysqld
, faites :
shell> myisamchk -r -s --sort-index -O sort_buffer_size=16M */*.MYI
Pour les tables ISAM
, la commande est
similaire à :
shell> isamchk -r -s --sort-index -O sort_buffer_size=16M */*.MYI
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.