MySQL / Schreibdateifehler (Errcode 28)

82

Ich habe den folgenden Fehler mit einer unserer Webanwendungen -

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

Irgendwelche Ideen - ist dies ein Problem mit dem Festplattenspeicher auf meinem Server?

Zabs
quelle
3
Ist genügend Speicherplatz verfügbar?
NDM
4
Geben Sie Speicherplatz auf Ihrem Gerät frei.
Ashwin A
1
Ich hatte diesen Fehler heute auf einem Gerät mit nur 11% verwendet. Ich habe den Computer neu gestartet, und danach war es in Ordnung, aber es scheint, dass dieser Fehler auch dann auftreten kann, wenn Speicherplatz verfügbar ist.
Elkvis
Wie oben erwähnt, bedeutet Fehlercode 28, dass nicht genügend Speicherplatz vorhanden ist. Bitte beachten Sie, dass es sich um eine Serverfehlermeldung handelt, nicht um einen Client. Stellen Sie also sicher, dass Sie den richtigen Server überprüfen.
Sergey Sinkovskiy

Antworten:

116

Verwenden Sie den perrorBefehl :

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

Sofern sich die Fehlercodes auf Ihrem System nicht unterscheiden, ist Ihr Dateisystem voll.

Arnaud Le Blanc
quelle
7
"Ihr Dateisystem ist voll". Auf welcher Seite? Datenbankserver oder Datenbankclient?
Marinos An
es ist auf dem db_server. Sie können while true; do df -h /tmp; sleep 3; donewährend der Ausführung des Skripts verwenden, um zu sehen, wie viel Speicherplatz von temporären Tabellen verwendet wird.
vinicius.olifer
20

Wir haben ein ähnliches Problem festgestellt, und das Problem war das von MySQL verwendete Verzeichnis / tmp für seine Anforderungen (Standardkonfiguration). Und / tmp befand sich auf einer eigenen Partition, die zu wenig Platz für große MySQL-Anfragen hatte.

Weitere Informationen finden Sie in dieser Antwort: https://stackoverflow.com/a/3716778/994302

XSeryoga
quelle
15

Ich hatte das gleiche Problem, aber der Speicherplatz war in Ordnung (nur 40% voll). Problem waren Inodes, ich hatte zu viele kleine Dateien und meine Inodes waren voll.

Sie können den Inode-Status mit df -i überprüfen

Turshija
quelle
10

Der Fehler bedeutet, dass Sie nicht genügend Speicherplatz haben, um temporäre Dateien zu erstellen, die von MySQL benötigt werden.

Als erstes können Sie versuchen, die Größe Ihrer /tmp/Partition zu erweitern. Wenn Sie sich unter LVM befinden, überprüfen Sie den lvextendBefehl.

Wenn Sie die Größe Ihrer Partition nicht erhöhen können, können /tmp/Sie in der MySQL-Konfiguration arbeiten, diemy.cnf (normalerweise aktive /etc/mysql/my.cnf) Datei bearbeiten und nach dieser Zeile suchen:

tmpdir = /tmp/

Ändern Sie es für was Sie wollen (Beispiel /var/tmp/). Stellen Sie einfach sicher, dass Sie Speicherplatz haben, und weisen Sie dem MySQL-Benutzer im neuen Verzeichnis eine Schreibberechtigung zu.

Hoffe das hilft!

SlayerX
quelle
4

Führen Sie den folgenden Code aus:

du -sh / var / log / mysql

Möglicherweise füllten MySQL-Binärprotokolle den Speicher. Wenn ja, folgen Sie dem Entfernen alter Protokolle und starten Sie den Server neu. Fügen Sie auch in my.cnf hinzu:

expire_logs_days = 3

Alex
quelle
du: kann nicht auf `/ var / log / mysql 'zugreifen: Keine solche Datei oder kein solches Verzeichnis
Benutzer
sollte seindu -sh /var/log/mysql.log
Nikita 웃
1

Ich hatte den gleichen Fehler und das Problem war einfach nicht genug Speicherplatz auf meiner virtuellen Maschine. Ich habe einige unnötige Dateien gelöscht und es hat wieder funktioniert.

Meine Speicher- / Speicherplatzzuordnung sah ungefähr so ​​aus

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

Sie können auch versuchen, diese Zeile zu verwenden, wenn die andere nicht funktioniert:

du -sh / var / lib / mysql / database_Name

Sie können sich auch bei Ihrem Host erkundigen, wie groß Ihre Datenbanken sein dürfen.

Wyatt
quelle
0

Für xampp-Benutzer: Meiner Erfahrung nach wurde das Problem durch eine Datei mit dem Namen '0' verursacht, die sich im Ordner 'mysql' befindet. Die Größe war zu groß (meine explodierte auf etwa 256 GB). Seine Entfernung behebt das Problem.

Sandro Rosa
quelle
0

Dieser Fehler tritt auf, wenn Sie nicht genügend Speicherplatz in der Partition haben. Normalerweise verwendet MYSQL / tmp auf Linux-Servern. Dies kann bei einigen Abfragen der Fall sein, da bei der Suche entweder viele Daten zurückgegeben wurden oder möglicherweise sogar nur viele Daten durchsucht wurden, um große temporäre Dateien zu erstellen.

Bearbeiten Sie Ihre /etc/mysql/my.cnf

tmpdir = / your / new / dir

z.B

tmpdir = / var / tmp

Sollte mit mehr Speicherplatz als / tmp zugewiesen werden, der sich normalerweise in einer eigenen Partition befindet.

Daniel Bernardez
quelle
0

Heute. Ich habe das gleiche Problem ... meine Lösung:

1) Inode überprüfen: df -i Ich sah:

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) Ich begann zu suchen, welche Ordner die maximale Anzahl von Inods verwenden:

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

Bald fand ich im Ordner / home / tomnolane / tmp, der eine große Anzahl von Dateien enthielt.

3) Ich habe den Ordner / home / tomnolane / tmp PROFIT entfernt.

4) geprüft:

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

Es ist in Ordnung.

5) restart mysql service- es ist ok !!!!

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