Проблемът е причинен от липсата на дисково пространство в папката /tmp. Томът /tmp се използва при заявки, които изискват създаване на временни таблици. Тези временни таблици са във формат MyISAM, дори ако заявката използва само таблици с InnoDB.
Ето някои решения:
- оптимизирайте заявката, така че да не създава временни таблици (пренапишете заявката, разделете я на множество заявки или добавете правилни индекси, анализирайте плана за изпълнение с 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
- променете потребителя на временната папка от mysql, като зададете
TMPDIR
променлива на средата преди стартиране на mysqld. ТочкаTMPDIR
към папка на дисков том, който има повече свободно място. Можете също да използватеtmpdir
опция в/etc/my.cnf
или--tmpdir
в командния ред на услугата mysqld. Вижте:B.5.3.5 Къде MySQL съхранява временни файлове