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 | 修改指定使用者密碼 (需舊密碼) | 管理員重置密碼 |
#!/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
#!/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"
#!/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 特徵
/var/lib/mysql/*.log {
daily
rotate 7
compress
missingok
notifempty
sharedscripts
postrotate
mysqladmin -uroot -p'RootPass' flush-logs > /dev/null 2>&1 || true
endscript
}
mysqladmin -uroot -p'RootPass' flush-hosts
| 選項 | 說明 |
|---|---|
-u, --user=name | 連線使用者 |
-p, --password[=pass] | 密碼 (命令列明文有風險,建議 --defaults-extra-file) |
-h, --host=host | 主機 (預設 localhost 走 Socket) |
-P, --port=# | 埠號 |
-S, --socket=path | Unix 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 後回滾可能耗時極久。mysqladmin.exe 行為一致,路徑用正斜線或雙反斜線。