Windows 服務管理器啟動 MySQL 失敗,彈窗 Error 1607: Unable to install service 或啟動後立即停止。
錯誤日誌 .err 關鍵行:
InnoDB: Error: unable to create temporary file; errno: 2 [ERROR] Plugin 'InnoDB' init function returned error. [ERROR] Unknown/unsupported storage engine: INNODB Aborting
errno: 2 = **ENOENT (No such file or directory)**。tmpdir 參數控制。tmpdir 指向的目錄**不存在**、**權限不足**、**磁盤滿**,InnoDB 初始化失敗,導致存儲引擎註冊失敗,服務無法啟動。# my.ini [mysqld] 節點下添加 tmpdir="D:/MySQL/tmp" # 必須預先創建該目錄 # 或 Linux tmpdir=/data/mysql/tmp
然後手動創建目錄並授權:
# Windows mkdir D:\MySQL\tmp icacls D:\MySQL\tmp /grant "NT SERVICE\MySQL56:(OI)(CI)F" # Linux mkdir -p /data/mysql/tmp chown mysql:mysql /data/mysql/tmp
其他同類報錯排查清單
| 報錯 | 可能原因 | 排查命令 |
|---|---|---|
| errno: 13 (Permission denied) | 目錄權限不足 | ls -ld /tmp / icacls |
| errno: 28 (No space left) | 磁盤/分區滿 | df -h / 磁盤管理 |
| ib_logfile 損壞/版本不匹配 | 遷移/升級殘留 | 刪除 ib_logfile* 重啟 |
| datadir 權限/SELinux | 遷移後未授權 | ls -Z /var/lib/mysql |
| 端口衝突 | 3306 被佔用 | netstat -tlnp | grep 3306 |
1. **生產環境顯式配置 tmpdir** 至專用目錄(非系統 /tmp),避免被清理腳本誤刪、權限變更。
2. **監控 tmpdir 磁盤空間**,大排序/臨時表可能瞬間佔用百 GB。
3. **Windows 服務啟動失敗優先看 .err 日誌**,Event Viewer 信息往往不全。
4. **遷移/升級後必檢**:datadir、tmpdir、log-error、pid-file、socket 路徑是否存在且權限正確。