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

MyISAM 表維護神器 myisamchk 完全手冊

     編輯:MySQL 資料庫相關知識

文件結構認知

  • .frm:表定義 (所有引擎通用)
  • .MYD:數據文件 (MyISAM)
  • .MYI:索引文件 (MyISAM)

調用語法

myisamchk [options] tbl_name[.MYI]
# 批量操作
myisamchk *.MYI
myisamchk /path/to/db/*.MYI
myisamchk /var/lib/mysql/*/*.MYI

核心功能選項

選項功能典型場景
-c, --check檢查表 (默認)定期巡檢
-r, --recover恢復/修復表表損壞、崩潰後
-q, --quick快速修復 (不修改數據文件)輕微索引錯誤
-f, --force強制覆蓋臨時文件修復失敗重試
-a, --analyze分析鍵值分布優化器統計更新
-o, --optimize優化表 (整理碎片+統計)大量刪除/更新後
-d, --description顯示表信息查看表結構統計
-e, --extend-check深度檢查極端損壞排查
--set-auto-increment=N設置自增起始值數據遷移後重置

操作前必須條件

⚠️ 嚴禁在 mysqld 運行時直接操作數據文件!
必須先執行:mysqladmin flush-tables 並確保無活躍查詢,或直接 systemctl stop mysql。

標準修復流程

# 1. 停止服務 (生產環境建議從庫操作)
systemctl stop mysql

# 2. 進入數據目錄
cd /var/lib/mysql/mydb

# 3. 檢查所有表
myisamchk *.MYI

# 4. 發現損壞表進行修復
myisamchk -r -q damaged_table.MYI   # 快速修復
# 若失敗
myisamchk -r damaged_table.MYI      # 完全修復
# 極端情況
myisamchk -r -e damaged_table.MYI   # 深度修復

# 5. 優化所有表
myisamchk -o *.MYI

# 6. 啟動服務
systemctl start mysql

現代替代方案

  • SQL 命令:CHECK TABLE, REPAIR TABLE, OPTIMIZE TABLE, ANALYZE TABLE — 無需停服務,InnoDB 也支持
  • Percona Toolkit: pt-table-checksum, pt-online-schema-change — 線上無鎖操作
  • MySQL 8.0+ innodb_force_recovery 參數應對極端崩潰

避坑提醒

  • --skip-locking 啟動時,myisamchk 讀取可能不一致
  • 修復前務必備份 .MYD 和 .MYI
  • 大表修復耗時極長,規劃維護窗口
  • InnoDB 表**不能**用 myisamchk,需用 innodb_checksum 或 SQL 命令
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved