伺服器意外斷電導致 MySQL 無法啟動,若資料表使用 InnoDB 引擎,單純複製 .frm/.ibd 檔案無法恢復,必須連同 ibdata1 系統表空間檔案一起遷移。本文提供標準恢復流程。
.MYD/.MYI,可直接複製檔案恢復。ibdata1(或獨立 .ibd),缺少 ibdata1 會導致表結構找不到資料字典,報錯「Table doesn't exist」。# 1. 停止 MySQL 服務
service mysqld stop
# 2. 進入備份目錄
cd /home/mysql_bak/mysql/
# 3. 複製關鍵檔案至新資料目錄
cp ibdata1 /usr/local/mysql/data/ibdata1
chown mysql:mysql /usr/local/mysql/data/ibdata1
# 4. 刪除舊日誌檔(關鍵:尺寸不符會阻止啟動)
rm /usr/local/mysql/data/ib_logfile0
rm /usr/local/mysql/data/ib_logfile1
# 5. 啟動服務
service mysqld start
| 檔案 | 用途 | 備份必要性 |
|---|---|---|
ibdata1 | InnoDB 系統表空間:資料字典、Undo Log、雙寫緩衝、插入緩衝 | 必備 |
ib_logfile0/1 | Redo Log(循環寫入),崩潰恢復用 | 不備份,啟動時自動重建 |
.frm | 表結構定義 | 必備 |
.ibd | 獨立表空間資料(啟用 innodb_file_per_table 時) | 必備 |
mysqldump --single-transaction --master-data=2 產出 SQL 檔,跨版本、跨架構可靠度最高。.ibd,便於單表遷移與空間回收。斷電恢復屬於災難恢復範疇,ibdata1 是 InnoDB 核心,缺一不可。建立「邏輯備份為主、物理備份為輔、定期演練」的備份體系,才是應對資料遺失風險的根本之道。