Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Falsche Schlüsseldatei für Tabelle „/tmp/#sql_3c51_0.MYI“. Versuchen Sie, sie zu reparieren

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 ... statt select * 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 auf TMPDIR in einen Ordner auf einem Datenträgervolume mit mehr freiem Speicherplatz. Sie können auch tmpdir 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