TMPDIR 環境變量時,MySQL 使用系統默認:/tmp、/var/tmp 或 /usr/tmp。--tmpdir=/path1:/path2:/path3(Unix 用冒號,Windows 用分號)可指定多目錄輪詢分發,**建議掛載在不同物理磁盤**以分散 I/O。禁止將 --tmpdir 指向內存文件系統(tmpfs)或重啟清空的目錄。從庫需在重啟後保留臨時文件以完成臨時表複製或 LOAD DATA INFILE 恢復,否則復制中斷。
MySQL 創建臨時文件時會立即 unlink(隱含刪除),文件句柄持有空間,進程結束自動釋放。優點:無殘留;缺點:ls -l 看不見大臨時文件佔用,排查磁盤滿需用 lsof | grep mysqld。
ORDER BY / GROUP BY 觸發磁盤排序時,最大臨時空間:
(排序行長度 + 行指針 4~8 字節) * 匹配行數 * 2
行指針在大表(>4GB)可能增至 8 字節。預留充足 tmpdir 空間至關重要。
#sql_*,**非隱含文件**,可見於 SHOW TABLES。#sql-ib*,操作完成後原子重命名替換。/mnt/mysqltmp,設置 --tmpdir=/mnt/mysqltmp。Created_tmp_disk_tables、Created_tmp_files 狀態變量。tmpdir 必須持久化存儲。sort_buffer_size 減少落盤。