myisamchk,但無需停庫 (mysqld 運行時即可操作),業務零中斷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 |
-q | --quick | 快速模式:檢查不掃描行/修復只修索引樹 | - |
-F | --fast | 僅檢查未正常關閉的表 | - |
-m | --medium-check | 中等強度檢查 (99.99% 覆蓋率,速度快) | - |
-e | --extended | 深度檢查/修復 (極慢,產生垃圾行) | - |
--auto-repair | 檢查發現損壞自動修復 | - | |
-A | --all-databases | 處理所有庫 | - |
-B | --databases | 後續參數視為庫名 | - |
--tables | 覆蓋 -B,後續參數視為表名 | - |
mysqlcheck -c -r -a -o --auto-repair --all-databases -u root -p
-c 檢查 → --auto-repair 發現壞塊自動修 → -a 更新統計 → -o 整理碎片OPTIMIZE TABLE 映射為 ALTER TABLE ... FORCE 重建表,會鎖表,大表慎用!建議分表執行或用 pt-online-schema-changemysqlcheck -r -o -u root -p db_name
mysqlcheck -a --all-databases -u root -p
mysqlcheck -F --all-databases -u root -p
mysqlcheck 根據可執行文件名 決定默認動作:
| 命令名 (複製/軟鏈接) | 默認動作 | 等效參數 |
|---|---|---|
mysqlrepair | 修復 | --repair |
mysqlanalyze | 分析 | --analyze |
mysqloptimize | 優化 | --optimize |
# 創建別名示例 cp /usr/bin/mysqlcheck /usr/bin/mysqlrepair ln -s /usr/bin/mysqlcheck /usr/bin/mysqlanalyze
$MYSQL_HOME/bin/mysqlcheck--character-sets-dir=path # 字符集目錄
--compress # 壓縮傳輸 (客戶端/服務端均支持時)
--debug[=#] # 調試日志
--default-character-set=charset
--force, -f # 忽略 SQL 錯誤繼續
--host=host, -h host
--password[=pwd], -p[pwd]
--port=#, -P #
--protocol={TCP|SOCKET|PIPE|MEMORY}
--silent, -s # 僅輸出錯誤
--socket=path, -S path
--user=user, -u user
--verbose, -v # 詳細過程輸出
--version, -V
pt-osc 或 gh-ost 在線重建--auto-repair 僅限 MyISAM:InnoDB 損壞通常需重啟實例通過 Redo/Undo Log 自動恢復,或從備份恢復