Zabbix 預設模板無法直接監控 MySQL,需自訂腳本擷取狀態值並定義 Key。本文以 Shell 腳本為例,示範從建立監控帳號、撰寫腳本、設定 Agent、驗證資料到套用模板的完整流程。
zabbix 監控帳號,授予 USAGE 權限。mysql_status 腳本,透過 mysqladmin / mysql 客戶端取得狀態。UserParameter 定義 Key,重啟 Agent。zabbix_get 驗證資料回傳。Template App MySQL 模板。mysql> GRANT USAGE ON *.* TO 'zabbix'@'10.10.10.10' IDENTIFIED BY 'zabbix';
mysql> FLUSH PRIVILEGES;
10.10.10.10 為 Zabbix Agent 所在內網 IP。
# cat /usr/local/zabbix/bin/mysql_status
#!/bin/bash
# 用途:供 Zabbix 取得 MySQL 指定狀態變數值
# 參數:$1=變數名 $2=User $3=Password $4=Host
MYSQL_BIN="/usr/local/mysql/bin/mysql"
VAR=$1
MYSQL_USER=${2:-zabbix}
MYSQL_PASS=${3:-zabbix}
MYSQL_HOST=${4:-10.10.10.10}
if [ -z "$VAR" ]; then
echo "Usage: $0 [user] [pass] [host]"
exit 1
fi
$MYSQL_BIN -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASS -e 'SHOW STATUS' \
| grep -v Variable_name | grep "\b${VAR}\b" | awk '{print $2}'
chmod +x /usr/local/zabbix/bin/mysql_status
# /etc/zabbix/zabbix_agentd.conf 關鍵段落
LogFile=/tmp/zabbix_agentd.log
Server=127.0.0.1,10.10.10.9
ServerActive=127.0.0.1,10.10.10.9
Hostname=agent1
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/
UnsafeUserParameters=1
# 通用狀態變數
UserParameter=mysql.status[*],/usr/local/zabbix/bin/mysql_status $1
# Ping 檢查(回傳 1 表正常)
UserParameter=mysql.ping,/usr/local/mysql/bin/mysqladmin ping -h"mysql IP" -uzabbix -pzabbix | grep alive | wc -l
# 版本資訊
UserParameter=mysql.version,/usr/local/mysql/bin/mysql -h"mysql IP" -uzabbix -pzabbix -e "SELECT VERSION();" | awk 'END {print}'
重啟 Agent:systemctl restart zabbix-agent
zabbix_get -s 10.10.10.10 -k 'mysql.status[Uptime]'
# 預期輸出:3639025
zabbix_get -s 10.10.10.10 -k mysql.version
# 預期輸出:5.5.24-CDB-3.0.0-log
若失敗,在 Agent 端以 zabbix_get -s 127.0.0.1 -k mysql.version 逐層排查。
Configuration → Hosts 選取目標主機 → Templates 標籤 → 搜尋並新增 Template App MySQL → Add → Update。
chmod +x 且 Agent 執行身份可讀取。setsebool -P zabbix_can_network 1 或暫時設為 Permissive。

完成上述設定,Zabbix 即可持續掌握 MySQL 運作狀態(連線數、查詢吞吐、緩衝區命中率等),並可進一步設定觸發器與圖表實現告警與趨勢分析。