| 檔案 | 用途 |
|---|---|
| 表定義(結構) | |
| 資料檔 | |
| 索引檔 |
損壞多發於 .MYD、.MYI;.frm 較少壞。
tbl_name.frm is locked against changeCan't find file 'tbl_name.MYI' (Errcode: ...)Unexpected end of file / Record file is crashed# 基本檢查(99.99% 錯誤可偵測)
myisamchk tbl_name
# 安靜模式
myisamchk -s tbl_name
# 延伸檢查(逐鍵驗證每列指向正確行,耗時久)
myisamchk -e tbl_name
# 延伸檢查 + 統計資訊
myisamchk -e -i tbl_name
注意:執行前確保 mysqld 未存取該表(停止服務或 FLUSH TABLES WITH READ LOCK)。
cd /var/lib/mysql/mydb
myisamchk *.MYI
# 或延伸檢查
myisamchk -e *.MYI
myisamchk -r tbl_name
# -r = recover:建立 .MYD 複本、重建索引、替換原檔
myisamchk -r -q tbl_name
# -q = quick:不觸碰 .MYD,極快
# 若偵測資料檔損壞會自動放棄並報錯
myisamchk -r -q -q tbl_name
# 兩個 -q:嘗試修改 .MYD 解決重複鍵等錯誤
# ⚠️ 風險較高,磁碟空間不足時才考慮,執行前務必備份!
| 參數 | 說明 |
|---|---|
-r | 修復模式 |
-q | 快速模式(不重建資料檔) |
-q -q | 強力快速修復(修改資料檔) |
-f | 強制覆蓋舊暫存檔 |
-v | 詳細輸出 |
--sort_buffer_size=N | 排序緩衝區(大表調大加速) |
--key_buffer_size=N | 索引緩衝區 |
myisamchk 不支援 InnoDB。InnoDB 損壞處理:
innodb_force_recovery = 1~6 啟動參數嘗試讀取導出資料。CREATE TABLE ... LIKE + INSERT SELECT)。InnoDB 取代 MyISAM(支援交易、崩潰恢復、行鎖)。kill -9 強制終止 mysqld,改用 mysqladmin shutdown。innodb_checksum_algorithm=crc32 頁面校驗。