Masalah ini disebabkan oleh kurangnya ruang disk di folder /tmp. Volume /tmp digunakan dalam kueri yang memerlukan pembuatan tabel sementara. Tabel sementara ini dalam format MyISAM meskipun kueri hanya menggunakan tabel dengan InnoDB.
Berikut beberapa solusinya:
- optimalkan kueri sehingga tidak membuat tabel sementara (menulis ulang kueri, membaginya menjadi beberapa kueri, atau menambahkan indeks yang tepat, menganalisis rencana eksekusi dengan pt-query-digest
dan
EXPLAIN <query>
) Lihat Artikel Percona tentang tabel sementara . - optimalkan MySQL agar tidak membuat tabel sementara (sort_buffer_size, join_buffer_size). Lihat:https://dba.stackexchange.com/questions/53201/mysql-creates-temporary-tables-on-disk-how-do-i-stop-it
- membuat tabel lebih kecil. Jika memungkinkan, hapus baris yang tidak diperlukan
- gunakan
SELECT table1.col1, table2,col1 ...
alih-alihselect *
untuk hanya menggunakan kolom yang Anda perlukan dalam kueri, untuk menghasilkan tabel temp yang lebih kecil - gunakan tipe data yang menggunakan lebih sedikit ruang
- tambahkan lebih banyak ruang disk pada volume tempat folder /tmp berada
- ubah pengguna folder temp dengan mysql dengan mengatur
TMPDIR
variabel lingkungan sebelum mysqld start-up. ArahkanTMPDIR
ke folder pada volume disk yang memiliki lebih banyak ruang kosong. Anda juga dapat menggunakantmpdir
pilihan di/etc/my.cnf
atau--tmpdir
di baris perintah layanan mysqld. Lihat:B.5.3.5 Tempat MySQL Menyimpan File Sementara