Problém je způsoben nedostatkem místa na disku ve složce /tmp. Svazek /tmp se používá v dotazech, které vyžadují vytvoření dočasných tabulek. Tyto dočasné tabulky jsou ve formátu MyISAM, i když dotaz používá pouze tabulky s InnoDB.
Zde je několik řešení:
- optimalizujte dotaz tak, aby nevytvářel dočasné tabulky (přepište dotaz, rozdělte jej na více dotazů nebo přidejte správné indexy, analyzujte plán provádění pomocí pt-query-digest
a
EXPLAIN <query>
) Viz toto Článek Percona o dočasných tabulkách . - optimalizujte MySQL tak, aby nevytvářelo dočasné tabulky (sort_buffer_size, join_buffer_size). Viz:https://dba.stackexchange.com/questions/53201/mysql-creates-temporary-tables-on-disk-how-do-i-stop-it
- zmenšit stoly. Pokud je to možné, odstraňte nepotřebné řádky
- použijte
SELECT table1.col1, table2,col1 ...
místoselect *
k použití pouze sloupců, které potřebujete v dotazu, ke generování menších dočasných tabulek - použijte datové typy, které zabírají méně místa
- přidejte více místa na disku na svazek, kde se nachází složka /tmp
- změňte uživatele dočasné složky pomocí mysql nastavením
TMPDIR
proměnná prostředí před spuštěním mysqld. BodTMPDIR
do složky na disku, která má více volného místa. Můžete také použíttmpdir
možnost v/etc/my.cnf
nebo--tmpdir
v příkazovém řádku služby mysqld. Viz:B.5.3.5 Kde MySQL ukládá dočasné soubory