tbl_name.frm is lockedCan't find file: 'tbl_name.MYI' (Errcode: xxx)Got error xxx from table handler (135 除外)Unexpected end of file / Record file is crashedmyisamchk -r -q tbl_name
# -r recover、-q quick (僅重建索引)
適用:索引檔輕度損壞、資料檔完整
myisamchk -r tbl_name
適用:Level 1 失效、資料檔有殘留刪除標記
myisamchk --safe-recover tbl_name
適用:前兩級均失效、索引檔前 16KB 損壞
cd /var/lib/mysql/db_namecp tbl_name.MYD /safe/path/mysql -e "USE db_name; DELETE FROM tbl_name;" # 觸發重建 MYD/MYI
4. 覆蓋資料檔:cp /safe/path/tbl_name.MYD ./tbl_name.MYD
5. 執行 Level 1 修復:myisamchk -r -q tbl_name
tbl_name.frm → 回到困難修復步驟 3CREATE TABLE 陳述式:
cd /var/lib/mysql/db_name
mv tbl_name.MYD /safe/
mysql -e "USE db_name; CREATE TABLE tbl_name (...原結構...);"
mv /safe/tbl_name.MYD ./tbl_name.MYD
myisamchk -r -q tbl_name
innodb_force_recovery = 1..6 由輕到重嘗試導出資料| 措施 | 頻率/配置 |
|---|---|
| 定期 CHECK TABLE | 每日低峰 CHECK TABLE tbl_name FAST QUICK; |
| 監控錯誤日誌 | log_error + 告警關鍵字 |
| 物理備份 | xtrabackup 每日全量 + 增量 |
| 邏輯備份驗證 | 每週測試環境還原演練 |
| 避免 kill -9 | 優雅關機 systemctl stop mysqld |
| 磁碟健康 | SMART 監控、RAID、定期巡檢 |
MyISAM 修復有 myisamchk 三級階梯,InnoDB 靠 innodb_force_recovery 導出重建。但最可靠的修復是備份還原。建立「備份 → 驗證 → 演練」閉環,才能在災難面前從容應對。