MySQL / Dosya yazma hatası (Errcode 28)


84

Web uygulamalarımızdan birinde aşağıdaki hatayı alıyorum -

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

Herhangi bir fikir - bu sunucumdaki bazı sabit disk alanı sorunu mu?


3
Yeterli disk alanı var mı?
NDM

4
Cihazınızda biraz yer açın.
Ashwin A

1
Bugün bu hatayı yalnızca% 11'inin kullanıldığı bir cihazda açtım. Makineyi yeniden başlattım ve ondan sonra iyiydi, ancak bu hatanın kullanılabilir alan olsa bile gerçekleşebileceği anlaşılıyor.
Elkvis

Yukarıda belirtildiği gibi Hata kodu 28, yetersiz disk alanı olduğu anlamına gelir. Lütfen bunun bir sunucu hatası mesajı olduğunu, istemci olmadığını unutmayın. Bu nedenle, doğru sunucuyu kontrol ettiğinizden emin olun.
Sergey Sinkovskiy

Yanıtlar:


117

Şu perrorkomutu kullanın :

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

Sisteminizde hata kodları farklı olmadığı sürece, dosya sisteminiz dolu.


7
"dosya sisteminiz dolu". Hangi tarafta? db sunucusu veya db istemcisi?
Marinos An

db_server üzerindedir. while true; do df -h /tmp; sleep 3; donebetiği çalıştırırken geçici tablolar tarafından ne kadar alan kullanıldığını görmek için kullanabilirsiniz .
vinicius.olifer

20

Benzer bir sorunla karşılaştık ve sorun MySQL'in ihtiyaçları için / tmp dizinini kullanmasıydı (varsayılan yapılandırmadır). Ve / tmp, büyük MySQL istekleri için çok az alanı olan kendi bölümünde bulunuyordu.

Daha fazla ayrıntı için şu cevaba bakın: https://stackoverflow.com/a/3716778/994302


18

Aynı problemi yaşadım ama disk alanı yeterliydi (sadece% 40 dolu). Sorun düğümlerdi, çok fazla küçük dosyam vardı ve düğümlerim doluydu.

İnode durumunu df -i ile kontrol edebilirsiniz


10

Hata, MySQL için gerekli olan geçici dosyaları oluşturmak için yeterli alana sahip olmadığınız anlamına gelir.

Deneyebileceğiniz ilk şey, /tmp/bölümünüzün boyutunu genişletmektir . LVM altındaysanız, lvextendkomutu kontrol edin .

Bölümünüzün boyutunu artıramıyorsanız /tmp/, MySQL yapılandırmasında çalışabilir ,my.cnf (genellikle açık olan /etc/mysql/my.cnf) dosyayı düzenleyebilir ve şu satırı arayabilirsiniz :

tmpdir = /tmp/

Ne istersen onu değiştir (örnek /var/tmp/). Yeni dizinde mysql kullanıcısı için alanınız olduğundan ve yazma izni atadığınızdan emin olun.

Bu yardımcı olur umarım!


4

Aşağıdaki kodu çalıştırın:

du -sh / var / log / mysql

Belki mysql ikili günlükleri belleği doldurdu, öyleyse, eski günlüklerin kaldırılmasını izleyin ve sunucuyu yeniden başlatın. Ayrıca my.cnf'ye ekleyin:

expire_logs_days = 3


du: `/ var / log / mysql'e erişilemiyor: Böyle bir dosya veya dizin yok
Kullanıcı

olmalıdu -sh /var/log/mysql.log
Nikita 웃

1

Aynı hatayı aldım ve sorun sanal makinemde yeterli alan değildi. Gereksiz bazı dosyaları sildim ve tekrar çalışmaya başladı.

bellek / disk alanı ayırmam buna benzer bir şeye benziyordu

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

0

Diğeri çalışmazsa bu satırı kullanmayı da deneyebilirsiniz:

du -sh / var / lib / mysql / veritabanı_Adı

Ayrıca, barındırıcınızla görüşmek ve veritabanlarınızın ne kadar büyük olmasına izin verdiklerini görmek isteyebilirsiniz.


0

Xampp kullanıcıları için: Deneyimlerime göre, soruna '0' adlı ve 'mysql' klasöründe bulunan bir dosyadan kaynaklanıyordu. Boyut çok büyüktü (benimki yaklaşık 256 Gb'ye patladı). Kaldırılması sorunu çözdü.


0

Bu hata, bölümde yeterli alanınız olmadığında ortaya çıkar. Genellikle MYSQL, linux sunucularında / tmp kullanır. Bu, bazı sorgularda gerçekleşebilir, çünkü arama ya çok fazla veri döndürüyordu, ya da muhtemelen sadece büyük geçici dosyalar oluşturan çok sayıda veriyi inceliyordu.

/Etc/mysql/my.cnf dosyanızı düzenleyin

tmpdir = / sizin / yeni / dizin

Örneğin

tmpdir = / var / tmp

Genellikle kendi bölümünde bulunan / tmp'den daha fazla alan ayrılmalıdır.


0

Bugün. Aynı problemim var ... benim çözümüm:

1) inode'u kontrol et: Gördüm df -i :

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) Hangi klasörlerin maksimum inod kullandığına bakmaya başladım:

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

Yakında çok sayıda dosya içeren / home / tomnolane / tmp klasöründe buldum.

3) / home / tomnolane / tmp klasörünü PROFIT'i kaldırdım.

4) kontrol edildi:

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

tamam.

5) restart mysql service- sorun yok !!!!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.