錯誤現象
[ERROR] Default storage engine (InnoDB) is not available
[ERROR] Aborting
根因:配置衝突
# my.cnf / my.ini 中同時存在:
default-storage-engine=INNODB
skip-innodb
default-storage-engine=INNODB 指定預設建表引擎為 InnoDB。
skip-innodb 禁用 InnoDB 引擎載入。
- 兩者衝突 → MySQL 無法確定預設引擎 → 拒絕啟動。
三種修復方案 (任選一)
| 方案 | 適用場景 | 操作 |
| 方案 A:移除 skip-innodb (保留 InnoDB) | 需要事務、行鎖、外鍵、崩潰恢復 | 註釋或刪除 skip-innodb,重啟 |
| 方案 B:修改預設引擎為 MyISAM (禁用 InnoDB) | 純讀/唯讀/舊系統相容、不需事務 | default-storage-engine=MYISAM,保留 skip-innodb,重啟 |
| 方案 C:移除 default-storage-engine (使用編譯時預設) | 不確定業務需求、讓 MySQL 決定 | 刪除 default-storage-engine 行,重啟 |
驗證啟動後狀態
mysql -u root -p -e "SHOW ENGINES;"
# Engine | Support | Comment | Transactions | XA | Savepoints
# InnoDB | DEFAULT | ... | YES | YES| YES
# MyISAM | YES | ... | NO | NO | NO
附帶清理:禁用 InnoDB 後的檔案處理
# 確認已用 skip-innodb 且 default-storage-engine!=InnoDB
# 可安全刪除 (釋放空間)
rm -f /var/lib/mysql/ibdata1 /var/lib/mysql/ib_logfile*
# 重啟後不會自動重建
若未加 skip-innodb 直接刪除 ibdata1/ib_logfile*,MySQL 會自動重建 (見錯誤日誌 "InnoDB: a new database to be created!"),但原有 InnoDB 表資料永久遺失。
版本差異提醒
- MySQL 5.5-5.6:
skip-innodb 仍支援,但官方不建議禁用 InnoDB。
- MySQL 5.7+:
skip-innodb 已廢棄,InnoDB 為唯一內建事務引擎,強制載入。
- MySQL 8.0:完全移除
skip-innodb 選項,InnoDB 核心化,不可禁用。
現代 MySQL (5.7+) 架構已將 InnoDB 定位為核心,建議擁抱 InnoDB 而非嘗試禁用。若確有唯讀分析場景,考慮 ColumnStore (MariaDB) 或專用 OLAP 引擎 (ClickHouse/Doris),而非退回 MyISAM。