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

MySQL MyISAM 損壞數據恢復實戰:myisamchk 三級修復流程與避坑指南

     編輯:MySQL 資料庫相關知識

MyISAM 表損壞修復完整實戰記錄 (Windows 2003)

環境: Windows 2003, MySQL, 損壞表 function_products (.frm/.MYD/.MYI)。

修復工具:myisamchk

位於 mysql\bin。核心原則: 修復前必須關閉 MySQL 服務,或對檔案副本操作,避免服務同時修改導致崩潰。

三級修復策略 (由快到慢、由輕到重)

  1. 快速修復: myisamchk --recover --quick /path/table — 不修改資料文件,最快,解決常見問題。
  2. 標準修復: myisamchk --recover /path/table — 修改資料文件,修復大多數問題。
  3. 安全修復: myisamchk --safe-recover /path/table — 舊式方法,最慢,處理前兩者無法修復的嚴重損壞。

注意: 若報臨時文件無法建立,刪除殘留臨時文件重試。

實戰操作記錄

# 1. 檢查損壞
myisamchk c:\mysql\data\hw_enterprice\function_products.MYI
-- 警告: Table is marked as crashed, record delete-link-chain corrupted

# 2. 嘗試快速修復
myisamchk --recover --quick c:\mysql\data\hw_enterprice\function_products.MYI
-- 失敗,提示不加 --quick 重試

# 3. 安全修復 (最終成功)
myisamchk --safe-recover c:\mysql\data\hw_enterprice\function_products.MYI
-- Recovering (with keycache)... Data records: 85215
-- Wrong bytesec skipped, 修復完成

修復後複製檔案回 data 目錄,phpMyAdmin 訪問正常,**恢復 85207 條記錄 (原 85215 條)**。

極端損壞的兩大終極招數

1. 索引文件 (.MYI) 遺失/不可修復 → 重建索引

  1. 備份 .MYD 資料文件。
  2. 重啟 MySQL,DELETE FROM tbl_name; (建立新空索引)。
  3. 關閉服務,用備份 .MYD 覆蓋新空資料文件。
  4. 執行標準修復 (策略 2),根據 .frm 結構與資料重建索引。

2. 結構文件 (.frm) 遺失/損壞 → 重建結構

  1. 備份 .MYD、.MYI。
  2. 刪除該表所有檔案。
  3. 啟動 MySQL,用原 CREATE TABLE 語句重建表 (產生新 .frm)。
  4. 執行標準修復。

經驗總結

  • 遇損壞先分析根因 (斷電、kill -9、備份時拷貝等)。
  • 優先用 myisamchk 三級修復,務必備份後操作。
  • 自行動手解決,既長技能又享樂趣。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved