mysqld 進程在寫入過程中被強制終止理解表對應的三個實體檔案至關重要:
| 檔案 | 用途 |
|---|---|
tbl_name.frm | 表定義(結構)檔 |
tbl_name.MYD | 資料檔 |
tbl_name.MYI | 索引檔 |
問題最常集中在 .MYD 與 .MYI。
工具逐行建立 .MYD 副本,修復結束時刪除舊檔並重命名新檔。
--quick 模式不建立臨時資料檔,假定 .MYD 正確,僅重建索引;雙 --quick 甚至嘗試修正重複鍵等資料錯誤(極度缺磁碟空間時才建議,且必先備份)。
| 指令 | 說明 |
|---|---|
myisamchk tbl_name | 預設檢查,發現 99.99% 錯誤(不含純資料檔損壞) |
myisamchk -e tbl_name | 擴展檢查,逐鍵驗證每行指向,大表耗時較長 |
myisamchk -e -i tbl_name | 同上並輸出統計資訊 |
一般情況下無參數執行即可;需更多細節可加 -v(最多顯示 20 個錯誤)。
.frm 被鎖、找不到 .MYI、記錄檔損壞、非預期檔案結束等myisamchk *.MYI 或 myisamchk -e *.MYI(加 -s 靜默)。myisamchk -r -q tbl_name(快速恢復,不動資料檔).MYD 後執行 myisamchk -r tbl_name(標準恢復,重建索引)myisamchk --safe-recover tbl_name(安全恢復,較慢但覆蓋更多案例).MYD 至安全處。.frm 重建空表:mysql db_name → DELETE FROM tbl_name; → quit.MYD 複製回新資料檔(保留副本)。myisamchk -r -q 應可成功。.frm 也損壞).frm 後回階段 3;或還原索引檔回階段 2(用 myisamchk -r)。.frm 與索引檔,回階段 2 重建索引。合併碎片、回收刪除/更新產生的空洞:
myisamchk -r tbl_name
等同 OPTIMIZE TABLE,但 myisamchk 更快且無客戶端-伺服器交互開銷。
其他性能相關選項:-S/--sort-index、-R/--sort-records、-a/--analyze。