La table MySQL est marquée comme plantée et la dernière réparation (automatique?) A échoué


126

J'étais en train de réparer cette table soudainement, le serveur s'est pendu et quand je suis revenu, toutes les tables sont ok mais celle-ci montrant `` en cours d'utilisation '' et quand j'essaye de la réparer, elle ne continue pas.

ERREUR 144 - La table './extas_d47727/xzclf_ads' est marquée comme plantée et la dernière réparation (automatique?) A échoué

Que puis-je faire pour le réparer?


1
J'ai vu cela se produire principalement lorsque le système de fichiers sous-jacent sort des inodes libres. Vérifiez auprès de df -hi. Habituellement, quelque chose le remplit de nombreux petits fichiers, comme par exemple des fichiers de session php qui ne sont pas nettoyés.
Zrin

Réponses:


260

Si votre processus MySQL est en cours d'exécution, arrêtez-le. Sur Debian:

sudo service mysql stop

Accédez à votre dossier de données. Sur Debian:

cd /var/lib/mysql/$DATABASE_NAME

Essayez de courir:

myisamchk -r $TABLE_NAME

Si cela ne fonctionne pas, vous pouvez essayer:

myisamchk -r -v -f $TABLE_NAME

Vous pouvez redémarrer votre serveur MySQL. Sur Debian:

sudo service mysql start

3
J'ai essayé la commande ci-dessus J'obtiens cette erreur Impossible de créer un nouveau fichier temporaire: 'xzclf_ads.TMD'
CryptoMiningPoolSetupYiimp

2
Eh bien, le disque est-il vraiment plein? Pouvez-vous essayer d'exécuter "df -h"? C'est probablement le cas et vous devriez libérer de l'espace ... Pendant la réparation de la table, il utilise de l'espace disque pour écrire sur la table temporaire. Comme vous pouvez le voir dans le message d'erreur qu'il écrit dans votre dossier / tmp /
Aleksandar Vucetic

13
Je devais naviguer /var/lib/mysql/<database>et courir myisamchk -r -v -f ./<table name>.
Linus Oleander

5
J'ai une myisam_sort_buffer_size is too smallerreur, donc cette commande a fonctionné pour moi:myisamchk -r -v --sort_buffer_size=2G <table_name>
dusan

1
Wow, je pensais que tout mon site Web avait été arrosé. Une solution si simple. Tu es mon héros!
Anthony

105

Essayez d'exécuter la requête suivante:

repair table <table_name>;

J'ai eu le même problème et cela m'a résolu le problème.


C'était une solution rapide! Il y avait une «mauvaise» table d'options. Assurez-vous de sélectionner d'abord la bonne base de données!
jyllstuart

12

Si cela vous donne un refus d'autorisation lors du déplacement vers / var / lib / mysql, utilisez la solution suivante

$ cd /var/lib/
$ sudo -u mysql myisamchk -r -v -f mysql/<DB_NAME>/<TABLE_NAME>

4

J'avais besoin d'ajouter USE_FRM à la déclaration de réparation pour que cela fonctionne.

REPAIR TABLE <table_name> USE_FRM;

3

J'ai eu myisamchk: error: myisam_sort_buffer_size is too smallcomme erreur.

La solution

myisamchk -r -v mysql/<DB_NAME>/<TABLE_NAME> --sort_buffer_size=2G

2

Accédez au fichier data_diret supprimez-le Your_table.TMPaprès avoir réparé la <Your_table>table.


Où est data_dir?
CMCDragonkai

1
recherchez-le avec cette commande grep -r datadir /etc/mysql/. Devrait être /var/lib/mysqlsous debian et ubuntu.
ThorstenS

1

C'est une solution à 100%. J'ai essayé moi-même.

myisamchk -r -v -f --sort_buffer_size = 128M --key_buffer_size = 128M / var / lib / mysql / databasename / tabloname


0

J'ai essayé les options dans les réponses existantes, principalement celle marquée comme correcte qui ne fonctionnait pas dans mon scénario. Cependant, ce qui fonctionnait était l'utilisation de phpMyAdmin. Sélectionnez la base de données puis sélectionnez la table, dans le menu déroulant du bas, sélectionnez "Réparer la table".

  • Type de serveur: MySQL
  • Version du serveur: 5.7.23 - MySQL Community Server (GPL)
  • phpMyAdmin: Informations sur la version: 4.7.7
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.