Zabbix监控MySQL性能实战指南

当今的数据驱动世界中,确保数据库的高效运行和稳定性至关重要。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的监控策略,进一步优化你的数据库管理和维护流程。