Error de archivo de escritura / MySQL (Errcode 28)

82

Tengo el siguiente error con una de nuestras aplicaciones web:

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

Alguna idea: ¿se trata de un problema de espacio en el disco duro de mi servidor?

Zabs
fuente
3
¿Hay suficiente espacio en disco disponible?
NDM
4
Libera espacio en tu dispositivo.
Ashwin A
1
Este error apareció hoy en un dispositivo con solo un 11% de uso. Reinicié la máquina y estuvo bien después de eso, pero parece que este error puede ocurrir incluso cuando hay espacio disponible.
Elkvis
Como se señaló anteriormente, el código de error 28 significa que no hay suficiente espacio en el disco. Tenga en cuenta que es un mensaje de error del servidor, no del cliente. Así que asegúrese de estar comprobando el servidor correcto.
Sergey Sinkovskiy

Respuestas:

117

Usa el perrorcomando :

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

A menos que los códigos de error sean diferentes en su sistema, su sistema de archivos está lleno.

Arnaud Le Blanc
fuente
7
"su sistema de archivos está lleno". De que lado servidor de base de datos o cliente de base de datos?
Marinos An
está en db_server. puede utilizar while true; do df -h /tmp; sleep 3; donemientras ejecuta el script para ver cuánto espacio utilizan las tablas temporales.
vinicius.olifer
20

Hemos experimentado un problema similar, y el problema fue que MySQL usó el directorio / tmp para sus necesidades (es la configuración predeterminada). Y / tmp estaba ubicado en su propia partición, que tenía muy poco espacio para grandes solicitudes de MySQL.

Para obtener más detalles, eche un vistazo a esta respuesta: https://stackoverflow.com/a/3716778/994302

XSeryoga
fuente
17

Tuve el mismo problema, pero el espacio en disco estaba bien (solo el 40% de su capacidad). El problema eran los inodos, tenía demasiados archivos pequeños y mis inodos estaban llenos.

Puede verificar el estado del inodo con df -i

Turshija
fuente
10

El error significa que no tiene suficiente espacio para crear archivos temporales necesarios para MySQL.

Lo primero que puede intentar es ampliar el tamaño de su /tmp/partición. Si está bajo LVM, marque el lvextendcomando.

Si no puede aumentar el tamaño de su partición /tmp/, puede trabajar en la configuración de MySQL, edite elmy.cnf/etc/mysql/my.cnf archivo (normalmente activado ) y busque esta línea:

tmpdir = /tmp/

Cámbielo por lo que quiera (ejemplo /var/tmp/). Solo asegúrese de tener espacio y asignar permiso de escritura para el usuario mysql en el nuevo directorio.

¡Espero que esto ayude!

SlayerX
fuente
4

Ejecute el siguiente código:

du -sh / var / log / mysql

Quizás los registros binarios de mysql llenaron la memoria. Si es así, siga la eliminación de los registros antiguos y reinicie el servidor. También agregue en my.cnf:

expire_logs_days = 3

Alex
fuente
du: no se puede acceder a `/ var / log / mysql ': No existe tal archivo o directorio
Usuario
debería serdu -sh /var/log/mysql.log
Nikita 웃
1

Tuve este mismo error y el problema simplemente no era suficiente espacio en mi máquina virtual. Eliminé algunos archivos innecesarios y comenzó a funcionar nuevamente.

mi asignación de espacio de memoria / disco se veía así

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

También puede intentar usar esta línea si la otra no funciona:

du -sh / var / lib / mysql / nombre_base_datos

También puede consultar con su host y ver qué tan grandes permiten que sean sus bases de datos.

Wyatt
fuente
0

Para los usuarios de xampp: en mi experiencia, el problema fue causado por un archivo, llamado '0' y ubicado en la carpeta 'mysql'. El tamaño era demasiado grande (el mío explotó a unos 256 Gb). Su eliminación solucionó el problema.

Sandro Rosa
fuente
0

Este error ocurre cuando no tiene suficiente espacio en la partición. Por lo general, MYSQL usa / tmp en servidores Linux. Esto puede suceder con algunas consultas porque la búsqueda estaba devolviendo una gran cantidad de datos o posiblemente simplemente examinando una gran cantidad de datos creando grandes archivos temporales.

Edite su /etc/mysql/my.cnf

tmpdir = / su / nuevo / dir

p.ej

tmpdir = / var / tmp

Debería asignarse con más espacio que / tmp que suele estar en su propia partición.

Daniel Bernardez
fuente
0

Hoy. Tengo el mismo problema ... mi solución:

1) verifique el inodo: df -i vi:

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) Comencé a buscar qué carpetas usan el número máximo de inods:

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

pronto encontré en la carpeta / home / tomnolane / tmp, que contenía una gran cantidad de archivos.

3) Eliminé la carpeta / home / tomnolane / tmp PROFIT.

4) comprobado:

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

está bien.

5) restart mysql service- ¡está bien!

Медведев Александр
fuente