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?
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.
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
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
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!
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
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.
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% /
...
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.
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.