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

MySQL 資料表損壞正確修復方案:CHECK/REPAIR TABLE 與 myisamchk 實戰

     編輯:MySQL 資料庫相關知識

方法一:SQL 指令法(推薦,簡單、線上可執行)


-- 1. 登入 MySQL
mysql -u user -p dbname

-- 2. 檢查表
CHECK TABLE tabTest;

-- 3. 若 Status != OK,修復
REPAIR TABLE tabTest;

-- 4. 再次檢查確認
CHECK TABLE tabTest;

phpMyAdmin 介面亦提供「勾選表 → 下拉選『修復表』」圖形化操作。

方法二:myisamchk / isamchk 命令列工具(離線、徹底)


# 檢查
myisamchk tbl_name.MYI

# 修復(標準)
myisamchk -r -q tbl_name.MYI   # 快速:只修索引
myisamchk -r tbl_name.MYI      # 標準恢復
myisamchk --safe-recover tbl_name.MYI  # 安全模式

# 索引檔遺失
myisamchk --recover --force tbl_name.MYI

關鍵前提:執行期間 MySQL **不可存取該表**,建議 systemctl stop mysqld 或鎖表 FLUSH TABLES tbl_name WITH READ LOCK。

開機自動修復腳本(/etc/rc.local)


# 僅在 MySQL 未啟動時執行
[ -S /var/lib/mysql/mysql.sock ] || \
  myisamchk -r -q /var/lib/mysql/*/*.MYI
  • /var/lib/mysql/mysql.sock 存在表示 MySQL 正在運行。
  • RPM 安裝 sock 路徑可能為 /var/lib/mysql/mysql.sock,源碼安裝常為 /tmp/mysql.sock。

一鍵檢查修復所有庫表


mysqlcheck -A -c -r -u root -p
# -A: 所有庫, -c: check, -r: repair

實戰建議

  1. 優先用 CHECK/REPAIR TABLE,無需停機,適合輕度損壞。
  2. 重度損壞(.MYI 遺失、頭部壞)用 REPAIR TABLE ... USE_FRM 或 myisamchk。
  3. InnoDB 表**不可用**上述工具,依賴崩潰恢復或備份恢復。
  4. 修復前**務必備份** .frm .MYD .MYI。
  5. 定期 mysqlcheck -A -c 掃描,早發現早處理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved