Windows 服務管理器中啟動 MySQL 服務失敗,彈窗提示:Error 1067: The process terminated unexpectedly。事件查看器記錄無具體錯誤,錯誤日誌 `.err` 可能為空或截斷。
MySQL 運行時在 `C:\Windows\Temp` 產生大量臨時文件 (如 `MYxxxx.tmp`、排序文件、內部臨時表)。長期運行未清理,文件數達十萬級,導致:
嚴禁用資源管理器打開該目錄刪除 (會卡死 Explorer 甚至整台伺服器)。
# 以管理員身份打開 CMD
cd /d C:\Windows\Temp
del /f /q /s MY*.tmp
del /f /q /s *.tmp
# 或使用更安全的模式匹配
forfiles /p "C:\Windows\Temp" /m "MY*.tmp" /c "cmd /c del @path" /d -1
等待命令完成 (可能需數分鐘),隨後重啟 MySQL 服務即可恢復。
建立 `clean_mysql_temp.bat`:
@echo off
cd /d C:\Windows\Temp
del /f /q MY*.tmp >nul 2>&1
del /f /q *.tmp >nul 2>&1
echo %date% %time% MySQL Temp cleaned >> C:\Logs\clean_mysql_temp.log
任務計劃程式 → 建立基本任務 → 每日/每週觸發 → 動作:啟動程式 `clean_mysql_temp.bat` → 勾選「使用最高權限運行」。
將 `tmpdir` 指向專用磁碟 (非 C 盤),便於管理且不影響系統:
[mysqld]
tmpdir = D:/MySQL/tmp
# 確保目錄存在且 MySQL 服務帳號有讀寫權限
mkdir D:\MySQL\tmp
icacls D:\MySQL\tmp /grant "NT SERVICE\MySQL":(OI)(CI)F
重啟服務生效。此舉將臨時文件隔離,避免污染系統盤,且可單獨監控該目錄大小與文件數。
[mysqld]
tmp_table_size = 64M
max_heap_table_size = 64M
# 讓更多臨時表留在記憶體,減少 Temp 目錄寫入
| 檢查項 | 命令/位置 | 常見問題 |
|---|---|---|
| 錯誤日誌 | `datadir\hostname.err` | InnoDB 恢復失敗、權限表損壞、配置語法錯誤 |
| 配置檔語法 | `mysqld --help --verbose 2>&1 | findstr -i error` | 參數拼寫錯誤、路徑含特殊字符、編碼非 UTF-8 |
| Port 佔用 | `netstat -ano | findstr 3306` | 殘留進程、多實例衝突 |
| 資料目錄權限 | `icacls datadir` | 服務帳號無讀寫權限 |
| 磁碟空間 | `wmic logicaldisk get size,freespace,caption` | C 盤滿、Temp 目錄爆炸 |
| 依賴服務 | Services.msc | 依賴的服務未啟動 |
Error 1067 多為環境層面問題而非 MySQL 核心 Bug。**C:\Windows\Temp 垃圾文件堆積是 Windows 部署 MySQL 的高發隱患**。根治核心:隔離 tmpdir 至專用盤 + 定時清理腳本 + 監控告警。遇到啟動失敗,先看錯誤日誌,再查環境資源,切勿盲目重裝。