臨時檔案目錄機制
- MySQL 讀取環境變數
TMPDIR 作為臨時檔案目錄
- 未設定時使用系統預設:
/tmp、/var/tmp、/usr/tmp
- 可啟動參數
--tmpdir=/path/to/dir 指定大空間分區
- MySQL 5.1+ 支援多路徑輪該:Unix 用冒號
: 分隔,Windows 用分號 ;
- 最佳實踐:多路徑應對應不同物理磁碟,而非同磁碟不同分區,以分散 I/O 壓力
複寫 Slave 臨時目錄特殊要求
嚴禁 將 --tmpdir 指向記憶體檔案系統(如 tmpfs)或重啟會清空的目錄。
原因:Slave 需保留臨時檔案以支援重啟後的臨時表複寫與 LOAD DATA INFILE 操作。臨時檔案遺失會導致複寫中斷失敗。
隱藏檔案機制與空間「消失」現象
- MySQL 以隱含方式建立所有臨時檔案(
unlink 後仍開啟,進程結束自動釋放)
- 優點:崩潰自動清理,無殘留垃圾
- 缺點:檔案系統層面不可見,
ls -la /tmp 看不大量佔用空間的臨時檔案
- 排查命令:
lsof | grep mysqld 可見進程持有的已刪除檔案
排序操作臨時空間估算公式
最大磁碟空間 = (排序行長度 + 行指標大小) × 匹配行數 × 2
行指標通常 4 bytes,大表未來可能增加
例:排序 100 萬行,每行 100 bytes → (100+4) × 1,000,000 × 2 ≈ 208 MB 臨時空間
其他臨時空間消費場景
- SELECT 查詢:某些情況建立
SQL_* 前綴的臨時表(非隱含,可見)
- ALTER TABLE:在原表目錄下建立臨時表,完成後重命名替換
運維建議
- 監控
TMPDIR 分區使用率,設定告警閾值(如 80%)
- 大量排序/GROUP BY/大表 ALTER 前預估臨時空間需求
- 複寫 Slave 臨時目錄必須持久化儲存
- 定期檢查
lsof 發現異常殘留的 mysqld 臨時檔案