MyISAM 表易損壞,手工 myisamchk 繁瑣。MySQL 提供 myisam_recover_options(舊名 myisam-recover)實現啟動時自動檢測修復。本文詳解四大選項組合策略與配置最佳實踐。
myisam-recover(5.0 文檔)myisam_recover_options(5.1+,官方手冊)myisam_recover_options=BACKUP,FORCE| 選項 | 行為 | 適用場景 |
|---|---|---|
DEFAULT | 不啟用自動修復(等同不設定) | 生產極度謹慎、需人工介入 |
BACKUP | 修復前將 .MYD 備份為 .BAK(含時間戳) | 強烈建議開啟,保留現場 |
FORCE | 即使丟失多行也強制修復 | 優可用性、接受極少數據丟失 |
QUICK | 無刪除塊時跳過行掃描,加快修復 | 大表、時間敏感、數據相對乾淨 |
| 策略 | 配置值 | 特點 |
|---|---|---|
| 保守穩健 | BACKUP | 僅備份不自動修復,啟動報錯需人工介入 |
| 生產推薦 | BACKUP,FORCE | 備份現場+自動修復,極少數據丟失換取高可用 |
| 極致可用 | BACKUP,FORCE,QUICK | 最快啟動,但可能掩蓋深層損壞 |
[mysqld]
myisam_recover_options=BACKUP,FORCE
BACKUP 產生的 .BAK 文件佔用磁盤,需定期清理。myisamchk -r 或恢復備份。# 檢查
myisamchk -c /path/to/table
# 標準修復
myisamchk -r /path/to/table
# 安全修復(更慢但更穩)
myisamchk --safe-recover /path/to/table
自動修復是「安全網」,不是「銀彈」。核心策略:監控告警發現損壞 → 立即人工介入 → 根因分析 → 遷移 InnoDB。