web-dev-qa-db-fra.com

Erreur de fichier MySQL/Writing (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)

Des idées - s'agit-il d'un problème d'espace disque sur mon serveur?

75
Zabs

Utilisez la commande perror :

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

À moins que les codes d'erreur ne diffèrent sur votre système, votre système de fichiers est saturé.

107
Arnaud Le Blanc

Nous avons rencontré un problème similaire, le problème était que le répertoire/tmp utilisé par MySQL était utilisé (configuration par défaut). Et/tmp était situé sur sa propre partition, qui disposait de trop peu d’espace pour les requêtes MySQL volumineuses.

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

18
XSeryoga

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

Vous pouvez vérifier l'état d'inode avec df -i

14
Turshija

L'erreur signifie que vous ne disposez pas de suffisamment d'espace pour créer les fichiers temporaires requis par MySQL.

La première chose que vous pouvez essayer est d’augmenter la taille de votre partition /tmp/. Si vous êtes sous LVM, vérifiez la commande lvextend.

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

tmpdir = /tmp/

Changez-le pour ce que vous voulez (exemple /var/tmp/). Assurez-vous simplement de disposer d'espace et d'attribuer des droits en écriture à l'utilisateur mysql dans le nouveau répertoire. 

J'espère que cela t'aides!

9
SlayerX

Exécutez le code suivant:

du -sh/var/log/mysql

Peut-être que les journaux binaires mysql ont rempli la mémoire. Si oui, suivez la suppression des anciens journaux et redémarrez le serveur. Ajoutez également dans my.cnf:

expire_logs_days = 3

4
Alex

Pour les utilisateurs de xampp: d'après mon expérience, le problème était dû à un fichier nommé "0" situé dans le dossier "mysql". La taille était trop grande (le mien a explosé à environ 256 Gb). Son élimination a résolu le problème.

0
Sandro Rosa

J'ai eu la même erreur et le problème était simplement le manque d'espace sur ma machine virtuelle. J'ai supprimé des fichiers inutiles et cela a recommencé à fonctionner.

mon allocation de mémoire/espace disque ressemblait à ceci

df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   37G   37G  127M 100% /
...
0
Samuel Frost

Aujourd'hui. J'ai le même problème ... ma solution:

1) vérifier l'inode: df -i J'ai vu:

root@vm22433:/etc/mysql# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
udev 124696 304 124392 1% /dev
tmpfs 127514 452 127062 1% /run
/dev/vda1 1969920 1969920 0 100% /
tmpfs 127514 1 127513 1% /dev/shm
tmpfs 127514 3 127511 1% /run/lock
tmpfs 127514 15 127499 1% /sys/fs/cgroup
tmpfs 127514 12 127502 1% /run/user/1002

2) J'ai commencé à regarder quels dossiers utilisent le nombre maximum d'inods:

 for i in /*; do echo $i; find $i |wc -l; done

j'ai vite trouvé dans le dossier/home/tomnolane/tmp, qui contenait un grand nombre de fichiers.

3) J'ai supprimé le dossier/home/tomnolane/tmp PROFIT.

4) vérifié:

Filesystem      Inodes  IUsed   IFree IUse% Mounted on
udev            124696    304  124392    1% /dev
tmpfs           127514    454  127060    1% /run
/dev/vda1      1969920 450857 1519063   23% /
tmpfs           127514      1  127513    1% /dev/shm
tmpfs           127514      3  127511    1% /run/lock
tmpfs           127514     15  127499    1% /sys/fs/cgroup
tmpfs           127514     12  127502    1% /run/user/1002

c'est bon.

5) restart mysql service - c'est bon !!!!

Cette erreur se produit lorsque vous ne disposez pas de suffisamment d'espace dans la partition. Généralement, MYSQL utilise/tmp sur les serveurs linux. Cela peut arriver avec certaines requêtes parce que la recherche retournait beaucoup de données, ou même simplement trier beaucoup de données pour créer de gros fichiers temporaires.

Editez votre /etc/mysql/my.cnf

tmpdir =/votre/nouveau/répertoire

par exemple

tmpdir =/var/tmp

Devrait être alloué avec plus d'espace que/tmp qui est habituellement dans sa propre partition.

0
Daniel Bernardez

Vous pouvez également essayer d'utiliser cette ligne si l'autre ne fonctionne pas:

du -sh/var/lib/mysql/nom_bdd

Vous voudrez peut-être également vérifier auprès de votre hôte et voir quelle taille ils permettent à vos bases de données.

0
Wyatt