当今的数据驱动世界中,确保数据库的高效运行和稳定性至关重要。MySQL作为最流行的开源关系型数据库管理系统之一,在企业级应用中被广泛采用。为了维护MySQL的健康状态,使用Zabbix进行实时监控是必不可少的。本文将详细介绍如何利用Zabbix来监控MySQL服务。
MySQL监控的重要性
MySQL数据库的性能直接影响到应用程序的表现。因此,对关键性能指标(KPIs)进行持续监控可以帮助你及时发现并解决潜在问题。以下是几个重要的监控方面:
监控 MySQL 服务
percona 提供了相关的监控MySQL的插件,不过此项目已经不再开发,官网访问链接已经从首页删除,只能直接从下面链接访问
bash
https://www.percona.com/downloads/percona-monitoring-plugins/
监控MySQL 状态
使用 MySQL 自定义模板,监控mysql性能,可以监控如下内容:OPS(增删改查)、mysql请求流量带宽,mysql响应流量带宽
bash
[root@rocky9 ~]#yum install -y mysql-server
[root@rocky9 ~]#systemctl enable --now mysqld
[root@rocky9 ~]#mysql -e 'create user zabbix@"localhost" identified by "123456"'
[root@rocky9 ~]#grep "^Include" /etc/zabbix/zabbix_agent2.conf
Include=/etc/zabbix/zabbix_agent2.d/*.conf
Include=/etc/zabbix/zabbix_agent2.d/plugins.d/*.conf
[root@rocky9 ~]#vim /etc/zabbix/zabbix_agent2.d/check_mysql.sh
result=`${MYSQL_CONN} status|cut -f2 -d":"|cut -f1 -d"T"`
#!/bin/bash
#!/bin/bash
MYSQL_USER='zabbix'
MYSQL_PWD='123456'
MYSQL_HOST='127.0.0.1'
MYSQL_PORT='3306'
MYSQL_CONN="/usr/bin/mysqladmin -u${MYSQL_USER} -p${MYSQL_PWD} -h${MYSQL_HOST} -P${MYSQL_PORT}"
#MYSQL_CONN=mysql -e "show global status" | awk -v s=$1 '$1 ~ "^"s"$"{print $2}'
if [ $# -ne "1" ];then
echo "arg error!"
fi
case $1 in
Threads)
result=`${MYSQL_CONN} status |awk '{print $4}'`
;;
Uptime)
result=`${MYSQL_CONN} status|cut -f2 -d":"|cut -f1 -d"T"`
;;
Com_update)
result=`${MYSQL_CONN} extended-status |grep -w "Com_update"|cut -d"|" -f3`
;;
Slow_queries)
result=`${MYSQL_CONN} status |cut -f5 -d":"|cut -f1 -d"O"`
;;
Com_select)
result=`${MYSQL_CONN} extended-status |grep -w "Com_select"|cut -d"|" -f3`
;;
Com_rollback)
result=`${MYSQL_CONN} extended-status |grep -w "Com_rollback"|cut -d"|" -f3`
;;
Questions)
result=`${MYSQL_CONN} status|cut -f4 -d":"|cut -f1 -d"S"`
;;
Com_insert)
result=`${MYSQL_CONN} extended-status |grep -w "Com_insert"|cut -d"|" -f3`
;;
Com_delete)
result=`${MYSQL_CONN} extended-status |grep -w "Com_delete"|cut -d"|" -f3`
;;
Com_commit)
result=`${MYSQL_CONN} extended-status |grep -w "Com_commit"|cut -d"|" -f3`
;;
Bytes_sent)
result=`${MYSQL_CONN} extended-status |grep -w "Bytes_sent" |cut -d"|" -f3`
;;
Bytes_received)
result=`${MYSQL_CONN} extended-status |grep -w "Bytes_received" |cut d"|" -f3`
;;
Com_begin)
result=`${MYSQL_CONN} extended-status |grep -w "Com_begin"|cut -d"|" -f3`
;;
*)
echo
"Usage:$0(Threads|Uptime|Com_update|Slow_queries|Com_select|Com_rollback|Questio
ns|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin)"
;;
esac
echo $result
[root@rocky9 ~]#chmod +x /etc/zabbix/zabbix_agent2.d/check_mysql.sh
[root@rocky9 ~]#vim /etc/zabbix/zabbix_agent2.d/mysql.conf
UserParameter=mysql_version,mysql -V
UserParameter=mysql_status[*],/etc/zabbix/zabbix_agent2.d/check_mysql.sh $1 2> /dev/null
UserParameter=mysql_ping,mysqladmin -uzabbix -p123456 -P3306 -h127.0.0.1 ping 2>/dev/null | grep -c alive
[root@rocky9 ~]#systemctl restart zabbix-agent2.service
[root@zabbix-server ~]#zabbix_get -s 192.168.1.7 -p 10050 -k 'mysql_version'
mysql Ver 8.0.41 for Linux on x86_64 (Source distribution)
[root@zabbix-server ~]#zabbix_get -s 192.168.1.7 -p 10050 -k 'mysql_ping'
1
[root@zabbix-server ~]#zabbix_get -s 192.168.1.7 -p 10050 -k 'mysql_status[Uptime]'
54606
[root@zabbix-server ~]#zabbix_get -s 192.168.1.7 -p 10050 -k 'mysql_status[Slow_queries]'
0

监控MySQL主从复制
Agent端配置
bash
[root@rocky9 zabbix_agent2.d]#vim mysql_repl_status.sh
#!/bin/bash
KEY=$1
PASS='123456'
mysql -uroot -p$PASS -e "show slave status\G"|grep "${KEY}"|awk '{print $NF}'
[root@rocky9 zabbix_agent2.d]#chmod +x mysql_repl_status.sh
[root@rocky9 zabbix_agent2.d]#vim mysql.conf
UserParameter=mysql_repl_status[*],/etc/zabbix/zabbix_agent2.d/mysql_repl_status.sh "$1"
[root@rocky9 zabbix_agent2.d]#systemctl restart zabbix-agent2.service
[root@zabbix-server ~]#zabbix_get -s 192.168.1.7 -p 10050 -k 'mysql_repl_status[Slave_SQL_Running]'
[root@zabbix-server ~]#zabbix_get -s 192.168.1.7 -p 10050 -k 'mysql_repl_status[Slave_IO_Running]
[root@zabbix-server ~]#zabbix_get -s 192.168.1.7 -p 10050 -k 'mysql_repl_status[Second_Behind_Master]
配置 zabbix web
点击数据采集
选择模板
点击创建模板
模板创建完成,点击监控项,添加三个监控项
注意:线程状态的监控项的信息类型为字符,复制延时的监控项为数字
创建触发器,添加两个触发器
bash
#触发器1:名称:复制线程异常, 两个复制线程状态都要为 Yes
{Template MysQL slave {Temp1ate MySQL repl
status:mysql.repl.status[Slave_IO_Running].str(Yes)}=0 or {Template MySQL repli
status :mysql.repl.status[Slave_SQL_Running].str(Yes)}=0
#触发器2: 名称:复制延时不超过100s
{Template MysQL repl
status:mysql.repl.status[Second_Behind_Master].last()]}>=100
关联到对应的主机
通过以上步骤,你可以使用Zabbix有效地监控MySQL实例,快速响应任何可能影响数据库性能的问题,从而确保系统的稳定性和高效性。希望这篇文章能够帮助你更好地理解和实施MySQL的监控策略,进一步优化你的数据库管理和维护流程。