Différences entre les versions de « Vérifier et réparer les tables - MySQL »

De UnixManiax
Aller à la navigation Aller à la recherche
(Page créée avec « Category:MySQL Il arrive, malheureusement, suite à un crash du serveur ou simplement par manque de bol, qu'une ou plusieurs tables cassent. Souvant, on est averti pa... »)
 
 
Ligne 1 : Ligne 1 :
[[Category:MySQL]]
[[Category:MySQL]]


Il arrive, malheureusement, suite à un crash du serveur ou simplement par manque de bol, qu'une ou plusieurs tables cassent. Souvant, on est averti par l'application qui utilise la base. Parfois l'appli indique clairement quelle table est cassée, mais parfois il faut les vérifier toutes soit-même.
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 :
 
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
Ligne 14 : Ligne 12 :
  mysql> quit;
  mysql> quit;


Pour ceux qui savent faire, on peut également faire des SELECT en langage SQL pour récupérer le nom de toutes les tables, et les réparer toutes en une seule commande. Je ne sais pas le faire, mais si quelqu'un veut m'envoyer la solution, je la mettrai volontier en ligne. [[File:smiley-clin-oeil.png|frameless]]
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.

Version actuelle datée du 23 juillet 2014 à 13:58


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.