Table 'content_tags' is marked as crashed and should be repaired
典型原因:非正常關機(斷電、殺進程)、磁碟壞軌、記憶體錯誤、MySQL Bug。
# 快速檢查
myisamchk *.MYI
# 深度檢查
myisamchk -e *.MYI
# 靜默模式
myisamchk -s *.MYI
若 mysqld 運行中,加 --update-state 標記已檢查。
僅修復報錯的表;若出現 out of memory 或 myisamchk 崩潰 → 進階段 3。
# 快速修復(僅重建索引)
myisamchk -r -q tbl_name
# 完整修復(重建索引+清理資料)
myisamchk -r tbl_name
# 安全修復(舊版演算法,較慢但穩健)
myisamchk --safe-recover tbl_name
執行前備份 .MYD、.MYI。調大 sort_buffer_size、key_buffer_size 至可用記憶體 25% 加速。
.MYD 至安全處。.frm 重建空表:mysql> SET AUTOCOMMIT=1; TRUNCATE TABLE tbl_name; QUIT;.MYD 複製回新建表目錄(保留副本)。myisamchk -r -q。或直接用 SQL:REPAIR TABLE tbl_name USE_FRM; 自動完成上述流程。
.frm → 回階段 3。.frm、.MYI 覆蓋,保留原 .MYD → 回階段 2。SELECT * FROM tbl_name INTO OUTFILE '/tmp/tbl_dump.txt';
大部分資料可導出,再重建表匯入。
innodb_force_recovery)在 my.cnf [mysqld] 加入:
innodb_force_recovery = 4
等級 1-6 遞增嚴格:
| 值 | 常數 | 行為 |
|---|---|---|
| 1 | SRV_FORCE_IGNORE_CORRUPT | 忽略損壞頁,讓 SELECT 跳過壞記錄 |
| 2 | SRV_FORCE_NO_BACKGROUND | 阻止主執行緒(防止 purge 崩潰) |
| 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 前滾 |
注意:innodb_force_recovery > 0 時禁止 INSERT/UPDATE/DELETE。
導出資料後移除參數重啟,或 DROP 壞表停止失控回滾。
sync_binlog=1、innodb_flush_log_at_trx_commit=1。CHECK TABLE、ANALYZE TABLE。