非預期斷電造成 InnoDB 系統表空間 (ibdata1) 與重做日誌 (ib_logfile0/1) 損壞,服務報 1067 進程終止。若有可用 mysqldump 邏輯備份,按下列流程可在數分鐘內恢復服務 (資料以備份時間點為準)。
net start mysql → 1067 錯誤彈窗 (對應截圖 1)。mysqld 進程已完全停止。rename C:\mysql\data C:\mysql\data_bak_20240115 (對應截圖 2:刪除用戶資料庫檔案與 ib_logfile*)。datadir):del ibdata1 ib_logfile0 ib_logfile1 (對應截圖 3:刪除 ibdata1)。mysql -uroot -p < backup_20240114.sql (對應截圖 5:導入中)。SHOW TABLES; SELECT COUNT(*) FROM key_table; (對應截圖 6:資料正常)。mysql.user、mysql.db 等權限表會重置為初始狀態,需從備份恢復或重建帳號。REPAIR TABLE。| 層面 | 措施 | 效果 |
|---|---|---|
| 硬體 | UPS 不斷電系統 + 優雅關閉腳本 | 斷電時緩衝 5-15 分鐘,觸發 mysqladmin shutdown |
| 備份 | 每日 mysqldump + 每小時 XtraBackup 增量 | RPO ≤ 1 小時,RTO ≤ 30 分鐘 |
| 架構 | 主從複制 + 從庫唯讀 + 延遲從庫 (1 小時) | 主庫掛掉秒級切換,延遲從庫防誤操作 |
| 參數 | innodb_flush_log_at_trx_commit=1, sync_binlog=1, innodb_doublewrite=ON | 極大降低損壞機率 |
| 監控 | 進程存活、錯誤日誌關鍵字、磁碟空間、備份成功率 | 第一時間發現異常 |
若無備份或需嘗試搶救近期資料,可在 my.cnf 加入:
[mysqld]
innodb_force_recovery = 1 # 從 1 嘗試到 4,4 以上極高風險
啟動後嘗試 mysqldump 導出核心表,成功則按上述流程重建再導入。嚴禁在 force_recovery > 0 時寫入資料。