故障處理標準流程
- 檢查表錯誤 → 通過則結束,否則進入修復。
- 修復前必備份表檔 (.MYD/.MYI 或 .ISD/.ISM) 以防修復失敗資料全損。
- 執行修復。
- 修復失敗則從備份或 Binlog 恢復。
工具選擇
- myisamchk:MyISAM 表 (.MYI 索引、.MYD 資料)。
- isamchk:ISAM 表 (.ISM、.ISD) (舊版遺留,現少用)。
基本用法
# 檢查/修復單表
myisamchk [options] tbl_name
# 批次處理整庫
myisamchk [options] /path/to/db_dir/*.MYI
# 所有庫所有表
myisamchk [options] /path/to/datadir/*/*.MYI
三種檢查層級
| 層級 | 參數 | 特點 |
| 標準 (預設) | 無 / -s / --silent | 發現 99.99% 錯誤,速度快,不檢查資料檔損壞 |
| 中等 | -m / --medium-check | 比標準徹底,比擴展快,較少用 |
| 擴展 (最徹底) | -e / --extend-check | 逐行逐鍵驗證,極慢,大表慎用,搭配 -v 顯示前 20 錯誤 |
常用輔助參數
-i, --information:輸出統計資訊 (索引基數、資料長度等)。
-C, --check-only-changed:僅檢查上次檢查後被修改的表。
-v, --verbose:詳細輸出。
修復操作
# 標準修復 (保留資料)
myisamchk --recover tbl_name
# 或
myisamchk -r tbl_name
# 強力修復 (若標準失效,可能丟資料)
myisamchk --safe-recover tbl_name
# 或
myisamchk -o tbl_name
# 強制修復 (覆蓋臨時檔)
myisamchk --force --recover tbl_name
關鍵注意事項 (必讀)
- 停止 MySQL 服務 或確保無連線存取該表 (建議停庫),否則工具與 Server 同時操作檔案會導致索引損壞。
- 以 mysql 使用者身份執行,避免檔案擁有權變更導致 Server 無法讀寫。
- Windows 平台無法使用通配符路徑,需逐一指定檔案。
- 修復前 複製 .MYD/.MYI 到安全位置。
SQL 層面檢查與修復 (無需停庫)