一、核心優勢:線上操作無需停機
mysqlcheck 透過 SQL 指令(CHECK/REPAIR/ANALYZE/OPTIMIZE TABLE)與運行中的 mysqld 互動,不需停止服務 即可維護 MyISAM/InnoDB 表,適合生產環境零停機維護。
二、三種呼叫方式
# 1. 指定資料庫與表
mysqlcheck [選項] db_name [tbl1 tbl2...]
# 2. 指定多個資料庫
mysqlcheck [選項] --databases db1 [db2...]
# 3. 所有資料庫
mysqlcheck [選項] --all-databases
三、預設行為與重命名技巧
- 預設執行
--check(檢查)
- 複製/符號連結改名可改變預設動作:
| 執行檔名稱 | 等效預設參數 |
mysqlrepair | --repair |
mysqlanalyze | --analyze |
mysqloptimize | --optimize |
四、核心參數詳解
| 參數 | 短參 | 功能 | 適用場景 |
--check | -c | 檢查錯誤(預設) | 例行巡檢 |
--repair | -r | 修復損壞表 | 發現錯誤後 |
--analyze | -a | 更新索引統計資訊 | 大量寫入後、查詢計畫異常 |
--optimize | -o | 整理碎片、更新統計 | 大量 DELETE/UPDATE 後、MyISAM 定期 |
--auto-repair | - | 檢查發現錯誤自動修復 | 無人值守維護 |
--check-only-changed | -C | 只檢查已變更/未正確關閉的表 | 大量表環境加速巡檢 |
--fast | -F | 只檢查未正確關閉的表 | 快速巡檢 |
--medium-check | -m | 99.99% 錯誤偵測,較 extended 快 | 平衡速度與完整度 |
--extended | -e | 100% 完整檢查/修復,極慢 | 嚴重損壞、最後手段 |
--quick | -q | 檢查:不掃描資料列;修復:只修索引樹 | 極大表、追求速度 |
--force | -f | 遇 SQL 錯誤繼續處理後續表 | 批次處理多資料庫 |
--all-databases | -A | 處理所有資料庫 | 全例維護 |
--databases | -B | 後續參數視為資料庫名 | 指定多庫 |
--tables | - | 覆蓋 -B,後續參數視為表名 | 混合指定庫/表 |
五、連線與輸出控制
| 參數 | 說明 |
-u user / -p[pass] | 認證資訊 |
-h host / -P port / -S socket | 連線目標 |
--compress | 啟用壓縮協議 |
--silent / -s | 僅輸出錯誤訊息 |
--verbose / -v | 詳細輸出各階段資訊 |
--debug | 輸出除錯日誌 |
六、實戰範例
# 每日自動巡檢並修復所有資料庫(建議加入 crontab)
mysqlcheck -u root -p --auto-repair --check-only-changed --all-databases -s
# 僅優化特定資料庫的大表(避免長時間鎖表)
mysqlcheck -u root -p --optimize --tables mydb big_table1 big_table2 -v
# 遠端主機巡檢,壓縮傳輸
mysqlcheck -h 10.0.1.50 -u monitor -p --medium-check --all-databases --compress
七、InnoDB 特別說明
- InnoDB 不支援
REPAIR TABLE,損壞時需從備份還原或使用 innodb_force_recovery
ANALYZE TABLE 對 InnoDB 為即時更新統計(持久統計 5.6+ 需 innodb_stats_persistent=ON)
OPTIMIZE TABLE 實際執行 ALTER TABLE ... ENGINE=InnoDB 重建表,會鎖表,大表慎用
八、myisamchk 對比
myisamchk 需離線操作(停止 mysqld),直接操作檔案,修復能力更強(可處理 .MYI 損壞),但不可在線上使用。兩者互補:線上用 mysqlcheck,離線深度修復用 myisamchk。
- 上一篇文章: mysqladmin 管理指令完整手冊與監控腳本實戰
- 下一篇文章: Windows 環境下 MySQL 手動初始化資料目錄完整步驟
Copyright ©
程式碼之家 All Rights Reserved