MySQL 臨時文件目錄機制與配置指南
預設路徑決定邏輯
- 環境變數
TMPDIR。
- 未設定則用系統預設:
/tmp、/var/tmp、/usr/tmp。
自定義臨時目錄
啟動參數 --tmpdir=/path/to/dir 指定較大空間的檔案系統目錄。
MySQL 5.1+ 多目錄輪詢
- Unix:冒號分隔
--tmpdir=/path1:/path2
- Windows/NetWare/OS/2:分號分隔
--tmpdir=path1;path2
- 最佳實踐: 路徑應位於**不同物理磁碟**,而非同磁碟不同分區,以分散 I/O 負載。
複制從庫特殊要求
嚴禁 將 --tmpdir 指向:
- 基於記憶體的檔案系統 (如
tmpfs)。
- 重啟會清空的目錄。
原因: 複制從庫需在重啟後保留臨時文件以完成臨時表複制或 LOAD DATA INFILE 操作。臨時文件遺失將導致複制中斷失敗。
臨時文件特性
- **隱含建立**:MySQL 以隱含方式建立,
mysqld 結束自動刪除,保證不殘留。
- **缺點**:目錄下看不到佔用空間的大臨時文件。
臨時文件使用場景與空間估算
- 排序 (ORDER BY/GROUP BY):通常用 1+ 個臨時文件。
最大空間 = (排序行長度 + 行指標 4bytes) × 匹配行數 × 2
- 部分 SELECT 查詢:建立臨時 SQL 表 (名稱
SQL_*),非隱含表。
- ALTER TABLE:在原表目錄下建立臨時表。