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

myisamchk 表檢查三大模式詳解:標準、擴展、中等檢查參數與實戰選擇指南

     編輯:MySQL 資料庫相關知識

承接上篇通用流程,本篇深入 myisamchk(同樣適用 isamchk)的**三種檢查深度模式**,對比執行時間、覆蓋範圍、適用場景,給出生產環境選擇建議。

三種檢查模式對比

模式命令參數檢查深度耗時能發現適用場景
標準檢查 (預設)myisamchk tbl_name
-s / --silent 靜默
索引結構完整性、鍵值指向正確性快99.99% 常見錯誤(索引損壞、鍵值錯位)**日常例行巡檢首選**
擴展檢查myisamchk -e tbl_name
--extend-check
**逐行讀取資料檔**,驗證每行每鍵確實指向正確行極慢 (大表小時級)資料檔損壞、位元翻轉、極罕見索引/資料不一致懷疑資料檔損壞、標準檢查無錯但業務異常時
中等檢查myisamchk -m tbl_name
--medium-check
介於標準與擴展之間中等部分資料檔問題意義有限,**極少使用**

實戰參數組合推薦

# 1. 日常巡檢(Cron 靜默、僅報錯、跳過未變更表)
myisamchk -s -C /datadir/*/*.MYI

# 2. 懷疑資料損壞深度掃描(維護窗口、離線)
myisamchk -e -v /datadir/suspicious_table.MYI
# -v 顯示進度,最多報 20 個錯誤後繼續

# 3. 僅檢查自上次檢查後被修改的表(配合 -C)
myisamchk -s -C /datadir/*/*.MYI

關鍵選項速查

選項短參作用
--silent-s僅輸出錯誤訊息,適合 Cron 避免垃圾郵件
--extend-check-e逐行驗證資料檔,最徹底但最慢
--medium-check-m中等深度,鮮用
--information-i輸出表統計資訊(行數、索引長度、碎片率等)
--check-only-changed-C跳過未修改表,大幅加快巡檢
--verbose-v詳細輸出,配合 -e 可見進度
--fast-F同 -C,僅檢查未正確關閉的表

判斷準則:檢查無錯但業務仍異常怎麼辦?

  1. 確認 -e 擴展檢查也無錯誤 → 表結構與資料檔完好。
  2. 排查:SQL 寫法錯誤(邏輯 Bug)、優化器選錯計劃(統計資訊過期 → ANALYZE TABLE)、引擎 Bug(升級版本)、硬體故障(記憶體/ECC 錯誤、磁碟壞軌)。
  3. 收集 EXPLAIN、SHOW PROFILE、錯誤日誌、核心轉儲,提交官方 Bug 或社區求助。

自動化巡檢腳本範本 (Cron 每日 03:00)

#!/bin/bash
# /usr/local/mysql/bin/check_tables.sh
DATADIR="/usr/local/mysql/var"
LOG="/var/log/mysql/check_tables.log"

cd "$DATADIR" || exit 1
/usr/local/mysql/bin/myisamchk -s -C *.MYI >> "$LOG" 2>&1
# 非零退出碼表示有錯誤,Cron 會郵件通知 root

部署:0 3 * * * mysql /usr/local/mysql/bin/check_tables.sh(以 mysql 使用者跑,避免權限問題)。

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