この問題は、/tmpフォルダーのディスク容量が不足していることが原因です。/tmpボリュームは、一時テーブルの作成が必要なクエリで使用されます。クエリがInnoDBのテーブルのみを使用している場合でも、これらの一時テーブルはMyISAM形式です。
いくつかの解決策は次のとおりです。
- 一時テーブルが作成されないようにクエリを最適化します(クエリを書き直したり、複数のクエリに分割したり、適切なインデックスを追加したり、 pt-query-digest
および
EXPLAIN <query>
)これを参照一時テーブルに関するPerconaの記事 。 - MySQLを最適化して、一時テーブル(sort_buffer_size、join_buffer_size)を作成しないようにします。参照: https://dba.stackexchange.com/questions/53201/mysql-creates-temporary-tables-on-disk-how-do-i-stop-it
- テーブルを小さくします。可能であれば、不要な行を削除してください
-
SELECT table1.col1, table2,col1 ...
を使用しますselect *
の代わりに クエリで必要な列のみを使用して、より小さな一時テーブルを生成する - より少ないスペースで済むデータ型を使用する
- /tmpフォルダーが存在するボリュームにディスクスペースを追加します
-
TMPDIR
を設定して、mysqlによって一時フォルダユーザーを変更します mysqld起動前の環境変数。ポイントTMPDIR
より多くの空き領域があるディスクボリューム上のフォルダに移動します。tmpdir
を使用することもできます/etc/my.cnf
のオプション または--tmpdir
mysqldサービスのコマンドラインで。参照:B.5.3.5MySQLが一時ファイルを保存する場所