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

MySQL 表故障檢測與修復完整指南:myisamchk 與 isamchk 實戰

     編輯:MySQL 資料庫相關知識

故障處理標準流程

  1. 檢查錯誤:使用工具掃描表,若通過則結束,否則進入修復
  2. 備份檔案:修復前務必複製 .MYD、.MYI、.frm 檔案,防止修復失敗造成資料永久遺失
  3. 執行修復:使用對應工具修復
  4. 備份還原:修復失敗時,從備份或 Binlog 恢復

前置準備與注意事項

  • 備份優先:操作前必須有完整備份與開啟 Binlog
  • 權限控制:Linux 下請以 mysql 系統帳號執行,避免檔案擁有權錯亂
  • 停止服務:檢查/修復期間建議停止 MySQL 服務,避免資料衝突(關鍵)
  • 工具選擇:
    • MyISAM 表(.MYI、.MYD)→ myisamchk
    • ISAM 表(.ISM、.ISD)→ isamchk(舊版本,已少見)

工具基本語法

# 單一表檢查
myisamchk [options] tbl_name
isamchk [options] tbl_name

# 批次檢查(資料庫目錄下)
myisamchk *.MYI
isamchk *.ISM

# 指定路徑批次檢查
myisamchk /path/to/database_dir/*.MYI
myisamchk /path/to/datadir/*/*.MYI  # 所有資料庫所有表

注意:工具不判斷表位置,必須在表檔案目錄執行或指定完整路徑。Windows 平台不支援萬用字元批次操作。

三種檢查層級

1. 標準檢查(預設,推薦日常使用)

myisamchk tbl_name
# 或靜默模式
myisamchk -s tbl_name

可發現 99.99% 的錯誤,僅無法偵測極罕見的純資料檔損壞。速度最快。

2. 完整擴展檢查(深度掃描)

myisamchk -e tbl_name
# 等同
myisamchk --extend-check tbl_name
  • 逐行驗證每個索引鍵是否指向正確資料行
  • 大表、多索引時極其耗時
  • 預設遇第一個錯誤即停止,加 -v 可繼續至 20 個錯誤

3. 中等程度檢查

myisamchk -m tbl_name
# 等同
myisamchk --medium-check tbl_name

介於標準與擴展之間,速度較快但覆蓋率較低,實務上較少使用。

常用輔助選項

選項說明
-i / --information顯示統計資訊(如索引基數、資料長度等)
-C / --check-only-changed僅檢查上次檢查後有變更的表
-v / --verbose詳細輸出模式

修復操作指引

檢查發現錯誤後,依嚴重程度選擇修復模式:

# 快速修復(僅修復索引樹)
myisamchk -r tbl_name

# 完整修復(重建資料檔與索引,較慢但徹底)
myisamchk -r -e tbl_name

# 強制修復(嘗試挽救極度損壞的表)
myisamchk -r -f tbl_name

預防勝於治療

  1. 定期執行 CHECK TABLE 或 myisamchk -s 掃描
  2. 啟用 myisam_recover_options(如 BACKUP,FORCE)讓 MySQL 啟動時自動檢查修復
  3. 監控磁碟空間,避免寫入滿載導致表損壞
  4. 重要資料表建議遷移至 InnoDB,享有崩潰恢復與事務保護

InnoDB 表故障處理

InnoDB 具備自動崩潰恢復機制,不可 使用 myisamchk。若遭遇損壞:

  1. 嘗試 innodb_force_recovery=1..6 分級啟動導出資料
  2. 從備份還原為最佳方案
  3. 嚴重損壞請尋求專業支援
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved