it-swarm.it

Errore di file MySQL/scrittura (Errcode 28)

Ho il seguente errore con una delle nostre applicazioni web - 

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

Qualche idea: si tratta di qualche problema di spazio su disco sul mio server?

75
Zabs

Usa il comando perror :

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

A meno che i codici di errore non siano diversi sul sistema, il file system è pieno.

107
Arnaud Le Blanc

Abbiamo riscontrato un problema simile e il problema era la directory MySQL utilizzata/tmp per le sue esigenze (è la configurazione predefinita). E/tmp si trovava sulla propria partizione, che aveva troppo spazio per le grandi richieste MySQL.

Per maggiori dettagli dai un'occhiata a questa risposta: https://stackoverflow.com/a/3716778/994302

18
XSeryoga

Ho avuto lo stesso problema ma lo spazio su disco era a posto (solo il 40% completo) . Il problema erano gli inode, avevo troppi file piccoli e i miei inode erano pieni.

È possibile verificare lo stato di inode con df -i

14
Turshija

L'errore significa che non hai abbastanza spazio per creare i file temporanei necessari a MySQL.

La prima cosa che puoi provare è espandere la dimensione della tua partizione /tmp/. Se sei in LVM, controlla il comando lvextend.

Se non sei in grado di aumentare la dimensione della partizione /tmp/ puoi lavorare nella configurazione di MySQL, modificare il file my.cnf(tipicamente su /etc/mysql/my.cnf) e cercare questa riga:

tmpdir = /tmp/

Modificalo per quello che vuoi (ad esempio /var/tmp/). Assicurati di avere spazio e assegna il permesso di scrittura per l'utente mysql nella nuova directory. 

Spero che questo ti aiuti!

9
SlayerX

Esegui il seguente codice:

du -sh/var/log/mysql

Forse i log binari mysql hanno riempito la memoria, in tal caso, seguire la rimozione dei vecchi log e riavviare il server. Aggiungi anche my.cnf:

expire_logs_days = 3

4
Alex

Per gli utenti di xampp: in base alla mia esperienza, il problema era causato da un file, denominato "0" e situato nella cartella "mysql". La dimensione era troppo grande (la mia esplose a circa 256 Gb). La sua rimozione ha risolto il problema.

0
Sandro Rosa

Ho avuto lo stesso errore e il problema era semplicemente non abbastanza spazio sulla mia macchina virtuale. Ho eliminato alcuni file non necessari e ha iniziato a funzionare di nuovo.

la mia allocazione di spazio su disco/memoria è stata simile a questa

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

Oggi. Ho lo stesso problema ... la mia soluzione:

1) controlla l'inode: df -i Ho visto:

[email protected]:/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) Ho iniziato a cercare quali cartelle utilizzano il numero massimo di inodi:

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

presto ho trovato nella cartella/home/tomnolane/tmp, che conteneva un numero enorme di file.

3) Ho rimosso/home/tomnolane/tmp folder PROFIT.

4) controllato:

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

va bene.

5) restart mysql service - è ok !!!!

Questo errore si verifica quando non si dispone di spazio sufficiente nella partizione. Solitamente MYSQL usa/tmp su server linux. Ciò può accadere con alcune query perché la ricerca stava restituendo molti dati, o forse anche solo setacciando un sacco di dati creando grandi file temporanei.

Modifica il tuo /etc/mysql/my.cnf

tmpdir =/your/new/dir

per esempio

tmpdir =/var/tmp

Dovrebbe essere allocato con più spazio di/tmp che di solito è nella propria partizione.

0
Daniel Bernardez

Puoi anche provare a usare questa linea se l'altra non funziona:

du -sh/var/lib/mysql/database_Name

Potresti anche voler controllare con il tuo host e vedere quanto sono grandi i loro database.

0
Wyatt