承接上篇通用流程,本篇深入 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,僅檢查未正確關閉的表 |
-e 擴展檢查也無錯誤 → 表結構與資料檔完好。ANALYZE TABLE)、引擎 Bug(升級版本)、硬體故障(記憶體/ECC 錯誤、磁碟壞軌)。EXPLAIN、SHOW PROFILE、錯誤日誌、核心轉儲,提交官方 Bug 或社區求助。#!/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 使用者跑,避免權限問題)。