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?

CryptoMiningPoolSetupYiimp
la source
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
Aleksandar Vucetic
la source
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.

cREcker
la source
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>
crazycrv
la source
4

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

REPAIR TABLE <table_name> USE_FRM;
marque
la source
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
ThorstenS
la source
2

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

Humbertosmes
la source
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

cryptox1
la source
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
utilisateur3417257
la source