Проблемът е причинен от липсата на дисково пространство в папката /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 съхранява временни файлове