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

MySQL 表損壞檢測與修復標準流程:myisamchk/isamchk 實戰手冊

     編輯:MySQL 資料庫相關知識

標準處理流程圖

檢查表 → [通過] 結束
       → [失敗] 備份 .MYD/.MYI/.frm → 修復 → [成功] 結束
                                    → [失敗] 從備份/Binlog 還原

前置必要動作

  1. 建立備份: cp -a /var/lib/mysql/db/tbl.* /backup/
  2. 停止寫入: FLUSH TABLES tbl WITH READ LOCK 或停止服務。
  3. 使用 mysql 系統帳號操作 (Linux): 避免檔案擁有權錯亂。

工具選擇

引擎工具索引檔資料檔
MyISAMmyisamchk.MYI.MYD
ISAM (舊)isamchk.ISM.ISD
InnoDBinnodb_force_recovery / 重做日誌不適用 myisamchk

myisamchk 檢查模式對比

修復指令

# 安全修復 (保留資料檔,重建索引)
myisamchk -r tbl

# 強力修復 (重建資料檔,可能丟失資料)
myisamchk -o tbl

# 自動模式 (檢查失敗才修復)
myisamchk -a tbl

批次操作技巧

# 檢查整個資料庫目錄
myisamchk /var/lib/mysql/mydb/*.MYI

# 檢查所有資料庫
myisamchk /var/lib/mysql/*/*.MYI

實用參數

  • -v 詳細輸出 (最多 20 錯誤後停止)。
  • -i 顯示統計資訊 (記錄數、索引長度、碎片率)。
  • --sort-buffer-size=256M --key-buffer-size=512M 大表加速修復。

InnoDB 損壞處理 (補充)

  1. innodb_force_recovery=1..6 分級啟動讀取資料。
  2. 用 mysqldump 導出 → 重建表 → 匯入。
  3. 嚴重時從備份還原 + Binlog PITR。

預防勝於治療

  1. 啟用 innodb_checksum_algorithm=crc32 (預設)。
  2. 定期 CHECK TABLE / mysqlcheck -A --auto-repair。
  3. 硬體層面:ECC 記憶體、RAID、UPS、定期 smartctl 檢測磁碟健康。

MyISAM 修復相對直觀,但生產環境強烈建議全面遷移至 InnoDB,享受崩潰自動恢復與 ACID 保障。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
模式指令深度耗時適用
標準myisamchk tbl99.99% 錯誤快日常巡檢
擴展myisamchk -e tbl逐鍵逐列驗證慢 (大表小時級)懷疑資料損壞
中等myisamchk -m tbl折中中較少用
僅檢查變更表myisamchk -C tbl上次檢查後有寫入極快定時任務