表損壞癥狀:查詢中斷、Incorrect key file、Table marked as crashed、Can't open .MYI (errno 145)。修復遵循「由簡入繁、由快到慢、備份優先」原則。
myisamchk -r -q tbl_name # 快速恢復 (僅重建索引)
# 失敗則
myisamchk -r tbl_name # 恢復模式 (刪除錯誤行、重建索引)
# 仍失敗則
myisamchk --safe-recover tbl_name # 安全恢復 (舊演算法、較慢)
修復前務必 cp tbl_name.* /backup/。
mv tbl_name.MYD /safe/.frm 重建空表:
mysql db_name
SET AUTOCOMMIT=1;
TRUNCATE TABLE tbl_name; -- 或 DELETE FROM tbl_name
quitcp /safe/tbl_name.MYD /var/lib/mysql/db_name/myisamchk -r -q一鍵等效:REPAIR TABLE tbl_name USE_FRM;
.frm 也損壞).frm → 階段 2.MYI → 階段 1CREATE TABLE:另建同結構表,複製 .frm/.MYI → 階段 1/2SELECT * FROM tbl_name INTO OUTFILE '/tmp/tbl_export.txt';
innodb_force_recovery 強制啟動導出編輯 my.cnf:
[mysqld]
innodb_force_recovery = 4 # 1~6 遞增激進
| 值 | 常數 | 行為 | 風險 |
|---|---|---|---|
| 1 | SRV_FORCE_IGNORE_CORRUPT | 忽略損壞頁,SELECT 跳過 | 低 |
| 2 | SRV_FORCE_NO_BACKGROUND | 阻止主執行緒 (清除操作) | 低 |
| 3 | SRV_FORCE_NO_TRX_UNDO | 不執行事務回滾 | 中 |
| 4 | SRV_FORCE_NO_IBUF_MERGE | 阻止插入緩衝合併、不計算統計 | 中高 |
| 5 | SRV_FORCE_NO_UNDO_LOG_SCAN | 視未完成事務為已提交 | 高 |
| 6 | SRV_FORCE_NO_LOG_REDO | 不做 Redo Log 前滾 | 極高 |
≥4 通常能導出多數資料。>0 時 InnoDB 禁止 INSERT/UPDATE/DELETE。DROP/CREATE TABLE 移除壞表停止失控回滾。innodb_force_recovery。DROP TABLE tbl_name; CREATE TABLE ...; LOAD DATA INFILE ... 重建。修復演練建議:季度在測試環境模擬各階段損壞並完整走完流程,驗證 RTO、資料完整性、應用相容性。