MySQL 在運行過程中會產生大量臨時文件,了解其存儲位置與配置方式對資料庫效能調優至關重要。本文系統整理 MySQL 臨時文件的預設路徑、自訂配置、複寫環境注意事項及磁碟空間估算方法。
MySQL 啟動時會讀取環境變數 TMPDIR 作為臨時文件目錄。若未設定,則依序使用系統預設路徑:/tmp、/var/tmp 或 /usr/tmp。當預設文件系統空間不足時,可透過啟動參數 --tmpdir 指定擁有足夠空間的目錄。
自 MySQL 5.1 起,--tmpdir 支援多路徑列表,以循環方式分發 I/O 負載:
: 分隔; 分隔最佳實踐:各路徑應位於不同物理磁碟,而非同一磁碟的不同分區,才能真正分散 I/O 壓力。
若 MySQL 作為複寫從庫運行,嚴禁將 --tmpdir 指向:
原因:複寫過程中需保留某些臨時文件(如臨時表、LOAD DATA INFILE 產生的文件)以便重啟後續傳。若文件遺失,複寫將中斷失敗。
MySQL 以隱含(unlinked)方式建立所有臨時文件,確保 mysqld 異常終止時自動釋放空間。副作用是:在文件系統層面無法直接看到佔用大量空間的臨時文件,排查磁碟滿問題時需注意。
執行 ORDER BY 或 GROUP BY 時,MySQL 通常會建立一個或多個臨時文件。所需最大磁碟空間公式:
(排序行長度 + 行指標大小) × 匹配行數 × 2
行指標預設 4 位元組,大表可能增加。預估空間時請納入此系數。
SELECT 查詢會建立,名稱以 SQL_* 開頭,非隱含,可在文件系統看到。TMPDIR 所在分區剩餘空間,預留足夠緩衝。Created_tmp_disk_tables 狀態變數,評估磁碟臨時表頻率。