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

MySQL 索引損壞修復實戰經驗:myisamchk 工具三種修復模式、.MYI/.MYD/.frm 檔案重建與預防措施完整分享

     編輯:MySQL 資料庫相關知識

MySQL 索引損壞修復實戰經驗完整分享


故障現場

Dedecms 網站全頁報錯:

Table './dedecmsv4/dede_archives' is marked as crashed and should be repaired

dede_archives 文章表索引損壞,需修復。


修復工具:myisamchk

位置:MySQL 安裝目錄 bin/myisamchk,專用於 MyISAM 表 (.MYI 索引、.MYD 資料)。

執行修復

myisamchk -c -r ../data/dedecmsv4/dede_archives.MYI

修復完成後重啟 MySQL,問題解決。


三種修復模式 (由快到慢、由輕到重)

指令適用場景
myisamchk --recover --quick /path/tbl最快,修復常見問題
myisamchk --recover /path/tbl標準修復
myisamchk --safe-recover /path/tbl最慢,修復其它方法無法修復的嚴重損壞

若提示臨時檔案無法建立,刪除殘留檔再試。


極端損壞:利用 .MYD + .frm 重建 .MYI

  1. 備份 tblName.MYD
  2. 重啟 MySQL,DELETE FROM tblName; (建立新空 .MYI)
  3. 停止 MySQL,用備份 .MYD 覆蓋新 .MYD
  4. 執行標準修復 (方法 2),根據資料與 .frm 重建索引

極端損壞:.frm 遺失但知 CREATE TABLE

  1. 備份 .MYD、.MYI
  2. 刪除資料目錄下該表所有檔案
  3. 啟動 MySQL,用原 CREATE TABLE 重建表 (產生新 .frm)
  4. 執行標準修復

myisamchk 進階用法

  • myisamchk *.MYI:檢查目錄下所有 MyISAM 表
  • myisamchk --silent --fast /path/datadir/*.MYI:推薦快速檢查 (需 >64MB 記憶體)
  • 執行前必須 FLUSH TABLES 確保無其他程式佔用表
  • 或直接用 SQL CHECK TABLE 避免衝突

根因分析與預防

  • 頻繁查詢+更新同一表 (動態頁面無靜態化) 易導致索引損壞
  • 伺服器斷電、檔案層面操作表檔案也可能損壞
  • 建議:靜態化頁面、定期備份、監控錯誤日誌

myisamchk 是 MyISAM 表索引修復的瑞士刀,熟練掌握三種模式與檔案重建技巧,關鍵時刻能挽救業務資料。


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