Table 'tablename' is marked as crashed and should be repaired
多因非正常關機導致索引檔(.MYI)損壞,資料檔(.MYD)通常完好。
ANALYZE TABLE tbl;
CHECK TABLE tbl;
REPAIR TABLE tbl [QUICK | EXTENDED | USE_FRM];
QUICK:僅修復索引樹,速度最快,適用索引未變動。EXTENDED:逐行重建索引,可能產生垃圾行,最後手段。USE_FRM:.MYI 遺失或頭部損壞時,用 .frm 定義重建索引。# 修復單表
mysqlcheck -r db_name tbl_name -uuser -ppass
# 修復多表
mysqlcheck -r db_name tbl1 tbl2 -uuser -ppass
# 修復整庫
mysqlcheck -r db_name -uuser -ppass
支援 --auto-repair、--optimize 等參數,適合腳本自動化巡檢。
必須確保表不被訪問,否則損壞加劇。
# 檢查
myisamchk tbl_name.MYI
# 修復(最常用)
myisamchk -r tbl_name.MYI
# 強力修復(-r 失敗時)
myisamchk --safe-recover tbl_name.MYI
# 快速修復(資料檔未變)
myisamchk -q -r tbl_name.MYI
關鍵參數:-r recover、-o safe-recover、-q quick、-f force 覆蓋 .TMD 臨時檔。
LOCK TABLE tbl READ; FLUSH TABLE tbl; 並保持連線。myisamchk 檢查/修復。FLUSH TABLE tbl; UNLOCK TABLES; 釋放鎖。若需修復寫入,改用 LOCK TABLE tbl WRITE。
修復前務必備份 .MYD/.MYI/.frm,需雙倍磁碟空間。myisamchk -B 可自動備份。