MySQL 服務啟動失敗,系統日誌顯示「服務意外停止」,MySQL 錯誤日誌關鍵信息:
121012 11:35:03 [Note] Plugin 'FEDERATED' is disabled.
121012 11:35:03 InnoDB: Error: unable to create temporary file; errno: 2
121012 11:35:03 [ERROR] Plugin 'InnoDB' init function returned error.
121012 11:35:03 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
121012 11:35:03 [ERROR] Unknown/unsupported table type: INNODB
121012 11:35:03 [ERROR] Aborting
核心原因:FEDERATED 提示僅是提示,真正阻塞啟動的是 InnoDB 無法創建臨時文件(errno 2:目錄不存在或無權限),導致存儲引擎註冊失敗。
tmpdir 配置目錄是否存在且可寫datadir 下 ib_logfile0/1 是否損壞或權限異常# 1. 停止服務
systemctl stop mysqld
# 2. 備份並刪除損壞日誌文件
mv /var/lib/mysql/ib_logfile0 /var/lib/mysql/ib_logfile0.bak
mv /var/lib/mysql/ib_logfile1 /var/lib/mysql/ib_logfile1.bak
# 3. 配置 my.cnf 指定臨時目錄
[mysqld]
tmpdir = /tmp/mysql_tmp # 確保目錄存在且 mysql 用戶可寫
innodb_log_file_size = 128M # 可選,重建日誌文件大小
# 4. 創建臨時目錄並授權
mkdir -p /tmp/mysql_tmp
chown mysql:mysql /tmp/mysql_tmp
chmod 750 /tmp/mysql_tmp
# 5. 啟動服務
systemctl start mysqld
# 僅保留數據庫目錄(資料夾),刪除 ibdata1、ib_logfile*、auto.cnf 等
ls -la /var/lib/mysql/
# 保留:mysql/、performance_schema/、你的業務庫目錄
# 刪除:ibdata1, ib_logfile0, ib_logfile1, ibtmp1, auto.cnf 等
⚠️ 警告:此操作將導致 InnoDB 系統表空間重建,所有 InnoDB 表數據將丟失,僅適用於可重新導入數據的環境。
# 檢查磁盤空間
df -h /var/lib/mysql
# 修正目錄擁有者
chown -R mysql:mysql /var/lib/mysql
chmod 750 /var/lib/mysql
tmpdir,避免依賴系統默認 /tmp(可能被清理或掛載 noexec)innodb_log_file_size 與磁盤空間,防止日誌寫滿mysql -e "SHOW ENGINES;" | grep InnoDB
# 應顯示 DEFAULT 或 YES
解決臨時文件目錄權限與 InnoDB 日誌完整性,即可徹底修復此類啟動失敗。