Réparer une table corrompue
Dans le cas des stockages en MyISAM, il renvoie le message :
ERROR 144 (HY000) at line 1: Table 'Base/Table' is marked as crashed and last (automatic?) repair failedet en InnoDB, il renvoie le message "InnoDB: Index 'node_id' contains XXX entries, should be XXX"
Il faut choisir le mode de restauration en fonction du moteur de base de données de la table. On utilise SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'DATABASE'; (en remplaçant DATABASE par le nom de base.
En InnoDB :
depuis MySQL, lancer la commande OPTIMIZE TABLE Table
et vérifier que tout va bien avec CHECK TABLE Table
Si le problème persiste :
- faire un dump de la table mysqldump -u root -p Base Table > dump.sql
- réimporter le dump (qui efface toute la table par défaut) : mysqldump -u root -p Base < dump.sql
En MyISAM :
Dans ce cas, il faut :
depuis MySQL, lancer la commande REPAIR TABLE Table
Ou alors, utiliser la commande mysqlcheck -u root -p Base Table
Ou alors
0. Arrêter le serveur MySQL /etc/init.d/mysql stop
1. Trouver le fichier dans /var/lib/mysql/Base/Table.MYI
2. Lancer la commande myisachk /var/lib/mysql/Base/Table.MYI pour voir si le fichier est bien corrompu. La commande renvoie :
Checking MyISAM file: Table.MYI Data records: 0 Deleted blocks: 0 myisamchk: warning: Table is marked as crashed and last repair failed myisamchk: warning: 1 client is using or hasn't closed the table properly - check file-size myisamchk: warning: Size of indexfile is: 8780967936 Should be: 1024 - check record delete-chain - check key delete-chain - check index reference - check data record references index: 1 - check data record references index: 2 MyISAM-table 'Table.MYI' is usable but should be fixed3. Lancer la réparation avec la commande myisachk -r /var/lib/mysql/Base/Table.MYI
4. Relancer le serveur MySQL : /etc/init.d/mysql start