1. Can't open file: 'mytable.MYI' (errno: 2)
2. Table 'picture' is marked as crashed and should be repaired
僅適用 MyISAM 表。InnoDB 損壞需從備份恢復或 innodb_force_recovery。
REPAIR TABLE tbl_name [QUICK | EXTENDED | USE_FRM];
QUICK:僅修復索引樹,數據文件未損壞時最快。EXTENDED:逐行重建索引,可恢復更多數據,慢,可能產生垃圾行。USE_FRM:.MYI 丟失/頭部損壞時,用 .frm 定義重建索引(救命稻草)。mysql> REPAIR TABLE mytable USE_FRM;
+------------------------+--------+----------+-----------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+------------------------+--------+----------+-----------------------------------------------+
| sports_results.mytable | repair | warning | Number of rows changed from 0 to 2 |
| sports_results.mytable | repair | status | OK |
+------------------------+--------+----------+-----------------------------------------------+
# 修復單表
mysqlcheck -r db_name tbl_name -u root -p
# 修復多表
mysqlcheck -r db_name tbl1 tbl2 -u root -p
# 修復整庫
mysqlcheck -r db_name -u root -p
輸出 OK 表示成功。可同時優化 mysqlcheck -o -r db_name。
# 進入數據目錄
cd /var/lib/mysql/db_name
# 最常用:自動恢復
myisamchk -r tbl_name.MYI
# 徹底修復(-r 失敗時)
myisamchk --safe-recover tbl_name.MYI
# 快速修復(數據文件未變)
myisamchk -q tbl_name.MYI
myisamchk -q -q tbl_name.MYI # 修改數據文件
# 關鍵參數加速
myisamchk --sort_buffer_size=256M --key_buffer_size=512M -r tbl_name.MYI
| 參數 | 短 | 用途 |
|---|---|---|
| --backup | -b | 修復前備份 .BAK |
| --recover | -r | 標準恢復(最常用) |
| --safe-recover | -o | 徹底恢復,慢 |
| --quick | -q | 快速模式 |
| --extend-check | -e | 嘗試恢復每行,產生垃圾行 |
| --force | -f | 覆蓋同名 .TMD 臨時文件 |
CHECK TABLE / mysqlcheck -c 巡檢。