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

MySQL 表損壞修復實戰:myisamchk -r、三級修復策略、索引文件重建、格式文件恢復全流程

     編輯:MySQL 資料庫相關知識

故障現象

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

快速修復命令

# 進入數據庫數據目錄
myisamchk -r dede_archives
# 或指定索引文件
myisamchk -c -r ../data/dedecmsv4/dede_archives.MYI

三級修復策略(由快到慢、由輕到重)

  1. 快速修復:myisamchk --recover --quick /path/to/tbl(最常見問題)。
  2. 標準修復:myisamchk --recover /path/to/tbl(快速失敗時)。
  3. 安全修復:myisamchk --safe-recover /path/to/tbl(最慢,能修復其他方法無法修復的嚴重損壞)。

前置檢查:若報臨時文件無法創建,刪除殘留臨時文件再試。

極端損壞搶救方案

場景一:索引文件 (.MYI) 損壞/遺失,數據文件 (.MYD) 完好

  1. 備份 tbl.MYD。
  2. 重啟 MySQL,連線執行:DELETE FROM tbl;(生成新空索引文件)。
  3. 停庫,用備份 .MYD 覆蓋新空數據文件。
  4. 執行標準修復(策略二),根據數據內容和 .frm 重建索引。

場景二:格式文件 (.frm) 損壞/遺失,但知道建表語句

  1. 備份 .MYD、.MYI(如有問題先按場景一重建索引)。
  2. 刪除數據目錄下該表所有文件。
  3. 重啟 MySQL,用原 CREATE TABLE 語句建表(生成新 .frm)。
  4. 執行標準修復驗證。

myisamchk 核心用法速查

  • 檢查所有表:myisamchk *.MYI(在數據目錄下)。
  • 快速靜默檢查:myisamchk --silent --fast /path/to/datadir/*/*.MYI
  • 強制檢查並修復所有損壞表(需 >64MB 內存):
    myisamchk --silent --force --fast --update-state \
      -O key_buffer=64M -O sort_buffer=64M \
      -O read_buffer=1M -O write_buffer=1M \
      /path/to/datadir/*/*.MYI
  • 查看統計:myisamchk -ei tbl;查看鏈接數:myisamchk -ed tbl。

關鍵避坑

  • 運行 myisamchk 時必須確保無其他進程使用該表(含 mysqld)。
  • 若 mysqld 運行,先 FLUSH TABLES 強制刷盤。
  • 生產環境優先用 CHECK TABLE/REPAIR TABLE SQL 語句,避免文件鎖衝突。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved