解決方案:MySQL 內建 `mysqlcheck` 客戶端,支援**線上、全自動、所有引擎**的檢查/修復/優化/分析。
| 操作 | 指令 | 適用引擎 | 說明 |
|---|---|---|---|
| 檢查所有資料庫 | `mysqlcheck -A -c -u root -p` | MyISAM/InnoDB/其他 | 僅檢查,不修改 |
| 檢查並自動修復 | `mysqlcheck -A -c -r -u root -p` | MyISAM/Archive/CSV | InnoDB 僅檢查(自帶崩潰恢復) |
| 檢查+修復+優化 | `mysqlcheck -A -c -r -o -u root -p` | MyISAM/InnoDB | 生產推薦全能指令 |
| 指定資料庫 | `mysqlcheck -c -r -o db_name -u root -p` | 同上 | 單庫維護 |
| 指定資料庫+表 | `mysqlcheck -c -r -o db_name tbl1 tbl2 -u root -p` | 同上 | 精準維護 |
| 僅優化(整理碎片) | `mysqlcheck -A -o -u root -p` | MyISAM/InnoDB | 定期執行回收空間 |
| 僅分析(更新統計資訊) | `mysqlcheck -A -a -u root -p` | 所有 | 優化器決策依據 |
$ mysqlcheck -A -o -r -p Enter password: db1.tbl1 OK db1.tbl2 OK db2.tbl3 note : Table is already up to date db2.tbl4 error : Can't create new tempfile: './db2/tbl4.MYD' status : Operation failed
關鍵狀態碼:
# 每日 03:00 全庫檢查修復優化(低峰期) 0 3 * * * /usr/bin/mysqlcheck -A -c -r -o --silent -u root -p'******' >> /var/log/mysqlcheck.log 2>&1 # 每週日 04:00 深度分析更新統計 0 4 * * 0 /usr/bin/mysqlcheck -A -a --silent -u root -p'******' >> /var/log/mysqlcheck.log 2>&1
⚠️ **生產環境建議**:
| 操作 | MyISAM | InnoDB | Memory/Heap |
|---|---|---|---|
| CHECK | 完整校驗和檢查 | 頁面校驗和+索引一致性 | 不支援 |
| REPAIR | 重建索引/資料檔 | **不支援**(依賴崩潰恢復) | 不支援 |
| OPTIMIZE | 整理碎片/排序索引 | 重建表 (ALTER TABLE) | 不支援 |
| ANALYZE | 更新索引基數 | 採樣更新統計資訊 | 不支援 |
`mysqlcheck` 以單一指令覆蓋「檢查、修復、優化、分析」四大維護動作,是 DBA 日常運維的瑞士刀。配合靜默模式、定時排程、錯誤日誌告警,即可構建「設定後自動運行」的資料庫健康管理體系。記住:InnoDB 依賴崩潰恢復而非 REPAIR,大表優化請用線上結構變更工具。