Zabbix 监控 MySQL 数据库的关键模板配置详解
以下针对 主从同步 和 连接数 两大核心场景,分步骤说明配置流程(基于 Zabbix 5.0+ 和 MySQL 8.0+):
一、基础环境准备
-
Zabbix Agent 配置
- 在 MySQL 服务器安装 Zabbix Agent
- 修改 Agent 配置文件(
zabbix_agentd.conf):UserParameter=mysql[*], mysql -h 127.0.0.1 -u zabbix -pPASSWORD -e "$1" 2>/dev/null | awk 'NR>1'注:
zabbix需替换为监控专用账户,PASSWORD替换为实际密码
-
MySQL 监控账户授权
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'StrongPassword!'; GRANT REPLICATION CLIENT, PROCESS, SHOW DATABASES ON *.* TO 'zabbix'@'localhost'; FLUSH PRIVILEGES;
二、主从同步监控配置
核心指标:Slave_IO_Running、Slave_SQL_Running、Seconds_Behind_Master
-
创建监控项(Items)
键值 (Key) 说明 mysql["SHOW SLAVE STATUS"]获取主从状态全量信息 -
数据预处理(Preprocessing)
- 步骤 1:JSONPath 提取
$.Slave_IO_Running $.Slave_SQL_Running $.Seconds_Behind_Master - 步骤 2:布尔值转换(针对
*_Running字段)
Yes→1,No→0
- 步骤 1:JSONPath 提取
-
触发器(Triggers)设计
# 从库复制中断 {host:mysql["SHOW SLAVE STATUS"].Slave_IO_Running.last()} = 0 OR {host:mysql["SHOW SLAVE STATUS"].Slave_SQL_Running.last()} = 0 # 主从延迟过高(>300秒) {host:mysql["SHOW SLAVE STATUS"].Seconds_Behind_Master.last()} > 300
三、连接数监控配置
核心指标:Threads_connected(当前连接数)、max_connections(最大连接数)
-
监控项键值
键值 (Key) 说明 mysql["SHOW STATUS LIKE 'Threads_connected'"]当前连接数 mysql["SHOW VARIABLES LIKE 'max_connections'"]最大允许连接数 -
连接率计算公式
连接率 $R$ 定义为:
$$ R = \frac{\text{Threads_connected}}{\text{max_connections}} \times 100% $$
在 Zabbix 中通过 Calculated Item 实现:(last("mysql[Threads_connected]") / last("mysql[max_connections]")) * 100 -
关键触发器
# 连接数超过90%容量 {host:mysql_connection_ratio.last()} > 90 # 连接数异常激增(1分钟内增长>50) change(/host/mysql["Threads_connected"],1m) > 50
四、模板导入与验证
-
模板文件
- 下载官方 MySQL 模板:Zabbix GitLab Template
- 或手动创建:将上述 Items/Triggers 导出为 XML
-
链路测试
zabbix_agentd -t "mysql[SHOW SLAVE STATUS]" # 预期返回:Slave_IO_Running:Yes Slave_SQL_Running:Yes ... -
监控效果
- 主从状态仪表盘:
- 连接数趋势图:
graph LR A[当前连接数] --> B[阈值告警区] C[最大连接数] -.-> D[安全缓冲区]
五、故障排查要点
- 权限问题:确保
zabbix账户有REPLICATION CLIENT权限 - 超时处理:在 Item 的 Timeout 设置 >10s(避免网络延迟)
- 安全建议:
- 使用 TLS 加密 Agent 与 MySQL 的通信
- 通过
Proxy代理访问生产环境数据库
最终效果:当主从复制中断或连接数暴增时,Zabbix 将在 10 秒内触发告警并推送至钉钉/邮件。
1344

被折叠的 条评论
为什么被折叠?



