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

MySQL 表損壞檢測與修復完整手冊:myisamchk/isamchk 實戰指南

     編輯:MySQL 資料庫相關知識

標準故障處理流程

  1. 檢查:確認表是否損壞
  2. 備份:修復前複製 .MYD, .MYI, .frm 到安全位置
  3. 修復:執行修復指令
  4. 驗證/恢復:修復失敗則從備份/ Binlog 恢復

前置準備(關鍵)

  • 啟用 log-bin 與定期 mysqldump 備份
  • Unix 下以 mysql 系統用戶操作,避免檔案權限錯亂
  • 讀完本文再動手,切勿盲目執行

工具選擇:myisamchk vs isamchk

工具適用引擎檔案後綴
myisamchk MyISAM .MYD (數據), .MYI (索引)
isamchk ISAM (舊版) .ISD, .ISM

現代環境幾乎全為 MyISAM/InnoDB,重點掌握 myisamchk。

檢查模式三層級

模式指令特點適用場景
標準檢查(預設) myisamchk tbl_name 快,發現 99.99% 錯誤 日常巡檢、首輪排查
中等檢查 myisamchk -m tbl_name 速度/深度折中 較少使用
擴展檢查(深度) myisamchk -e tbl_name 逐行驗證索引指向,極慢 懷疑數據檔損壞、標準檢查無錯但業務異常

常用組合:myisamchk -e -i tbl_name(深度檢查+統計資訊)

批量檢查指令

# 當前資料庫目錄下所有表
myisamchk *.MYI

# 指定路徑
myisamchk /var/lib/mysql/db_name/*.MYI

# 所有資料庫(Linux)
myisamchk /var/lib/mysql/*/*.MYI

修復模式

# 1. 快速修復(僅修復索引樹)
myisamchk --recover --quick tbl_name

# 2. 標準修復(重建索引,保留數據)
myisamchk --recover tbl_name

# 3. 強力修復(嘗試恢復數據行,極慢)
myisamchk --safe-recover tbl_name

# 4. 強制修復(覆蓋臨時檔,慎用)
myisamchk --recover --force tbl_name

線上修復協議(配合內部鎖定,不停服務)

# 僅檢查
mysql -e "LOCK TABLES tbl READ; FLUSH TABLES;"
myisamchk tbl
mysql -e "UNLOCK TABLES;"

# 修復(需寫鎖 + 備份 + 刷新)
mysql -e "LOCK TABLES tbl WRITE; FLUSH TABLES;"
cp tbl.* /backup/
myisamchk --recover tbl
mysql -e "FLUSH TABLES; UNLOCK TABLES;"

InnoDB 表損壞處理

  • InnoDB 有崩潰恢復機制,重啟通常自動修復。
  • 嚴重損壞:innodb_force_recovery = 1..6 分級導出數據,重建表。
  • 工具:innochecksum 校驗頁面檢查和,mysqlcheck --check --all-databases 統一介面。

總結

MyISAM 表損壞不可怕,關鍵在於備份優先、分級檢查、標準修復、線上協議。生產環境強烈建議遷移至 InnoDB,享受 ACID 與自動崩潰恢復。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved