Windows Server 2003 環境下,MySQL 資料庫 function_products 表發生資料損壞。嘗試第三方工具 MySQLrecovery 效果不佳,數十 MB 資料僅恢復數十 KB。改用 MySQL 內建 myisamchk 進行修復,最終成功恢復 85,207 筆記錄(共 85,215 筆)。
每張表對應三個實體檔案:
.frm:表結構定義(欄位、型別、索引等).MYD:資料檔.MYI:索引檔myisamchk 檢查時服務同時修改檔案導致誤判或崩潰。.frm、.MYD、.MYI)至安全位置。myisamchk /路徑/到/表名.MYI
若懷疑錯誤但基本檢查無發現,可加 --extend-check 執行深度掃描(較慢)。
由快到慢、由輕到重:
# 階段 1:快速修復(最常見問題)
myisamchk --recover --quick /路徑/到/表名.MYI
# 階段 2:標準修復
myisamchk --recover /路徑/到/表名.MYI
# 階段 3:安全修復(最慢,處理棘手損壞)
myisamchk --safe-recover /路徑/到/表名.MYI
本案例中,快速修復失敗提示 record delete-link-chain corrupted,改用 --safe-recover 成功修復。
.MYD,重啟 MySQL 並 DELETE FROM 表名 建立新索引檔,停止服務後用備份 .MYD 覆蓋,再執行標準修復重建索引。.frm 遺失,但知 CREATE TABLE 語句,可重建表產生新 .frm,再配合資料與索引檔修復。將修復完成的三個檔案複製回 MySQL\data 目錄,啟動服務,透過 phpMyAdmin 存取測試,資料正常讀寫,修復宣告成功。
myisamchk 三階段修復,由淺入深,避免盲目嘗試第三方工具。