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

MySQL 部分資料損壞恢復實戰:myisamchk 修復流程完整記錄

     編輯:MySQL 資料庫相關知識

事故背景

  • 環境:Windows Server 2003 + MySQL
  • 損壞表:function_products(MyISAM)
  • 症狀:查詢報錯、備份檔同樣損壞

損壞成因分析

  • 意外斷電 / kill -9 強制終止 MySQL 進程
  • 高負載下強制備份導致檔案寫入中斷
  • 檔案系統錯誤
關鍵認知:損壞發生時若不知情,後續備份會同步損壞資料,導致所有備份皆不可用。

修復核心原則

  1. 必須停止 MySQL 服務,確保 myisamchk 獨佔存取
  2. 修復前務必備份 原始檔案(.frm、.MYD、.MYI)
  3. 在檔案副本上操作,驗證無誤後再替換原檔

MyISAM 檔案結構

檔案用途
tbl_name.frm表定義(欄位、型別、索引結構)
tbl_name.MYD資料檔案
tbl_name.MYI索引檔案

myisamchk 檢查與修復命令

1. 基本檢查

myisamchk /path/to/db/tbl_name
myisamchk /path/to/db/tbl_name.MYI

2. 檢查所有表

myisamchk /path/to/db/*.MYI
myisamchk /path/to/data/*/*.MYI

3. 深度檢查(較慢但更徹底)

myisamchk --extend-check /path/to/tbl_name

4. 修復模式(由輕到重)

# 快速修復(僅修復索引樹)
myisamchk --recover --quick /path/to/tbl_name

# 標準修復(重建索引、修復資料)
myisamchk --recover /path/to/tbl_name

# 強力修復(嘗試恢復所有可讀資料行)
myisamchk --safe-recover /path/to/tbl_name

# 極端修復(強制修復,可能丟失資料)
myisamchk --recover --force /path/to/tbl_name

Windows 環境實操步驟

  1. 開啟 CMD,切換至 MySQL bin 目錄
  2. 停止 MySQL 服務:net stop mysql
  3. 備份損壞表三個檔案至安全位置
  4. 執行修復:myisamchk --recover --quick "C:\mysql\data\dbname\function_products"
  5. 若無效,升級嘗試 --safe-recover、--recover --force
  6. 修復完成後啟動 MySQL 驗證

預防措施

  • 定期執行 CHECK TABLE / myisamchk 掃描
  • 備份策略:完整備份 + 二進制日誌,支援 PITR
  • 避免 kill -9,使用 mysqladmin shutdown 優雅停機
  • 重要表考慮遷移至 InnoDB,獲得崩潰自動恢復能力
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved