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

MySQL Table is marked as crashed 修復完整指南:myisamchk 實戰與多種方案對比

     編輯:MySQL 資料庫相關知識

錯誤現象

ERROR 145 (HY000): Table './db/tbl' is marked as crashed and should be repaired

MyISAM 表索引檔 (.MYI) 損壞,常見於斷電、殺進程、磁碟滿、硬體故障。

預防第一:備份

  • 修復前 必備份 .frm/.MYD/.MYI 三個檔案。
  • 重要資料每日備份,保留多版本。

標準修復指令 (myisamchk)

# 進入資料目錄
cd /var/lib/mysql/dbname

# 1. 快速檢查+修復 (最常用)
myisamchk -r tbl_name

# 2. 強制修復 (快速失敗時)
myisamchk -r -f tbl_name

# 3. 安全修復 (最慢、最徹底)
myisamchk --safe-recover tbl_name

Windows 環境圖解步驟

F:\> cd sqldata\mysql\bin
F:\sqldata\mysql\bin> cd ..\data\dbname
F:\sqldata\mysql\data\dbname> ..\bin\myisamchk -r tbl_name

- recovering (with sort) MyISAM-table 'tbl_name'
Data records: 7216
- Fixing index 1
- Fixing index 2
- Fixing index 3

批次修復腳本 (fixit.bat)

@echo off
cd /d F:\sqldata\mysql\data\dbname
..\bin\myisamchk -r tbl_name
pause

phpMyAdmin 圖形化修復

    1. 選中資料庫 2. 勾選損壞表 3. 下拉選單選 Repair table 4. 執行完成檢查資料完整性

進階修復:索引檔遺失/損壞無法修復

  1. 備份 .MYD (資料檔) 與 .frm (結構檔)。
  2. 重啟 MySQL,登入:DELETE FROM tbl_name; (產生新空 .MYI)。
  3. 停止 MySQL,用備份 .MYD 覆蓋新檔。
  4. 執行標準修復:myisamchk -r tbl_name 重建索引。

結構檔遺失修復

  1. 備份 .MYD、.MYI。
  2. 刪除該表所有檔案。
  3. 用原 CREATE TABLE 重建表 (產生新 .frm)。
  4. 停止 MySQL,覆蓋回備份的 .MYD/.MYI。
  5. 執行標準修復。

myisamchk 參數速查

參數用途
-c / --check檢查錯誤
-r / --recover修復 (快速排序法)
--safe-recover安全修復 (舊版相容)
-f / --force強制覆蓋臨時檔
-q / --quick僅修復索引樹,不掃描資料
--analyze分析關鍵字分佈
--sort-index排序索引

自動化巡檢腳本

# 每日巡檢所有 MyISAM 表
myisamchk --silent --force --fast --update-state \
  -O key_buffer=64M -O sort_buffer=64M \
  -O read_buffer=1M -O write_buffer=1M \
  /var/lib/mysql/*/*.MYI

避坑指南

  • 修復前 必須停止 MySQL 或 FLUSH TABLES WITH READ LOCK,否則資料不一致。
  • InnoDB 表不適用 myisamchk,損壞需從備份恢復或 innodb_force_recovery。
  • 頻繁損壞 → 檢查磁碟健康、檔案系統、記憶體 ECC、電源穩定性。
  • 生產環境建議全面遷移 InnoDB,避免 MyISAM 表鎖與損壞風險。

方案選擇決策樹

發現 crashed
    │
    ├─ 有備份? → 是 → 直接還原 (最快最安)
    │
    └─ 否 → myisamchk -r (快速修復)
              │
              ├─ 成功 → 驗證資料 → 完成
              │
              └─ 失敗 → myisamchk -r -f (強制)
                        │
                        ├─ 成功 → 驗證 → 完成
                        │
                        └─ 失敗 → --safe-recover
                                  │
                                  └─ 仍失敗 → 索引重建法 / 結構重建法

建立標準修復 SOP,納入運維手冊,關鍵時刻不慌不亂。

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