首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL「Incorrect key file for table」表損壞修復實戰:REPAIR TABLE、myisamchk、Linux服務器級修復

     編輯:MySQL 資料庫相關知識

報錯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

方案一:SQL 層修復(最簡單,數據可能丟失)


-- 標準修復
REPAIR TABLE `it_member_snsmsg`;

-- 強制修復(僅用 .frm 結構文件重建索引,數據文件 .MYD 必須完好)
REPAIR TABLE `it_member_snsmsg` USE_FRM;

風險:修復過程可能丟失損壞頁面的數據,修復前**必備份 .MYD/.MYI/.frm** 三文件。

方案二:Windows 命令行 myisamchk(適合圖形化工具不可用)


cmd /k myisamchk --recover dede_archives
-- 或指定完整路徑
myisamchk --recover "C:\mysql\data\dbname\dede_archives.MYI"

方案三:Linux 服務器級深度修復(REPAIR TABLE 無效時)

現象: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;"

myisamchk 關鍵參數對照

參數作用場景
-c / --check僅檢查不修復定期巡檢
-r / --recover標準修復(重建索引樹)常規損壞
-o / --safe-recover安全模式(逐行掃描數據文件重建)嚴重損壞、-r失敗
-f / --force強制覆蓋臨時文件殘留臨時文件阻塞
-q / --quick快速模式(不掃描數據文件)輕微損壞、大表加速

根因排查與預防

  • 直接複製文件遷移:必須FLUSH TABLES WITH READ LOCK或停庫,否則文件不一致
  • 磁碟壞道/空間耗盡:smartctl -a /dev/sdX、df -h 監控
  • 殺毒軟件掃描 .MYI:排除數據目錄
  • InnoDB 遷移:MyISAM 不支援事務、易損壞,**生產環境強烈建議全量遷移至 InnoDB**

InnoDB 表損壞不同處理

InnoDB 損壞報錯通常為Tablespace not found、Page checksum mismatch,修復手段:

  1. innodb_force_recovery = 1..6 分級導出數據
  2. 重建表:CREATE TABLE new LIKE old; INSERT INTO new SELECT * FROM old;
  3. 極端情況用 Percona Data Recovery Tool for InnoDB

MyISAM 修復是「止痛」,遷移 InnoDB 才是「治本」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved