首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 批量檢查修復優化表腳本:mysqlcheck 一鍵自動化 vs Shell 精細控制

     編輯:MySQL 資料庫相關知識

方案一:Shell 精細控制(可見、可控、可審計)

#!/bin/bash
HOST=192.168.0.123
USER=xiaomo
PWD=my_pwd
DB=my_db_name
NEED_OPTIMIZE=true

TABLES=$(mysql -h$HOST -u$USER -p$PWD $DB -A -Bse "SHOW TABLES")

for TBL in $TABLES; do
  # 1. 檢查
  CHECK_RESULT=$(mysql -h$HOST -u$USER -p$PWD $DB -A -Bse "CHECK TABLE $TBL" | awk '{print $4}')
  if [[ "$CHECK_RESULT" == "OK" ]]; then
    echo "[$TBL] OK, no repair needed"
  else
    echo "[$TBL] Check failed: $CHECK_RESULT, repairing..."
    mysql -h$HOST -u$USER -p$PWD $DB -A -Bse "REPAIR TABLE $TBL"
  fi

  # 2. 優化(可選)
  if [[ "$NEED_OPTIMIZE" == "true" ]]; then
    echo "[$TBL] Optimizing..."
    mysql -h$HOST -u$USER -p$PWD $DB -A -Bse "OPTIMIZE TABLE $TBL"
  fi
done

方案二:mysqlcheck 官方工具(簡單、全自動、但耗時長、可視性弱)

# 檢查並自動修復所有庫所有表
mysqlcheck -h $HOST -u $USER -p$PWD --auto-repair --check --all-databases

# 僅優化指定庫
mysqlcheck -h $HOST -u $USER -p$PWD --optimize $DB

# 組合:檢查、修復、優化、分析
mysqlcheck -h $HOST -u $USER -p$PWD --check --auto-repair --optimize --analyze $DB

對比選型指南

維度Shell 腳本mysqlcheck
可視性高(逐表輸出狀態、決策邏輯)低(聚合輸出,難定位問題表)
可控性強(可加條件判斷、跳過、告警)弱(全量執行,難干預單表)
執行效率可並行化改造串行,大庫極慢
適用場景生產常規維護、需審計留痕測試環境、小庫、一次性全檢

進階增強建議

  1. 碎片率判斷優化: 僅對 Data_free / Data_length > 20% 的表執行 OPTIMIZE
  2. 並行處理: xargs -P 4 -I {} sh -c '...' <<< "$TABLES"(注意連接數限制)
  3. 異常告警: REPAIR 失敗/ OPTIMIZE 超時 → Webhook 通知 DBA
  4. 審計日志: 輸出 JSON 格式入庫,支援歷史趨勢分析

總結

**生產環境首選 Shell 精細控制**,邏輯透明、可干預、可審計;**mysqlcheck 適合測試/小庫快速全檢**。將腳本納入定時任務(如每周日 02:00),配合碎片率閾值動態優化,讓表維護從「被動救火」轉為「主動養護」。

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