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

MySQL MyISAM 表損壞修復實戰記錄

     編輯:MySQL 資料庫相關知識

事件背景

Windows Server 2003 環境下,MySQL 資料庫 function_products 表發生資料損壞。嘗試第三方工具 MySQLrecovery 效果不佳,數十 MB 資料僅恢復數十 KB。改用 MySQL 內建 myisamchk 進行修復,最終成功恢復 85,207 筆記錄(共 85,215 筆)。

MyISAM 表檔案結構

每張表對應三個實體檔案:

  • .frm:表結構定義(欄位、型別、索引等)
  • .MYD:資料檔
  • .MYI:索引檔

修復前準備

  1. 停止 MySQL 服務,避免 myisamchk 檢查時服務同時修改檔案導致誤判或崩潰。
  2. 備份原始三個檔案(.frm、.MYD、.MYI)至安全位置。

檢查與修復步驟

1. 基本檢查

myisamchk /路徑/到/表名.MYI

若懷疑錯誤但基本檢查無發現,可加 --extend-check 執行深度掃描(較慢)。

2. 三階段修復策略

由快到慢、由輕到重:

# 階段 1:快速修復(最常見問題)
myisamchk --recover --quick /路徑/到/表名.MYI

# 階段 2:標準修復
myisamchk --recover /路徑/到/表名.MYI

# 階段 3:安全修復(最慢,處理棘手損壞)
myisamchk --safe-recover /路徑/到/表名.MYI

本案例中,快速修復失敗提示 record delete-link-chain corrupted,改用 --safe-recover 成功修復。

3. 索引檔遺失或無法修復時的替代方案

  • 備份 .MYD,重啟 MySQL 並 DELETE FROM 表名 建立新索引檔,停止服務後用備份 .MYD 覆蓋,再執行標準修復重建索引。
  • 若 .frm 遺失,但知 CREATE TABLE 語句,可重建表產生新 .frm,再配合資料與索引檔修復。

修復後驗證

將修復完成的三個檔案複製回 MySQL\data 目錄,啟動服務,透過 phpMyAdmin 存取測試,資料正常讀寫,修復宣告成功。

經驗總結

  • 遇到損壞先分析根因(斷電、強制殺進程、高負載備份等),再對症下藥。
  • 修復前務必備份,確保 MySQL 服務已停止。
  • 善用 myisamchk 三階段修復,由淺入深,避免盲目嘗試第三方工具。
  • 親自動手解決問題,不僅累積技術,更能獲得成就感。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved