損壞徵兆
- 查詢意外中斷。
- 錯誤:
.frm 被鎖定、找不到 .MYI (Errcode: nnn)、檔案意外結束、記錄檔損壞、表處理器錯誤 nnn。
方案一:myisamchk(離線、需停止 mysqld)
# 停止服務
service mysql stop
# 標準修復(解決 99% 問題)
myisamchk -r /path/to/tbl_name
# 若失敗,嘗試強力修復(資料可能遺失)
myisamchk -o /path/to/tbl_name
# 啟動服務
service mysql start
方案二:SQL 指令(線上、加讀取鎖)
-- 檢查
CHECK TABLE tbl_name [, tbl_name] ... [QUICK | FAST | MEDIUM | EXTENDED | CHANGED];
-- 修復
REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... [QUICK] [EXTENDED] [USE_FRM];
QUICK:僅修復索引樹,不掃描資料列(快)。
EXTENDED:逐行重建索引(慢但徹底)。
USE_FRM:若 .MYI 遺失,依 .frm 重建索引定義。
LOCAL/NO_WRITE_TO_BINLOG:不寫入 Binlog,避免主從重放。
選擇建議
- 可接受短暫停機 →
myisamchk -r 最徹底、速度快。
- 7x24 不可停機 →
REPAIR TABLE 線上修復,接受鎖表影響。
- 修復後務必
ANALYZE TABLE 更新統計資訊。