萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL "Incorrect key file for table: Try to repair it" 表損壞修復全流程

MyISAM 表損壞:徵兆、成因與修復實戰

MyISAM 表易因斷電、強制關機、磁碟壞軌、進程崩潰導致索引檔 (.MYI) 損壞。

典型徵兆

  • Incorrect key file for table: '...'. Try to repair it
  • Table 'tbl' is marked as crashed and should be repaired
  • Can't open file: 'tbl.MYI' (errno: 145)
  • 查詢回傳不完整資料或找不到行

修復工具對比

工具適用場景指令範例優缺點
REPAIR TABLE輕度損壞、線上修復REPAIR TABLE tbl_name;簡單、無需停機、嚴重損壞可能失敗
myisamchk嚴重損壞、離線深度修復myisamchk --recover /path/tbl.MYI功能強大、需停服務、無法修復 .frm 損壞
phpMyAdmin圖形介面操作點選表 → 操作 → 修復表直觀、底層仍呼叫 REPAIR TABLE

myisamchk 深度修復流程

  1. 停止 MySQL:service mysql stop
  2. 進入 bin 目錄:cd /usr/local/mysql/bin
  3. 檢查損壞程度:
myisamchk /var/lib/mysql/db_name/tbl_name.MYI
  1. 執行修復:
myisamchk --recover /var/lib/mysql/db_name/tbl_name.MYI
# 或修復整庫
myisamchk --recover /var/lib/mysql/db_name/*.MYI
  1. 啟動驗證:service mysql start → CHECK TABLE tbl_name;

phpMyAdmin 修復步驟

  1. 進入資料庫 → 選擇問題表
  2. 底部「操作」或「維護」區 → 點擊「修復表」
  3. 觀察結果:OK 或 already up to date

預防機制

  • 關鍵表改用 **InnoDB**(支援崩潰恢復、雙寫緩衝)
  • 設定 myisam_recover_options=FORCE,BACKUP 自動修復備份
  • 定期 CHECK TABLE + 備份驗證
  • UPS 電源保護、優雅關機腳本

極端情況: 若 .frm (表定義) 損壞,myisamchk 無能為力。唯一出路:從備份恢復 .frm + .MYD,重建索引。這也是**「備份是最後防線」**的鐵證。

copyright © 萬盛學電腦網 all rights reserved