報錯Incorrect key file for table 'xxx'; try to repair it表明MyISAM表索引文件(.MYI)損壞。常見於直接複製數據文件、磁碟故障、殺毒軟件誤殺、強制關機。本文提供三層修復方案:SQL層、命令行工具、Linux服務器級深度修復。
-- 查詢觸發
SELECT * FROM it_member_snsmsg;
-- 报错:Incorrect key file for table 'it_member_snsmsg'; try to repair it
-- 標準修復
REPAIR TABLE `it_member_snsmsg`;
-- 強制修復(僅用 .frm 結構文件重建索引,數據文件 .MYD 必須完好)
REPAIR TABLE `it_member_snsmsg` USE_FRM;
風險:修復過程可能丟失損壞頁面的數據,修復前**必備份 .MYD/.MYI/.frm** 三文件。
cmd /k myisamchk --recover dede_archives
-- 或指定完整路徑
myisamchk --recover "C:\mysql\data\dbname\dede_archives.MYI"
現象:REPAIR TABLE仍報Incorrect key file與Corrupt
# 1. 停止 MySQL
systemctl stop mysqld
# 2. 進入數據目錄
cd /var/lib/mysql/smtp/ # 具體數據庫目錄
# 3. 三級修復遞進
# 3.1 快速檢查修復
myisamchk -of Filter.MYI
# 3.2 標準修復(重建索引)
myisamchk -r Filter.MYI
# 3.3 安全深度修復(掃描數據文件重建,最慢但最徹底)
myisamchk --safe-recover Filter.MYI
# 4. 啟動驗證
systemctl start mysqld
mysql -e "CHECK TABLE Filter;"
| 參數 | 作用 | 場景 |
|---|---|---|
-c / --check | 僅檢查不修復 | 定期巡檢 |
-r / --recover | 標準修復(重建索引樹) | 常規損壞 |
-o / --safe-recover | 安全模式(逐行掃描數據文件重建) | 嚴重損壞、-r失敗 |
-f / --force | 強制覆蓋臨時文件 | 殘留臨時文件阻塞 |
-q / --quick | 快速模式(不掃描數據文件) | 輕微損壞、大表加速 |
FLUSH TABLES WITH READ LOCK或停庫,否則文件不一致smartctl -a /dev/sdX、df -h 監控InnoDB 損壞報錯通常為Tablespace not found、Page checksum mismatch,修復手段:
innodb_force_recovery = 1..6 分級導出數據CREATE TABLE new LIKE old; INSERT INTO new SELECT * FROM old;Percona Data Recovery Tool for InnoDBMyISAM 修復是「止痛」,遷移 InnoDB 才是「治本」。