J'essaie d'exécuter une requête assez volumineuse qui est censée s'exécuter tous les soirs pour remplir une table. Je reçois une erreur disant Incorrect key file for table '/var/tmp/#sql_201e_0.MYI'; try to repair it
mais le moteur de stockage que j'utilise (quelle que soit la valeur par défaut, je suppose?) ne prend pas en charge la réparation des tables.
comment résoudre ce problème afin de pouvoir exécuter la requête?
Le moteur de stockage (MyISAM) prend en charge la table de réparation. Vous devriez pouvoir le réparer.
Si la réparation échoue, c'est un signe que la table est très corrompue, vous n'avez pas d'autre choix que de la restaurer à partir des sauvegardes.
Si vous avez d'autres systèmes (par exemple, non-production avec les mêmes versions logicielles et le même schéma) avec une table identique, vous pourrez peut-être le corriger avec un peu de piratage (copie du frm et des fichiers MYI, suivie d'une réparation).
En substance, l'astuce consiste à éviter de se casser des tables en premier lieu. Cela signifie toujours éteindre votre base de données proprement, ne jamais la faire planter et ne jamais avoir de problèmes de matériel ou d'alimentation. En pratique, cela n'est pas très probable, donc si la durabilité est importante, vous voudrez peut-être envisager un moteur de stockage plus sûr.
Vous devez changer l'emplacement du dossier temporaire de MySQL qui est '/ tmp' dans la plupart des cas en un emplacement avec un plus grand espace disque. Changez-le dans le fichier de configuration de MySQL.
Fondamentalement, votre serveur manque d'espace disque où se trouve/tmp.
Vous devrez exécuter cette commande à partir de l'invite MySQL:
REPAIR TABLE tbl_name USE_FRM;
De documentation MySQL sur la commande Repair :
L'option USE_FRM est disponible si le fichier d'index . MYI est manquant ou si son en-tête est corrompu . Cette option indique à MySQL de ne pas faire confiance aux informations contenues dans l'en-tête du fichier .MYI et de les recréer à l'aide des informations du fichier .frm. Ce type de réparation ne peut pas être effectué avec myisamchk .
Votre requête génère un jeu de résultats si volumineux qu'il doit créer une table temporaire pour contenir certains des résultats ou un produit intermédiaire utilisé pour générer le résultat.
La table temporaire est générée dans/var/tmp. Cette table temporaire semble avoir été corrompue. Peut-être que le périphérique sur lequel la table temporaire était construite manquait d'espace. Cependant, cela entraînerait normalement une erreur de "manque d'espace". Peut-être que quelque chose d'autre en cours d'exécution sur votre machine a encombré la table temporaire.
Essayez de retravailler votre requête pour utiliser moins d'espace, ou essayez de reconfigurer votre base de données afin qu'une partition plus grande ou plus sûre soit utilisée pour les tables temporaires.
Manuel MySQL - B.5.4.4. Où MySQL stocke les fichiers temporaires
Le simple "REPAIR the table" de PHPMYADMIN a résolu ce problème pour moi.
TABLE DE RÉPARATION tbl_name USE_FRM;
La commande ne s'exécute que lorsque le type MySQL 'Storage Engine' doit être 'MyISAM'
J'espère que cela t'aides
Dans mon cas, il y avait un problème d'espace disque. J'ai supprimé certains fichiers de guerre indésirables de mon serveur et cela a fonctionné par la suite.
ce problème est dû à la faible disponibilité de l'espace de stockage d'un lecteur particulier (c:\ou d:\etc.,), libérez de la mémoire puis cela fonctionnera.
Merci Saikumar.P
Appliquez le jeu de caractères et le classement appropriés à la base de données, à la table et aux colonnes/champs.
Je crée une structure de base de données et de table en utilisant des requêtes SQL d'un serveur à un autre. il crée la structure de la base de données comme suit:
Je change le classement du tableau et de la colonne en utf8_general_ci
, et il résout l'erreur.