mysqlcheck 是 MySQL 官方提供的客戶端工具,可在線 (無需停庫) 對 MyISAM 表進行檢查、修復、優化、分析。功能類似 myisamchk,但後者需離線操作,風險更高。
底層透過執行 SQL 語句實現:CHECK TABLE、REPAIR TABLE、ANALYZE TABLE、OPTIMIZE TABLE。
透過符號鏈接或重命名二進制文件,可改變預設行為:
| 調用名 | 等效預設參數 | 作用 |
|---|---|---|
mysqlcheck | --check | 檢查表 (預設) |
mysqlrepair | --repair | 修復表 |
mysqlanalyze | --analyze | 分析表 (更新統計信息) |
mysqloptimize | --optimize | 優化表 (整理碎片、重建索引) |
# 1. 指定資料庫與表
mysqlcheck [options] db_name [table1 table2 ...]
# 2. 指定多個資料庫
mysqlcheck [options] --databases db1 [db2 db3 ...]
# 3. 所有資料庫
mysqlcheck [options] --all-databases
mysqlcheck -a -c -o -r -m --all-databases -uroot -p
# 參數含義:
# -a, --analyze 分析表
# -c, --check 檢查錯誤
# -o, --optimize 優化表 (MySQL 5.5+ 請移除 -o,OPTIMIZE 在線不支援某些引擎)
# -r, --repair 修復表 (修復除唯一鍵衝突外的大多數問題)
# -m, --medium-check 中等強度檢查 (99.99% 準確,比 extended 快)
mysqlcheck -o -r -uroot -p888888 dataname
# 或自動修復模式
mysqlcheck -hlocalhost --auto-repair -uroot -p****** dataname
| 參數 | 短參數 | 功能描述 |
|---|---|---|
--all-databases | -A | 檢查所有資料庫所有表 |
--analyze | -a | 分析表 (更新索引統計信息,優化器決策依據) |
--auto-repair | 檢查發現損壞自動修復 | |
--check | -c | 檢查表錯誤 (預設動作) |
--check-only-changed | -C | 只檢查上次檢查後已修改或未正確關閉的表 |
--compress | 客戶端-服務端通訊壓縮 | |
--databases | -B | 後續參數視為資料庫名而非表名 |
--extended | -e | 深度檢查 (100% 一致性,極慢) / 擴展修復 (極慢、產生垃圾行) |
--fast | -F | 只檢查未正確關閉的表 |
--force | -f | 遇 SQL 錯誤繼續執行 |
--host | -h | 指定 MySQL 服務器主機 |
--medium-check | -m | 中等強度檢查 (推薦常規使用) |
--optimize | -o | 優化表 (整理碎片、重建索引、更新統計) |
--password | -p | 密碼 (無空格直接跟值,或留空提示輸入) |
--port | -P | TCP 端口 |
--quick | -q | 檢查時不掃描行 (最快) / 修復時只修索引樹 (最快) |
--repair | -r | 修復表 (修復大多數問題,唯一鍵衝突除外) |
--silent | -s | 靜默模式,只輸出錯誤 |
--tables | 覆蓋 --databases,後續參數視為表名 | |
--user | -u | MySQL 用戶名 |
--verbose | -v | 詳細輸出各階段信息 |
bin/ 目錄下找到 mysqlcheck.exe (Windows) 或 mysqlcheck (Linux)mysqlcheck -a -o --all-databasesOPTIMIZE 整理碎片,REPAIR 修復損壞ANALYZE 更新統計信息即可,OPTIMIZE 相當於 ALTER TABLE ... ENGINE=InnoDB 重建表,慎用information_schema.TABLES.DATA_FREE 監控碎片率,超 20% 觸發優化pt-online-schema-change 或規劃維護窗口REPAIR 可能丟失數據,再次強調**備份優先**