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

MyISAM 表損壞急救手冊:myisamchk 檢查、修復與預防完整流程

     編輯:MySQL 資料庫相關知識

MyISAM 三個核心檔案

tbl_name.frmtbl_name.MYDtbl_name.MYI
檔案用途
表定義(結構)
資料檔
索引檔

損壞多發於 .MYD、.MYI;.frm 較少壞。

常見損壞徵兆

  • tbl_name.frm is locked against change
  • Can't find file 'tbl_name.MYI' (Errcode: ...)
  • Unexpected end of file / Record file is crashed
  • 查詢異常中斷、錯誤碼 135(除外)。

一、檢查表錯誤

# 基本檢查(99.99% 錯誤可偵測)
myisamchk tbl_name

# 安靜模式
myisamchk -s tbl_name

# 延伸檢查(逐鍵驗證每列指向正確行,耗時久)
myisamchk -e tbl_name

# 延伸檢查 + 統計資訊
myisamchk -e -i tbl_name

注意:執行前確保 mysqld 未存取該表(停止服務或 FLUSH TABLES WITH READ LOCK)。

二、修復流程(四階段)

階段 1:檢查所有表

cd /var/lib/mysql/mydb
myisamchk *.MYI
# 或延伸檢查
myisamchk -e *.MYI

階段 2:標準修復(預設重建資料檔 + 索引檔)

myisamchk -r tbl_name
# -r = recover:建立 .MYD 複本、重建索引、替換原檔

階段 3:快速修復(僅重建索引,假設資料檔正常)

myisamchk -r -q tbl_name
# -q = quick:不觸碰 .MYD,極快
# 若偵測資料檔損壞會自動放棄並報錯

階段 4:強力修復(修改資料檔修復重複鍵等錯誤)

myisamchk -r -q -q tbl_name
# 兩個 -q:嘗試修改 .MYD 解決重複鍵等錯誤
# ⚠️ 風險較高,磁碟空間不足時才考慮,執行前務必備份!

修復參數速查表

參數說明
-r修復模式
-q快速模式(不重建資料檔)
-q -q強力快速修復(修改資料檔)
-f強制覆蓋舊暫存檔
-v詳細輸出
--sort_buffer_size=N排序緩衝區(大表調大加速)
--key_buffer_size=N索引緩衝區

InnoDB 表損壞怎麼辦?

myisamchk 不支援 InnoDB。InnoDB 損壞處理:

  1. innodb_force_recovery = 1~6 啟動參數嘗試讀取導出資料。
  2. 導出後重建表(CREATE TABLE ... LIKE + INSERT SELECT)。
  3. 嚴重時從備份還原。

預防勝於治療

  1. 使用 InnoDB 取代 MyISAM(支援交易、崩潰恢復、行鎖)。
  2. 定期備份 + 異地備份。
  3. 監控磁碟空間、記憶體、硬體健康(SMART)。
  4. 避免 kill -9 強制終止 mysqld,改用 mysqladmin shutdown。
  5. 啟用 innodb_checksum_algorithm=crc32 頁面校驗。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved