環境: Windows 2003, MySQL, 損壞表 function_products (.frm/.MYD/.MYI)。
位於 mysql\bin。核心原則: 修復前必須關閉 MySQL 服務,或對檔案副本操作,避免服務同時修改導致崩潰。
myisamchk --recover --quick /path/table — 不修改資料文件,最快,解決常見問題。myisamchk --recover /path/table — 修改資料文件,修復大多數問題。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 條)**。
.MYD 資料文件。DELETE FROM tbl_name; (建立新空索引)。.MYD 覆蓋新空資料文件。.frm 結構與資料重建索引。.MYD、.MYI。CREATE TABLE 語句重建表 (產生新 .frm)。myisamchk 三級修復,務必備份後操作。