Vérifier et réparer les tables - MySQL
Lorsqu'une table est cassée, il existe une fonction "check table" et une fonction "repair table" qui peuvent nous sauver la vie. Pour s'en servir, il faut d'abord se connecter à la base, comme dans l'exemple suivant :
$ mysql mysql> use ma_base; mysql> show tables; mysql> check table ma_table_1; mysql> repair table ma_table_1; mysql> check table ma_table_2; mysql> repair table ma_table_2; mysql> quit;
Cette méthode fonctionne bien lorsqu'on a peu de tables à réparer, mais ça devient vite ingérable si on en a plusieurs. Dans ce cas, on va plutôt utiliser la commande myisamchk depuis le shell. En argument, on va lui passer le chemin vers les tables, en absolu ou en relatif, les caractères joker sont autorisés.
Quelques exemples :
- faire un check de la table ma_table de la base ma_base :
myisamchk /data/mysql/ma_base/ma_table.MYI
- faire un check de toutes les tables de la base ma_base :
myisamchk /data/mysql/ma_base/*.MYI
- réparer ma_table (ne répare pas les clés uniques qui ne le sont plus, le "-f" force) :
myisamchk -r [-f] /data/mysql/ma_base/ma_table.MYI
- réparation ancienne méthode. Moins rapide mais répare tout (normalement)
myisamchk -o /data/mysql/ma_base/ma_table.MYI
Il arrive que même la réparation ancienne méthode ne fonctionne pas. Dans ce cas, on a des options qui peuvent aller encore plus loin.
myisamchk -o -v -f --key_buffer_size=512M --sort_buffer_size=512M --read_buffer_size=4M --write_buffer_size=4M ma_table.MYI
Si même comme ça, ça ne fonctionne pas, je ne sais pas faire ; il faut s'adresser à un dba.