Das Problem wird durch fehlenden Speicherplatz im Ordner „/tmp“ verursacht. Das Volume „/tmp“ wird in Abfragen verwendet, die das Erstellen temporärer Tabellen erfordern. Diese temporären Tabellen sind im MyISAM-Format, auch wenn die Abfrage nur Tabellen mit InnoDB verwendet.
Hier sind einige Lösungen:
- Optimieren Sie die Abfrage so, dass keine temporären Tabellen erstellt werden (schreiben Sie die Abfrage neu, teilen Sie sie in mehrere Abfragen auf oder fügen Sie geeignete Indizes hinzu, analysieren Sie den Ausführungsplan mit pt-query-digest
und
EXPLAIN <query>
) Siehe diesen Percona-Artikel über temporäre Tabellen . - MySQL optimieren, damit es keine temporären Tabellen erstellt (sort_buffer_size, join_buffer_size). Siehe:https://dba.stackexchange.com/questions/53201/mysql-creates-temporary-tables-on-disk-how-do-i-stop-it
- Tabellen kleiner machen. Löschen Sie nach Möglichkeit nicht benötigte Zeilen
- benutze
SELECT table1.col1, table2,col1 ...
stattselect *
um nur die Spalten zu verwenden, die Sie in der Abfrage benötigen, um kleinere temporäre Tabellen zu generieren - Verwenden Sie Datentypen, die weniger Platz beanspruchen
- Fügen Sie mehr Speicherplatz auf dem Volume hinzu, auf dem sich der Ordner /tmp befindet
- Ändern Sie den Benutzer des temporären Ordners durch MySQL, indem Sie den
TMPDIR
festlegen Umgebungsvariable vor dem Start von mysqld. Zeigen Sie aufTMPDIR
in einen Ordner auf einem Datenträgervolume mit mehr freiem Speicherplatz. Sie können auchtmpdir
verwenden Option in/etc/my.cnf
oder--tmpdir
in der Kommandozeile des mysqld-Dienstes. Siehe:B.5.3.5 Wo speichert MySQL temporäre Dateien