J'ai eu l'erreur suivante à partir d'une requête MySQL.
#126 - Incorrect key file for table
Je n'ai même pas déclaré de clé pour cette table, mais j'ai des indices. Quelqu'un sait-il quel pourrait être le problème?
mysql
mysql-error-126
Brian
la source
la source
REPAIR TABLE
et obtenez toujours cela, en plus de l'espace disponible,/tmp
vous voudrez peut-être essayer de redémarrer le serveur.Réponses:
Chaque fois que cela s'est produit, cela a été un disque complet d'après mon expérience.
ÉDITER
Il est également intéressant de noter que cela peut être causé par un disque virtuel complet lors de tâches telles que la modification d'une grande table si vous avez configuré un disque virtuel. Vous pouvez temporairement commenter la ligne du disque virtuel pour autoriser de telles opérations si vous ne pouvez pas en augmenter la taille.
la source
/tmp
trouve un petit système de fichiers tmpfs et mysql a manqué d'espace pour écrire une table temporaire là-bas. J'ai dû définir latmpdir
variable de configuration comme mentionné sur mysql.comTout d'abord, vous devez savoir que les clés et les index sont des synonymes dans MySQL. Si vous regardez la documentation sur la syntaxe CREATE TABLE , vous pouvez lire:
Maintenant, le type d'erreur que vous obtenez peut être dû à deux choses:
Dans le premier cas, vous verrez que l'ajout d'une limite à votre requête peut résoudre temporairement le problème. Si cela le fait pour vous, vous avez probablement un
tmp
dossier trop petit pour la taille des requêtes que vous essayez de faire. Vous pouvez alors décider outmp
agrandir, ou réduire vos requêtes! ;)Parfois,
tmp
c'est assez grand mais toujours plein, vous devrez effectuer un nettoyage manuel dans ces situations.Dans le second cas, il y a de réels problèmes avec les données de MySQL. Si vous pouvez réinsérer facilement les données, je vous conseillerais de simplement supprimer / recréer la table et de réinsérer les données. Si vous ne pouvez pas, vous pouvez essayer de réparer la table en place avec REPAIR table . C'est un processus généralement long qui pourrait très bien échouer.
Regardez le message d'erreur complet que vous obtenez:
Il mentionne dans le message que vous pouvez essayer de le réparer. De plus, si vous regardez le FILEPATH réel que vous obtenez, vous pouvez en savoir plus:
si c'est quelque chose comme
/tmp/#sql_ab34_23f
ça, cela signifie que MySQL doit créer une table temporaire en raison de la taille de la requête. Il le stocke dans / tmp, et qu'il n'y a pas assez d'espace dans votre / tmp pour cette table temporaire.s'il contient le nom d'une table réelle à la place, cela signifie que cette table est très probablement corrompue et que vous devez la réparer.
Si vous identifiez que votre problème est de la taille de / tmp, lisez simplement cette réponse à une question similaire pour le correctif: MySQL, Erreur 126: fichier de clé incorrect pour la table .
la source
Suivre ces instructions m'a permis de recréer mon répertoire tmp et de résoudre le problème:
Affichez tous les systèmes de fichiers et leur utilisation du disque sous une forme lisible par l'homme:
Recherchez les processus dans lesquels des fichiers sont ouverts
/tmp
Puis démontez
/tmp
et/var/tmp
:Ensuite, supprimez le fichier de partition corrompu:
Ensuite, créez-en un nouveau:
Notez qu'en éditant le script Perl securetmp, vous pouvez définir manuellement la taille du répertoire tmp vous-même, mais le simple fait d'exécuter le script a augmenté la taille du répertoire tmp sur notre serveur d'environ 450 Mo à 4,0 Go.
la source
L'erreur n ° 126 se produit généralement lorsque vous avez une table corrompue. La meilleure façon de résoudre ce problème est d'effectuer une réparation. Cet article peut vous aider:
http://dev.mysql.com/doc/refman/5.0/en/repair-table.html
la source
J'ai eu cette erreur quand je mets
ft_min_word_len = 2
enmy.cnf
, ce qui réduit la longueur de mot minimum dans un index de texte intégral à 2, la valeur par défaut de 4.La réparation de la table a résolu le problème.
la source
Essayez d'utiliser la limite dans votre requête. C'est à cause du disque plein comme dit @Monsters X.
J'ai également fait face à ce problème et résolu par limite dans la requête, car les milliers d'enregistrements étaient là. Fonctionne maintenant bien :)
la source
Je sais que c'est un vieux sujet mais aucune des solutions mentionnées n'a fonctionné pour moi. J'ai fait autre chose qui a fonctionné:
Tu dois:
la source
la source
J'ai résolu ce problème avec:
Peut aider
la source
table
ENGINE = MyISAM;Aller à
/etc/my.cnf
et commentertmpfs
Cela résout le problème.
J'ai exécuté la commande suggérée dans une autre réponse et bien que le répertoire soit petit, il était vide, donc l'espace n'était pas le problème.
la source
Essayez d'exécuter une commande de réparation pour chacune des tables impliquées dans la requête.
Utilisez l'administrateur MySQL, allez dans Catalogue -> Sélectionnez votre catalogue -> Sélectionnez une table -> Cliquez sur le bouton Maintenance -> Réparer -> Utiliser FRM.
la source
Maintenant, les autres réponses l'ont résolu pour moi. Il s'avère que renommer une colonne et un index dans la même requête a provoqué l'erreur.
Ca ne fonctionne pas:
Travaux (2 déclarations):
C'était sur MariaDB 10.0.20. Il n'y avait aucune erreur avec la même requête sur MySQL 5.5.48.
la source
Ensuite, une erreur existe:
mysql> table de réparation f_scraper_banner_details;
Cela a fonctionné pour moi
la source
Mon problème provenait d'une mauvaise requête. J'ai référencé une table dans FROM le n'était pas référencé dans SELECT.
exemple:
, users u
est ce qui causait le problème pour moi. La suppression de cela a résolu le problème.Pour référence, c'était dans un environnement de développement CodeIgniter.
la source
J'ai reçu ce message en écrivant dans une table après avoir réduit le ft_min_word_len (longueur minimale du mot en texte intégral). Pour le résoudre, recréez l'index en réparant la table.
la source
mysqlcheck -r -f -uroot -p --use_frm nom_base
fera normalement l'affaire
la source