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

MyISAM 表損壞數據恢復實戰總結:myisamchk 深度檢查與修復流程

     編輯:MySQL 資料庫相關知識

案例背景

  • 環境:Windows Server 2003 + MySQL 4.0/4.1
  • 故障表:function_products(MyISAM 引擎)
  • 現象:部分數據損壞,查詢報錯,備份文件同樣受損
  • 文件結構:每表三文件 .frm(結構)、.MYD(數據)、.MYI(索引)

嘗試過的無效方案

第三方工具 MySQLRecovery:數十 MB 數據文件僅恢復出數十 KB,不可用。

官方工具 myisamchk 修復流程

核心原則

  1. 必須停止 MySQL 服務,確保文件獨佔訪問,防止服務崩潰
  2. 修復前備份:複製 .MYD、.MYI 到安全位置
  3. 僅對 .MYI 索引文件操作,數據文件 .MYD 不會被覆寫

常用命令

# 進入數據目錄
cd C:\mysql\data\hw_enterprice

# 1. 普通檢查
myisamchk function_products.MYI

# 2. 深度檢查(慢但徹底)
myisamchk --extend-check function_products.MYI

# 3. 自動修復(安全模式,僅修復索引)
myisamchk --recover --quick function_products.MYI

# 4. 強力修復(重建索引,耗時較長)
myisamchk --recover function_products.MYI

# 5. 極度損壞時嘗試(最後手段)
myisamchk --safe-recover function_products.MYI

批量檢查/修復

# 檢查某庫所有表
myisamchk C:\mysql\data\dbname\*.MYI

# 檢查所有庫所有表
myisamchk C:\mysql\data\*\*.MYI

實戰操作記錄(節選)

C:\> cd mysql\data\hw_enterprice
C:\mysql\data\hw_enterprice> myisamchk --recover function_products.MYI
- recovering (with sort) MyISAM-table 'function_products.MYI'
Data records: 12345
- Fixing index 1
- Fixing index 2
...
OK

修復完成後啟動 MySQL 服務,驗證 CHECK TABLE function_products 返回 OK,業務查詢恢復正常。

關鍵經驗總結

  1. 定期備份:損壞發生後才發現備份也壞,需異地、多版本備份
  2. 監控磁盤健康:斷電、殺進程、磁盤壞道是主要誘因
  3. 避免殺 -9:優雅關閉 mysqladmin shutdown 或 service mysqld stop
  4. 考慮 InnoDB:事務引擎具備崩潰恢復能力,MyISAM 無此機制
  5. 升級版本:MySQL 5.6+ REPAIR TABLE 內建並行修復,效率更高

參考命令速查表

目的命令
普通檢查myisamchk tbl_name.MYI
深度檢查myisamchk --extend-check tbl_name.MYI
快速修復myisamchk --recover --quick tbl_name.MYI
標準修復myisamchk --recover tbl_name.MYI
安全修復myisamchk --safe-recover tbl_name.MYI
強制覆蓋myisamchk --recover --force tbl_name.MYI
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved