本文記錄一次真實的 MyISAM 表 function_products 損壞恢復過程,環境為 Windows Server 2003 + MySQL。涵蓋工具嘗試失敗、myisamchk 分級修復、索引重建、表結構重建等完整技術路線,供同類問題參考。
直接將物理文件(.frm/.MYD/.MYI)拷入 data 目錄後發現表損壞。嘗試第三方工具 MySQLRecovery 效果極差(幾十 MB 僅恢復幾十 KB)。轉而尋找 MySQL 原生修復方案。
kill -9、高負載下強制備份均可能導致數據文件處於不一致狀態。myisamchk 修復前,必須關閉 MySQL 服務,或對文件副本操作,避免服務與工具同時訪問導致崩潰。cd C:\MySQL\bin myisamchk C:\MySQL\data\hw_enterprice\function_products.MYI
輸出提示:record delete-link-chain corrupted、Wrong bytesec、表標記為 crashed。
myisamchk --recover --quick C:\MySQL\data\hw_enterprice\function_products.MYI
失敗,提示需移除 --quick 重試。
myisamchk --recover C:\MySQL\data\hw_enterprice\function_products.MYI
仍失敗,建議使用 --safe-recover 或 --force。
myisamchk --safe-recover C:\MySQL\data\hw_enterprice\function_products.MYI
輸出:Data records: 85215,修復完成。將文件複製回 data 目錄,phpMyAdmin 訪問正常,共恢復 85,207 條記錄(原 85,215 條)。
| 命令 | 速度 | 適用場景 |
|---|---|---|
myisamchk --recover --quick | 最快 | 常見損壞,索引問題 |
myisamchk --recover | 中等 | 標準修復,數據文件完好 |
myisamchk --safe-recover | 最慢 | 嚴重損壞,其他方法無效時 |
若提示臨時文件無法建立,刪除殘留臨時文件後重試。
.MYD 數據文件。DELETE FROM tbl_name; 產生新索引文件。.MYD 覆蓋新文件。--recover),根據數據與 .frm 重建索引。.MYD、.MYI。CREATE TABLE 語句重建表(產生新 .frm)。面對數據損壞,先分析根因、查閱文檔、親自動手,不僅能解決問題,更能積累寶貴經驗。建議建立定期 myisamchk --fast --silent 巡檢機制,早發現早處理。