MySQL 啟動失敗、報錯 InnoDB feature is disabled 或 Default storage engine (InnoDB) is not available,常由配置衝突、文件損壞、權限問題引起。本文提供系統排查樹、配置修復、數據恢復、遷移重建全流程指南。
| 錯誤日誌關鍵字 | 直接原因 | 快速修復 |
|---|---|---|
'InnoDB' feature is disabled | 配置文件含 skip-innodb 或 ignore-builtin-innodb | 註釋或刪除該行,重啟 |
Default storage engine (InnoDB) is not available | default-storage-engine=InnoDB + skip-innodb 同時存在 | 改 default-storage-engine=MyISAM 或啟用 InnoDB |
ibdata1: unable to open | 數據文件缺失、權限不足、磁盤滿 | 恢復文件、修權限、清理空間 |
log file .ib_logfile0 is of different size | 修改 innodb_log_file_size 後未刪舊日誌 | 停庫,刪 ib_logfile*,重啟 |
InnoDB: corruption | 表空間損壞 | innodb_force_recovery=1..6 導出數據重建 |
tail -100 /var/log/mysql/error.log(或 .err)。grep -n "innodb\|skip-" /etc/my.cnf /etc/mysql/my.cnf。ls -l /var/lib/mysql/ibdata* /var/lib/mysql/ib_logfile*,擁有者需為 mysql:mysql。df -h /var/lib/mysql,確保 > 10% 剩餘。ausearch -m avc -ts recent 或臨時 setenforce 0 驗證。# my.ini / my.cnf
[mysqld]
default-storage-engine=INNODB # 默認引擎要求 InnoDB
skip-innodb # 卻禁用 InnoDB → 衝突
修復:註釋 # skip-innodb 或改 default-storage-engine=MYISAM。若確需禁用 InnoDB 節省資源,務必同步修改默認引擎。
systemctl stop mysqldmv /var/lib/mysql/ib_logfile* /backup/innodb_log_file_size = 256MSetting log file size to 256 MB。[mysqld]
innodb_force_recovery = 1 # 1=SRV_FORCE_IGNORE_CORRUPT, 6=SRV_FORCE_NO_UNDO_LOG_SCAN
# 遞增 1→6 直到 mysqldump 成功導出所有表
導出後:刪除 ibdata1, ib_logfile*,移除 innodb_force_recovery,重啟建立新表空間,再導入數據。
[mysqld]
innodb_data_home_dir = /new_disk/mysql/data
innodb_data_file_path = ibdata1:100M:autoextend
innodb_log_group_home_dir = /new_disk/mysql/logs
停庫 → 複制整個 datadir → 修改配置 → 啟動。
my.ini(安裝目錄或 C:\ProgramData\MySQL\MySQL Server 8.0\)。net stop mysql / net start mysql 或服務管理器。C:/mysql/data 或 C:\\mysql\\data 雙反斜桿。Innodb_data_pending_fsyncs、Innodb_log_waits 異常飆升。CHECK TABLE、ANALYZE TABLE 發現早期損壞。xtrabackup 熱備份 + mysqldump 邏輯備份雙軌制。