88 votes

MySQL/Enregistrement d'une erreur de fichier (Errcode 28)

J'ai l'erreur suivante avec l'une de nos applications web -

Query3 failed: Error writing file '/tmp/MY1fnqpm' (Errcode: 28) ... INSERT MailList... (removed the rest of the query for security reasons)

Une idée - s'agit-il d'un problème d'espace sur le disque dur de mon serveur ?

3 votes

L'espace disque disponible est-il suffisant ?

4 votes

Libérez de l'espace sur votre appareil.

1 votes

Cette erreur est apparue aujourd'hui sur un appareil qui n'était utilisé qu'à 11 %. J'ai redémarré la machine et tout est rentré dans l'ordre, mais il semblerait que cette erreur puisse se produire même lorsqu'il y a de l'espace disponible.

119voto

arnaud576875 Points 35281

Utiliser le perror commande :

$ perror 28
OS error code  28:  No space left on device

Sauf si les codes d'erreur sont différents sur votre système, votre système de fichiers est plein.

7 votes

"Votre système de fichiers est plein". De quel côté ? du serveur de base de données ou du client de base de données ?

0 votes

Il se trouve sur le serveur db_server. vous pouvez utiliser while true; do df -h /tmp; sleep 3; done lors de l'exécution du script pour voir combien d'espace est utilisé par les tables temporaires.

24voto

XSeryoga Points 41

Nous avons rencontré un problème similaire, et le problème était que MySQL utilisait le répertoire /tmp pour ses besoins (c'est la configuration par défaut). Et /tmp était situé sur sa propre partition, qui avait trop peu d'espace pour les grosses requêtes de MySQL.

Pour plus de détails, consultez cette réponse : https://stackoverflow.com/a/3716778/994302

21voto

Turshija Points 227

J'ai eu le même problème mais l'espace disque était correct (40% seulement). Le problème venait des inodes, j'avais trop de petits fichiers et mes inodes étaient pleins.

Vous pouvez vérifier l'état des inodes avec df -i

10voto

SlayerX Points 11

L'erreur signifie que vous n'avez pas assez d'espace pour créer les fichiers temporaires nécessaires à MySQL.

La première chose à faire est d'augmenter la taille de votre /tmp/ partition. Si vous êtes sous LVM, vérifiez l'option lvextend commande.

Si vous ne parvenez pas à augmenter la taille de votre partition /tmp/ vous pouvez travailler sur la configuration de MySQL, éditer le my.cnf (généralement sur /etc/mysql/my.cnf ) et recherchez cette ligne :

tmpdir = /tmp/

Remplacez-le par ce que vous voulez (exemple /var/tmp/ ). Veillez à ce que l'utilisateur mysql dispose d'un espace suffisant et d'une autorisation d'écriture dans le nouveau répertoire.

J'espère que cela vous aidera !

4voto

Alex Points 9

Exécutez le code suivant :

du -sh /var/log/mysql

Si c'est le cas, suivez la procédure de suppression des anciens journaux et redémarrez le serveur. Ajoutez également dans my.cnf :

expire_logs_days = 3

0 votes

Du : cannot access `/var/log/mysql' : Aucun fichier ou répertoire de ce type

0 votes

Devrait être du -sh /var/log/mysql.log

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X