mysqlcheck 是 MySQL 官方提供的客戶端工具,功能對標 myisamchk,但無需停止服務即可線上操作 MyISAM 表(InnoDB 部分操作亦支援)。底層映射至 CHECK/REPAIR/ANALYZE/OPTIMIZE TABLE SQL 語句。
mysqlcheck [options] db_name [tbl_name ...]
mysqlcheck [options] --databases DB1 [DB2 ...]
mysqlcheck [options] --all-databases
--all-databases 等同列出所有庫名。| 短選項 | 長選項 | 功能 |
|---|---|---|
| -c | --check | 檢查錯誤(預設行為) |
| -r | --repair | 修復損壞 |
| -a | --analyze | 分析表(更新索引統計) |
| -o | --optimize | 優化表(整理碎片、重建索引) |
| --auto-repair | 檢查發現損壞自動修復 | |
| -q | --quick | 檢查:僅檢查索引鏈接;修復:僅修復索引樹(最快) |
| -F | --fast | 僅檢查未正確關閉的表 |
| -m | --medium-check | 99.99% 錯誤覆蓋,速度介於 quick 與 extended 之間 |
| -e | --extended | 100% 一致性檢查(極慢);修復時執行延伸修復(產生大量垃圾行) |
| -C | --check-only-changed | 僅檢查上次檢查後有變更或未正確關閉的表 |
| -1 | --all-in-1 | 每庫發送單一 SQL 處理所有表(減少網路往返) |
| -f | --force | 遇 SQL 錯誤繼續處理後續表 |
| -s | --silent | 僅輸出錯誤訊息 |
| -v | --verbose | 詳細輸出各階段資訊 |
mysqlrepair → 預設 --repairmysqlanalyze → 預設 --analyzemysqloptimize → 預設 --optimize可用符號連結或複製二進制檔實現:ln -s mysqlcheck mysqlrepair。
-h, --host=host_name
-P, --port=port_num
-u, --user=user_name
-p, --password[=pass]
-S, --socket=path
--protocol={TCP|SOCKET|PIPE|MEMORY}
--compress
# 每日維護窗口:快速檢查+自動修復所有庫
mysqlcheck --auto-repair --fast --all-databases -u root -p
# 深度檢查特定庫(維護窗口較長時)
mysqlcheck --extended --all-databases -u root -p
# 僅優化碎片嚴重的表
mysqlcheck --optimize --check-only-changed db_name -u root -p
mysqlcheck 讓線上維護零停機成為可能,配合 cron/Windows 排程器 實現自動化巡檢。