斷電/殺進程導致 InnoDB 系統表空間 (ibdata1) 或重做日誌 (ib_logfile0/1) 損壞,服務啟動報 1067 進程意外終止。若無可用備份,唯一出路:刪除損壞檔案、讓 MySQL 重新初始化系統表空間、再導入邏輯備份。
net start mysql
# 系統發生 1067 錯誤
# 錯誤日誌顯示:
# InnoDB: Database was not shut down normally!
# InnoDB: Starting crash recovery...
# InnoDB: Error: space header page consists of zero bytes
# InnoDB: Corruption of log file...
net stop mysql / systemctl stop mysqld。mv /var/lib/mysql /var/lib/mysql_bak_$(date +%F)datadir 下):rm -f ibdata1 ib_logfile0 ib_logfile1mysql.*),MyISAM 表不受影響。ibdata1、ib_logfile*、系統表。systemctl start mysqldmysql -uroot -p < full_backup.sqlSHOW DATABASES; SHOW TABLES; SELECT COUNT(*) FROM key_tables;| 檔案 | 作用 | 刪除後果 |
|---|---|---|
| ibdata1 | 系統表空間:資料字典、Undo Log、雙寫緩衝、插入緩衝、部分用戶表資料 (未啟用 file_per_table) | 所有 InnoDB 表結構與資料遺失 |
| ib_logfile0/1 | Redo Log (重做日誌),環狀寫入,崩潰恢復核心 | 啟動時重建,無資料遺失 (若 ibdata1 完整) |
| *.ibd | 獨立表空間 (file_per_table=ON 時) | 不刪除,保留用戶表資料 |
mysqldump --single-transaction --master-data=2 --routines --triggers --events --all-databases。expire_logs_days=7,配合 sync_binlog=1 確保不丟事務。innodb_doublewrite=ON (預設),防止半寫頁。innodb_force_recovery = 1..6 (漸進式),嘗試 mysqldump 導出資料。