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

MySQL 表損壞檢測與修復完整指南:myisamchk 實戰操作手冊

     編輯:MySQL 資料庫相關知識

適用範圍

僅適用於 MyISAM 儲存引擎表(.MYD、.MYI 檔案)。InnoDB 表損壞需透過 innodb_force_recovery 或備份還原處理。

前置準備(關鍵)

  1. 備份資料目錄:cp -a /var/lib/mysql/db_name /backup/
  2. 停止 MySQL 服務:systemctl stop mysqld(避免檔案被鎖定/寫入)
  3. 切換至資料庫目錄:cd /var/lib/mysql/db_name

檢測等級與指令

等級指令適用場景耗時
標準檢查myisamchk tbl_name例行巡檢,發現 99.99% 錯誤快
靜默模式myisamchk -s tbl_name腳本自動化,僅回傳錯誤碼快
擴展檢查myisamchk -e tbl_name懷疑資料檔損壞,逐行驗證索引指向慢(大表慎用)
中等檢查myisamchk -m tbl_name折衷方案,較少使用中

批次檢查整個資料庫

# 檢查所有 MyISAM 表
myisamchk *.MYI

# 指定路徑
myisamchk /var/lib/mysql/db_name/*.MYI

# 所有資料庫
myisamchk /var/lib/mysql/*/*.MYI

修復流程

  1. 快速修復(預設,僅修復索引樹):
    myisamchk -r tbl_name
  2. 完整修復(重建資料檔,修復資料損壞):
    myisamchk -r -o tbl_name
  3. 強制修復(忽略錯誤繼續):
    myisamchk -r -f tbl_name

修復後驗證

myisamchk -d tbl_name  # 顯示表資訊,確認 Max datafile length 正常
mysqlcheck -r db_name tbl_name  # 或用 SQL 介面二次確認

常用輔助參數

  • -v / --verbose:詳細輸出
  • -i / --information:顯示統計資訊(行數、索引長度等)
  • -C / --check-only-changed:僅檢查上次檢查後異動的表

失敗應對策略

  1. 從最近備份還原(mysqldump / 實體備份 / 二進位日誌)。
  2. 嘗試 REPAIR TABLE tbl_name USE_FRM(需 Server 運行)。
  3. 若為索引損壞,DROP INDEX 後 ADD INDEX 重建。

預防勝於治療

  • 生產環境強制使用 InnoDB(支援 Crash Recovery、雙寫緩衝)。
  • 定期 CHECK TABLE / mysqlcheck 巡檢。
  • 硬體層面:ECC 記憶體、RAID、UPS、定期磁碟健康檢測。

建立「備份 → 停服務 → 檢查 → 修復 → 驗證 → 啟動」標準作業程序,讓表損壞不再恐慌。

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