萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 啟動報 Plugin FEDERATED is disabled 錯誤根因與修復實戰

錯誤現象與日誌分析

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:目錄不存在或無權限),導致存儲引擎註冊失敗。

排查步驟

  1. 確認 tmpdir 配置目錄是否存在且可寫
  2. 檢查 datadir 下 ib_logfile0/1 是否損壞或權限異常
  3. 排除殺毒軟件、磁盤滿、SELinux 等外部因素

實戰修復方案(按成功率排序)

方案一:清理 InnoDB 日誌文件 + 指定 tmpdir(親測有效)

# 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

方案二:清空 datadir 非數據目錄文件(適用遷移/初始化場景)

# 僅保留數據庫目錄(資料夾),刪除 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 日誌完整性,即可徹底修復此類啟動失敗。

copyright © 萬盛學電腦網 all rights reserved