MySQL / Błąd zapisu pliku (Errcode 28)

84

Mam następujący błąd w jednej z naszych aplikacji internetowych -

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

Jakieś pomysły - czy to jakiś problem z miejscem na moim serwerze?

Zabs
źródło
3
Czy jest wystarczająco dużo miejsca na dysku?
NDM,
4
Zwolnij trochę miejsca na swoim urządzeniu.
Ashwin A,
1
Ten błąd wyskoczył dzisiaj na urządzeniu, na którym jest używane tylko 11%. Zrestartowałem maszynę i po tym było dobrze, ale wydaje się, że ten błąd może się zdarzyć nawet wtedy, gdy jest dostępne miejsce.
Elkvis,
Jak wskazano powyżej Kod błędu 28 oznacza, że ​​na dysku jest za mało miejsca. Należy pamiętać, że jest to komunikat o błędzie serwera, a nie klienta. Więc upewnij się, że sprawdzasz na właściwym serwerze.
Sergey Sinkovskiy

Odpowiedzi:

117

Użyj perrorpolecenia :

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

O ile kody błędów nie są różne w twoim systemie, twój system plików jest pełny.

Arnaud Le Blanc
źródło
7
„Twój system plików jest pełny”. Po której stronie? serwer db czy klient db?
Marinos An
znajduje się na serwerze db_server. możesz użyć while true; do df -h /tmp; sleep 3; donepodczas uruchamiania skryptu, aby zobaczyć, ile miejsca zajmują tabele tymczasowe.
vinicius.olifer
20

Doświadczyliśmy podobnego problemu, a problem polegał na tym, że MySQL użył katalogu / tmp na swoje potrzeby (jest to domyślna konfiguracja). A / tmp znajdował się na własnej partycji, która miała za mało miejsca na duże żądania MySQL.

Aby uzyskać więcej informacji, spójrz na tę odpowiedź: https://stackoverflow.com/a/3716778/994302

XSeryoga
źródło
18

Miałem ten sam problem, ale miejsce na dysku było w porządku (tylko 40% zajęte). Problem dotyczył i-węzłów, miałem zbyt wiele małych plików, a moje i-węzły były pełne.

Możesz sprawdzić status i-węzła za pomocą df -i

Turshija
źródło
10

Błąd oznacza, że ​​nie masz wystarczającej ilości miejsca, aby utworzyć pliki tymczasowe potrzebne MySQL.

Pierwszą rzeczą, którą możesz spróbować, jest zwiększenie rozmiaru /tmp/partycji. Jeśli jesteś pod LVM, sprawdź lvextendpolecenie.

Jeśli nie jesteś w stanie zwiększyć rozmiaru swojej partycji /tmp/, możesz pracować w konfiguracji MySQL, edytujmy.cnf/etc/mysql/my.cnf plik (zazwyczaj on ) i poszukaj tej linii:

tmpdir = /tmp/

Zmień to na cokolwiek chcesz (przykład /var/tmp/). Po prostu upewnij się, że masz miejsce i przydziel uprawnienia do zapisu użytkownikowi mysql w nowym katalogu.

Mam nadzieję że to pomoże!

SlayerX
źródło
4

Uruchom następujący kod:

du -sh / var / log / mysql

Być może dzienniki binarne mysql zapełniły pamięć, jeśli tak, postępuj zgodnie z usunięciem starych dzienników i zrestartuj serwer. Dodaj również w my.cnf:

expire_logs_days = 3

Alex
źródło
du: nie można uzyskać dostępu do `/ var / log / mysql ': Brak takiego pliku lub katalogu
Użytkownik
powinno byćdu -sh /var/log/mysql.log
Nikita 웃
1

Miałem ten sam błąd, a problemem było po prostu za mało miejsca na mojej maszynie wirtualnej. Usunąłem niepotrzebne pliki i znowu zaczęło działać.

moja alokacja pamięci / miejsca na dysku wyglądała mniej więcej tak

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

Możesz także spróbować użyć tej linii, jeśli druga nie działa:

du -sh / var / lib / mysql / nazwa_bazy_danych

Możesz również sprawdzić u swojego hosta i zobaczyć, jak duże pozwalają na to twoje bazy danych.

Wyatt
źródło
0

Dla użytkowników xampp: z mojego doświadczenia wynika, że ​​problem był spowodowany przez plik o nazwie „0” i znajdujący się w folderze „mysql”. Rozmiar był zbyt duży (mój eksplodował do około 256 Gb). Jego usunięcie rozwiązało problem.

Sandro Rosa
źródło
0

Ten błąd występuje, gdy nie masz wystarczającej ilości miejsca na partycji. Zwykle MYSQL używa / tmp na serwerach linuxowych. Może się tak zdarzyć w przypadku niektórych zapytań, ponieważ wyszukiwanie zwróciło dużo danych lub być może nawet przeszukało wiele danych, tworząc duże pliki tymczasowe.

Edytuj plik /etc/mysql/my.cnf

tmpdir = / twój / nowy / dir

na przykład

tmpdir = / var / tmp

Powinien mieć więcej miejsca niż / tmp, które zwykle znajduje się na własnej partycji.

Daniel Bernardez
źródło
0

Dzisiaj. Mam ten sam problem ... moje rozwiązanie:

1) sprawdź i-węzeł: df -i widziałem:

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) Zacząłem sprawdzać, które foldery używają maksymalnej liczby inod:

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

wkrótce znalazłem w folderze / home / tomnolane / tmp, który zawierał ogromną liczbę plików.

3) Usunąłem / home / tomnolane / tmp folder ZYSK.

4) sprawdzono:

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

w porządku.

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

Медведев Александр
źródło