首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 服務啟動報錯 1607 / "unable to create temporary file; errno: 2" 根因與解決:tmpdir 目錄缺失

     編輯:MySQL 綜合教學

錯誤現象

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)**。
  • InnoDB 啟動需創建臨時文件(內部排序、臨時表、雙寫緩衝等),默認目錄由 tmpdir 參數控制。
  • 若 tmpdir 指向的目錄**不存在**、**權限不足**、**磁盤滿**,InnoDB 初始化失敗,導致存儲引擎註冊失敗,服務無法啟動。

解決方案:顯式指定有效 tmpdir

# 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 路徑是否存在且權限正確。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved