首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MyISAM 表損壞修復指南:myisamchk -r/-o 與 CHECK/REPAIR TABLE 兩套方案

     編輯:MySQL 資料庫相關知識

損壞徵兆

  • 查詢意外中斷。
  • 錯誤:.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 更新統計資訊。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved