mysqlcheck 是 MySQL 官方提供的客戶端維護工具,集成了 檢查、修復、分析、優化 四大核心功能,專門針對 MyISAM 表(InnoDB 表部分功能受限)。它實際上是對 SQL 語句 CHECK TABLE、REPAIR TABLE、ANALYZE TABLE、OPTIMIZE TABLE 的命令行封裝。
# 模式1:指定數據庫和表
mysqlcheck [options] db_name [table1 table2 ...]
# 模式2:指定多個數據庫
mysqlcheck [options] --databases db1 [db2 db3 ...]
# 模式3:所有數據庫
mysqlcheck [options] --all-databases
| 短參數 | 長參數 | 功能 | 對應 SQL |
|---|---|---|---|
| -c | --check | 檢查表完整性(默認) | CHECK TABLE |
| -r | --repair | 修復損壞的表 | REPAIR TABLE |
| -a | --analyze | 分析表統計信息 | ANALYZE TABLE |
| -o | --optimize | 優化表(碎片整理) | OPTIMIZE TABLE |
| -A | --all-databases | 處理所有數據庫 | - |
| -B | --databases | 指定多個數據庫 | - |
| -u | --user | 指定用戶名 | - |
| -p | --password | 指定密碼(提示輸入更安全) | - |
| --auto-repair | 檢查發現錯誤時自動修復 | - |
mysqlcheck -u root -p -c test_db
mysqlcheck -u root -p -r test_db
mysqlcheck -u root -p -A --auto-repair
mysqlcheck -u root -p -a -o test_db
mysqlcheck -u root -p -o test_db large_table
通過 crontab 實現每天凌晨低峰期自動優化:
# 編輯定時任務
crontab -e
# 添加以下行(每天 01:00 執行)
0 1 * * * /usr/bin/mysqlcheck -Aao --auto-repair -u root -p'YourPassword' > /dev/null 2>&1
參數說明:-A所有庫 -a分析 -o優化 --auto-repair自動修復。生產環境建議將密碼寫在 [client] 區段的 ~/.my.cnf 中避免進程列表洩露。
innodb_force_recoveryREPAIR TABLE 可能導致數據丟失OPTIMIZE TABLE 需要臨時表空間,確保磁盤剩餘空間 ≥ 表大小 1.5 倍mysqlcheck --skip-database 避免系統庫報錯mysqlcheck 是 DBA 日常維護的利器,掌握其四大核心功能與組合參數,配合定時任務可實現數據庫的自動化健康檢查。記住核心原則:備份優先、低峰操作、MyISAM 專用、監控磁盤。