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

MySQL 資料檔案損壞修復完整指南:myisamchk、CHECK TABLE、REPAIR TABLE 實戰操作

     編輯:MySQL 資料庫相關知識

損壞成因與預防

  • 非正常關機、斷電、kill -9 強制終止進程
  • 寫入過程中被中斷導致檔案狀態不一致
  • 損壞可能潛伏許久才被發現,備份可能同樣受損

預防:定期備份、使用 UPS、優雅關閉服務 (mysqladmin shutdown)、啟用二進制日誌支援時間點復原。

MyISAM 檔案結構

檔案副檔名內容
表定義.frm欄位定義、型別、索引資訊
資料檔.MYD實際資料列
索引檔.MYI索引樹結構 (B-Tree)

myisamchk 離線檢查修復 (需停止 MySQL 服務)

基本檢查

myisamchk /path/to/db/tbl_name
myisamchk /path/to/db/tbl_name.MYI

全庫/全表檢查

myisamchk /path/to/db/*.MYI
myisamchk /path/to/*/*.MYI

深度檢查 (較慢但徹底)

myisamchk --extend-check /path/to/tbl_name

三階段修復策略

  1. 快速修復 (最常見問題):myisamchk --recover --quick /path/to/tbl_name
  2. 標準修復:myisamchk --recover /path/to/tbl_name
  3. 安全修復 (最慢、最徹底):myisamchk --safe-recover /path/to/tbl_name

⚠ 修復前務必備份 .MYD、.MYI、.frm 三個檔案。修復不可復原。

進階修復技巧

情況一:索引檔損壞/遺失,重建索引

  1. 備份 .MYD 檔
  2. 啟動 MySQL,DELETE FROM tbl_name; (清空資料,產生新 .MYI)
  3. 停止 MySQL,用備份 .MYD 覆蓋新 .MYD
  4. 執行標準修復:myisamchk --recover /path/to/tbl_name

情況二:定義檔損壞/遺失,重建結構

  1. 備份 .MYD、.MYI
  2. 刪除資料目錄下該表所有檔案
  3. 啟動 MySQL,執行原始 CREATE TABLE 重建 .frm
  4. 執行標準修復同步索引

線上檢查修復 (無需停機,MySQL 內建)

檢查表損壞

CHECK TABLE tbl_name;

修復表

REPAIR TABLE tbl_name;

一次失敗可多執行幾次。適用於 MyISAM、ARCHIVE、CSV 引擎。

Windows 環境命令列操作範例

D:
CD mysql\bin
MYISAMCHK -r d:\mysql\data\guild\msg_table.MYI
MYISAMCHK --safe-recover d:\mysql\data\guild\msg_table.MYI

損壞表定位方法

USE guild;
DESC msg_table;  -- 若報錯即為損壞表

修復後驗證

SHOW TABLES;
CHECK TABLE msg_table;

最佳實務建議

  • 生產環境優先使用 InnoDB (支援崩潰恢復、ACID)
  • MyISAM 僅用於唯讀/多讀少寫、可容忍資料遺失場景
  • 建立自動化監控腳本定期 CHECK TABLE 關鍵表
  • 異地備份 + 二進制日誌 = 完整災難恢復能力
  • 大表修復耗時極長,評估停機窗口或使用備份還原更快
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved