mysqladmin 是 MySQL 官方提供的**管理型客戶端**,專門執行伺服器級操作 (關機、刷新、狀態、帳號、備份協調),不處理業務查詢。支援本地/遠程、TCP/Socket/Pipe/Shared Memory 多種協議。
| 參數 | 短參 | 說明 | 範例 |
|---|---|---|---|
--host | -h | 目標主機 IP/主機名 | -h 10.101.0.1 |
--user | -u | 登入帳號 | -u root |
--password | -p | 密碼 (緊跟無空格或留空交互輸入) | -pPass123 |
--port | -P | 埠號 (預設 3306) | -P 3307 |
--socket | -S | Unix Socket 路徑 | -S /tmp/mysql.sock |
--protocol | 強制協議 | --protocol=tcp | |
--silent | -s | 連線失敗靜默退出 (腳本友好) | -s |
--wait | -w | 連線失敗重試 (秒) | -w 5 |
--vertical | -E | 垂直顯示輸出 (寬表易讀) | -E |
--connect-timeout | 連線逾時秒數 | --connect-timeout=10 | |
--shutdown-timeout | 關機等待秒數 | --shutdown-timeout=60 |
| 命令 | 功能 | 典型場景 |
|---|---|---|
ping | 檢查服務存活 | 健康檢查、啟動腳本就緒探針 |
status | 簡短狀態 (Uptime、Threads、Questions、Slow queries) | 快速巡檢 |
extended-status | 完整狀態變數 (等同 SHOW GLOBAL STATUS) | 效能指標採集 (Prometheus Exporter) |
variables | 顯示系統變數 (等同 SHOW GLOBAL VARIABLES) | 配置審計、差異對比 |
processlist | 顯示執行緒清單 | 阻塞分析、Kill 長查詢 |
kill id,id... | 殺掉指定線程 | 緊急終止失控查詢 |
shutdown | **正常關閉伺服器** | 維護窗口、自動化部署前置 |
reload | 重新授權表 + 關閉/重開日誌 | 修改權限後生效、Logrotate 配合 |
flush-hosts | 清理 Host 快取 (解決 Host blocked) | 連線錯誤過多導致封鎖 |
flush-logs | 切換二進制/錯誤/慢查詢日誌 | 手動輪轉、備份前切割 |
flush-tables | 關閉所有開啟表 (刷新到磁碟) | 備份前凍結、DDL 前準備 |
flush-privileges | 重載授權表 (同 reload) | 權限變更後 |
create/drop db_name | 建立/刪除資料庫 | 自動化部署腳本 |
password new_pwd | 修改當前用戶密碼 | 輪換密碼腳本 |
version | 顯示版本資訊 | 資產掃描、相容性檢查 |
start-slave / stop-slave | 控制複寫 SQL/IO 線程 | 延遲處理、拓撲變更 |
# 1. 停止寫入流量 (應用層下線/切換)
# 2. 刷新表確保資料落盤
mysqladmin -h 10.101.0.1 -u admin -p'Pass123' flush-tables
# 3. 正常關機 (等待進行中交易提交)
mysqladmin -h 10.101.0.1 -u admin -p'Pass123' shutdown
# 4. 驗證程序已退出
ssh 10.101.0.1 "ps -ef | grep mysqld | grep -v grep"
# 取得超過 60 秒的查詢 ID
mysqladmin -h 10.101.0.1 -u admin -p'Pass123' processlist | \
awk '$6 > 60 && $3 != "system user" {print $2}' | \
xargs -r -I {} mysqladmin -h 10.101.0.1 -u admin -p'Pass123' kill {}
#!/bin/bash
# mysql_metrics.sh
HOST="10.101.0.1"
USER="monitor"
PASS="MonPass123"
mysqladmin -h$HOST -u$USER -p$PASS extended-status | \
awk -F'|' '/^[|] / {gsub(/ /,"",$2); gsub(/ /,"",$3); print "mysql_"tolower($2)" "$3}' | \
grep -E 'mysql_(uptime|threads_connected|questions|slow_queries|innodb_buffer_pool_read_requests|innodb_buffer_pool_reads|handler_read_key|handler_read_rnd_next)'
mysqladmin -u root -p --protocol=pipe --socket=MySQL shutdown
mysqladmin -u root -p --protocol=memory shutdown
SHUTDOWN 權限:執行 shutdown、kill。PROCESS 權限:執行 processlist、kill 他人線程。RELOAD 權限:執行 flush-*、reload。SUPER 權限:start-slave/stop-slave、set global 變數。建議建立專用管理帳號:CREATE USER 'admin'@'10.101.0.%' IDENTIFIED BY 'StrongPass'; GRANT SHUTDOWN, PROCESS, RELOAD, SUPER ON *.* TO 'admin'@'10.101.0.%';
| 現象 | 原因 | 解決 |
|---|---|---|
| Access denied for user 'root'@'10.101.0.5' | root 預設只允許 localhost | 建立遠程管理帳號或修改 root host |
| Can't connect to MySQL server on '10.101.0.1' (10060) | 防火牆/安全組阻擋 3306 | 開放埠、確認 bind-address=0.0.0.0 |
| shutdown 後資料遺失 | 未先 flush-tables / innodb_fast_shutdown=0 | 關機前 flush-tables、設 innodb_fast_shutdown=0 |
mysqladmin 輕量、無依賴、支援所有 MySQL 版本,是自動化運維、CI/CD 流水線、緊急故障處理的**瑞士刀**。熟練掌握其參數與命令組合,讓遠程管理如同本地操作般絲滑。