修復所有數據庫
mysqlcheck --auto-repair -A -o -uroot -p'yourpass'
-A / --all-databases:所有庫;
-o / --optimize:修復後優化(整理碎片、更新統計);
--auto-repair:檢測到損壞自動修復。
修復單一數據庫
mysqlcheck --auto-repair --databases db_name -o -uroot -p'yourpass'
參數速查
| 參數 | 作用 |
-c / --check | 僅檢查不修復 |
-r / --repair | 修復(不自動,需配合 --auto-repair) |
-a / --analyze | 分析鍵分佈(優化器統計) |
-o / --optimize | 優化表(MyISAM 整理碎片、InnoDB 重建) |
-q / --quick | 僅檢查索引,不掃描數據行(快) |
-F / --fast | 僅檢查未正確關閉的表 |
引擎差異
- MyISAM:
mysqlcheck 等同 myisamchk,可離線運行(停庫),速度更快;
- InnoDB:
mysqlcheck 執行 CHECK TABLE / REPAIR TABLE(實為 ALTER TABLE ... ENGINE=InnoDB 重建),需在線運行;
- 生產環境建議從庫執行,避免主庫鎖表影響業務。
定時任務建議
# crontab -e
0 3 * * 0 /usr/bin/mysqlcheck --auto-repair -A -o -uroot -p'pass' >> /var/log/mysqlcheck.log 2>&1
# 每週日 3 點全庫檢查修復優化