it-swarm.com.de

MySQL/Fehler beim Schreiben der Datei (Errcode 28)

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?

75
Zabs

Verwenden Sie den Befehl perror :

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

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

107
Arnaud Le Blanc

Wir hatten ein ähnliches Problem, und das Problem war, dass MySQL das/tmp-Verzeichnis für seine Anforderungen verwendete (seine Standardkonfiguration)./Tmp befand sich auf einer eigenen Partition, die zu wenig Speicherplatz für große MySQL-Anforderungen hatte.

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

18
XSeryoga

Ich hatte das gleiche Problem, aber der Festplattenspeicher war in Ordnung (nur 40% voll). Das 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

14
Turshija

Der Fehler bedeutet, dass Sie nicht über genügend Speicherplatz verfügen, um von MySQL benötigte temporäre Dateien zu erstellen.

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

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

tmpdir = /tmp/

Ändern Sie es für was Sie möchten (Beispiel /var/tmp/). Stellen Sie sicher, dass Sie Platz haben und Schreibberechtigung für den mysql-Benutzer im neuen Verzeichnis haben. 

Hoffe das hilft!

9
SlayerX

Führen Sie den folgenden Code aus:

du -sh/var/log/mysql

Möglicherweise haben MySQL-Binärprotokolle den Speicher gefüllt. Wenn ja, entfernen Sie alte Protokolle und starten Sie den Server neu. Fügen Sie auch in my.cnf hinzu:

expire_logs_days = 3

4
Alex

Für xampp-Benutzer: Nach meiner Erfahrung 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). Durch das Entfernen wurde das Problem behoben.

0
Sandro Rosa

Ich hatte denselben Fehler und das Problem war einfach nicht genug Speicherplatz auf meiner virtuellen Maschine. Ich habe einige nicht benötigte Dateien gelöscht und es funktioniert wieder.

meine Speicher-/Festplattenspeicherzuordnung sah in etwa so aus

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

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

1) Inode prüfen: df -i.__ Ich habe gesehen:

[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) Ich habe nachgesehen, welche Ordner die maximale Anzahl von Inods verwenden:

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

bald fand ich in/home/tomnolane/tmp ordner, der eine riesige anzahl von dateien enthielt.

3) Ich entfernte den Ordner/home/tomnolane/tmp PROFIT.

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 - ist ok !!!!

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 beim Nachschlagen entweder eine große Datenmenge zurückgegeben wurde oder möglicherweise auch nur eine Menge Daten durchsucht wurden, die große temporäre Dateien erstellen.

Bearbeiten Sie Ihre /etc/mysql/my.cnf

tmpdir =/your/new/dir

z.B

tmpdir =/var/tmp

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

0

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

du -sh/var/lib/mysql/datenbankname

Sie können auch mit Ihrem Host überprüfen, um zu sehen, wie groß Ihre Datenbanken sind.

0
Wyatt