首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

mysqlcheck 線上資料表檢查、修復與優化完整指南

     編輯:MySQL 綜合教學

一、核心優勢:線上操作無需停機

mysqlcheck 透過 SQL 指令(CHECK/REPAIR/ANALYZE/OPTIMIZE TABLE)與運行中的 mysqld 互動,不需停止服務 即可維護 MyISAM/InnoDB 表,適合生產環境零停機維護。

二、三種呼叫方式

# 1. 指定資料庫與表
mysqlcheck [選項] db_name [tbl1 tbl2...]

# 2. 指定多個資料庫
mysqlcheck [選項] --databases db1 [db2...]

# 3. 所有資料庫
mysqlcheck [選項] --all-databases

三、預設行為與重命名技巧

  • 預設執行 --check(檢查)
  • 複製/符號連結改名可改變預設動作:

四、核心參數詳解

執行檔名稱等效預設參數
mysqlrepair--repair
mysqlanalyze--analyze
mysqloptimize--optimize
參數短參功能適用場景
--check-c檢查錯誤(預設)例行巡檢
--repair-r修復損壞表發現錯誤後
--analyze-a更新索引統計資訊大量寫入後、查詢計畫異常
--optimize-o整理碎片、更新統計大量 DELETE/UPDATE 後、MyISAM 定期
--auto-repair-檢查發現錯誤自動修復無人值守維護
--check-only-changed-C只檢查已變更/未正確關閉的表大量表環境加速巡檢
--fast-F只檢查未正確關閉的表快速巡檢
--medium-check-m99.99% 錯誤偵測,較 extended 快平衡速度與完整度
--extended-e100% 完整檢查/修復,極慢嚴重損壞、最後手段
--quick-q檢查:不掃描資料列;修復:只修索引樹極大表、追求速度
--force-f遇 SQL 錯誤繼續處理後續表批次處理多資料庫
--all-databases-A處理所有資料庫全例維護
--databases-B後續參數視為資料庫名指定多庫
--tables-覆蓋 -B,後續參數視為表名混合指定庫/表

五、連線與輸出控制

參數說明
-u user / -p[pass]認證資訊
-h host / -P port / -S socket連線目標
--compress啟用壓縮協議
--silent / -s僅輸出錯誤訊息
--verbose / -v詳細輸出各階段資訊
--debug輸出除錯日誌

六、實戰範例

# 每日自動巡檢並修復所有資料庫(建議加入 crontab)
mysqlcheck -u root -p --auto-repair --check-only-changed --all-databases -s

# 僅優化特定資料庫的大表(避免長時間鎖表)
mysqlcheck -u root -p --optimize --tables mydb big_table1 big_table2 -v

# 遠端主機巡檢,壓縮傳輸
mysqlcheck -h 10.0.1.50 -u monitor -p --medium-check --all-databases --compress

七、InnoDB 特別說明

  • InnoDB 不支援 REPAIR TABLE,損壞時需從備份還原或使用 innodb_force_recovery
  • ANALYZE TABLE 對 InnoDB 為即時更新統計(持久統計 5.6+ 需 innodb_stats_persistent=ON)
  • OPTIMIZE TABLE 實際執行 ALTER TABLE ... ENGINE=InnoDB 重建表,會鎖表,大表慎用

八、myisamchk 對比

myisamchk 需離線操作(停止 mysqld),直接操作檔案,修復能力更強(可處理 .MYI 損壞),但不可在線上使用。兩者互補:線上用 mysqlcheck,離線深度修復用 myisamchk。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved