萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

mysqladmin 命令大全:從服務監控到資料庫管理的運維瑞士軍刀

mysqladmin 定位

MySQL 官方管理客戶端,透過協定與伺服器交互,執行**管理類**操作 (非 DML/DDL),適合腳本自動化、監控採集、緊急處理。

核心命令分類速查

類別命令功能典型用途
服務控制shutdown優雅關閉服務器 (等同 systemctl stop mysqld)自動化備份前停庫、維護窗口關機
start-slave / stop-slave啟動/停止複寫 (舊版)複寫控制 (8.0+ 用 START/STOP REPLICA)
reload重新載入授權表 (等同 FLUSH PRIVILEGES)手動修改授權表後生效
狀態監控status簡要狀態:Uptime、Threads、Questions、Slow queries、Opens、Open tables、Memory健康檢查、Prometheus exporter 採集
extended-status完整狀態變數 (數百項)深度效能分析、Grafana 儀表板
variables顯示所有系統變數配置審計、差異對比
version版本資訊 (版本號、協定、Socket、字元集)腳本版本檢查、相容性判斷
ping檢查服務存活 (回傳 mysqld is alive)存活探針、負載均衡健康檢查
日誌與快取flush-logs關閉重開所有日誌 (Binlog、Error、Slow、General)日誌切割腳本配合 logrotate
flush-tables關閉所有開啟表、清理查詢快取備份前鎖表、釋放鎖
flush-hosts清理主機快取 (解除連線錯誤計數封鎖)解決 Host blocked 錯誤
flush-privileges重載授權表 (同 reload)直接修改授權表後
資料庫/表管理create db_name建立資料庫自動化佈署建庫
drop db_name刪除資料庫及所有表 (慎用!)測試環境清理
create db_name.tbl_name**不支援**建表 (需用 mysql 客戶端)—
執行緒管理processlist顯示執行緒列表 (同 SHOW PROCESSLIST)找長查詢、Kill 惡意連線
kill id,id...終止指定執行緒緊急停止失控查詢
debug寫除錯資訊到錯誤日誌 (需 debug 編譯版)開發除錯
密碼管理password new_pass修改當前使用者密碼腳本輪換密碼
password new_pass -u user -pold_pass修改指定使用者密碼 (需舊密碼)管理員重置密碼

實戰腳本範例

1. 服務存活監控 (Nagios/Zabbix/Prometheus Blackbox)

#!/bin/bash
# check_mysql.sh
HOST=${1:-127.0.0.1}
PORT=${2:-3306}
USER="monitor"
PASS="MonitorPass#2024"

if mysqladmin -h"$HOST" -P"$PORT" -u"$USER" -p"$PASS" ping --silent; then
    echo "OK: MySQL is alive"
    exit 0
else
    echo "CRITICAL: MySQL ping failed"
    exit 2
fi

2. 關鍵指標採集 (Prometheus textfile collector)

#!/bin/bash
# collect_mysql_status.sh
OUT="/var/lib/prometheus/node-exporter/mysql_status.prom"
TMP="${OUT}.$$"
mysqladmin -h127.0.0.1 -umonitor -p'MonitorPass#2024' extended-status | awk -F'|' '
  NR>3 && $2!="" {
    gsub(/^[ \t]+|[ \t]+$/, "", $2)
    gsub(/^[ \t]+|[ \t]+$/, "", $3)
    printf "mysql_global_status_%s %s\n", tolower($2), $3+0
  }' > "$TMP" && mv "$TMP" "$OUT"

3. 緊急 Kill 長查詢 (超過 60 秒)

#!/bin/bash
# kill_long_queries.sh
mysqladmin -uroot -p'RootPass' processlist | awk '$7>60 && $5=="Query" {print $2}' | xargs -r -I{} mysqladmin -uroot -p'RootPass' kill {}
# 或更安全:只 Kill 特定使用者/特定 SQL 特徵

4. 日誌輪轉配合 (logrotate 片段)

/var/lib/mysql/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    sharedscripts
    postrotate
        mysqladmin -uroot -p'RootPass' flush-logs > /dev/null 2>&1 || true
    endscript
}

5. 連線錯誤計數清零 (解除 Host blocked)

mysqladmin -uroot -p'RootPass' flush-hosts

常用選項

選項說明
-u, --user=name連線使用者
-p, --password[=pass]密碼 (命令列明文有風險,建議 --defaults-extra-file)
-h, --host=host主機 (預設 localhost 走 Socket)
-P, --port=#埠號
-S, --socket=pathUnix Socket 路徑
--protocol={TCP|SOCKET|PIPE|MEMORY}強制協定
--compress啟用壓縮協定
--connect-timeout=#連線超時 (秒)
--shutdown-timeout=#關機等待超時 (秒)
--verbose (-v)詳細輸出
--debug[=#]除錯追蹤
--default-character-set=charset連線字元集
--defaults-extra-file=path讀取額外配置檔 (密碼不進命令列/歷史)

命令縮寫規則

支援**唯一前綴縮寫**:

mysqladmin proc stat          # processlist + status
mysqladmin ver                # version
mysqladmin flush-hosts        # flush-hosts
mysqladmin kill 12 13 14      # kill 多個 ID

避坑指南

  • 密碼安全:生產腳本**必須**使用 --defaults-extra-file=/etc/mysql/monitor.cnf (權限 600),禁止明文密碼進命令列/歷史/程序表。
  • shutdown **需 SUPER/Shutdown 權限**,監控帳號通常無此權限,勿混用。
  • flush-logs 會產生新 Binlog 檔案,確保備份腳本配合 FLUSH LOGS 獲取一致性切點。
  • kill 僅終止執行緒,**不回滾已提交交易**,長事務 Kill 後回滾可能耗時極久。
  • Windows 下 mysqladmin.exe 行為一致,路徑用正斜線或雙反斜線。
copyright © 萬盛學電腦網 all rights reserved