Zabbix监控MySQL数据库实战

zabbix监控mysql的方式

只是安装agent

启用模板监控

启用自定义脚本的模板监控

使用zabbix模版及结合shell脚本监控mysql

创建mysql的zabbix授权用户

mysql> grant all PRIVILEGES on *.* to zabbix@'localhost' identified by 'zabbix';

###创建一个有权限的访问用户lqb密码设置zabbix

Query OK, 0 rows affected (0.04 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.01 sec)

flush privileges;

Query OK, 0 rows affected (0.01 sec)

编写脚本获取mysql性能指标数据:

脚本权限:

-rwxr-xr-x. 1 root root 2695 Jun 6 13:39 chk_mysql.sh

脚本权限:

-rwxr-xr-x. 1 root root 2695 Jun 6 13:39 chk_mysql.sh

vim chk_mysql.sh

用户名

#MYSQL_USER='zabbix'

密码

#MYSQL_PWD='zabbix' #在脚本中输入密码mysql会提示安全告警信息#Warning: Using a password on the command line interface can be #insecure,需要将帐号密码等配置添加到mysql配置文件my.cnf中即可,脚本中#不用输入账号密码

主机地址/IP

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}"

参数是否正确

if [ $# -ne "1" ];then

echo "arg error!"

fi

获取数据

case $1 in

Uptime)

result=`${MYSQL_CONN} status|cut -f2 -d":"|cut -f1 -d"T"`

echo $result

;;

Com_update)

result=`${MYSQL_CONN} extended-status |grep -w "Com_update"|cut -d"|" -f3`

echo $result

;;

Slow_queries)

result=`${MYSQL_CONN} status |cut -f5 -d":"|cut -f1 -d"O"`

echo $result

;;

Com_select)

result=`${MYSQL_CONN} extended-status |grep -w "Com_select"|cut -d"|" -f3`

echo $result

;;

Com_rollback)

result=`${MYSQL_CONN} extended-status |grep -w "Com_rollback"|cut -d"|" -f3`

echo $result

;;

Questions)

result=`${MYSQL_CONN} status|cut -f4 -d":"|cut -f1 -d"S"`

echo $result

;;

Com_insert)

result=`${MYSQL_CONN} extended-status |grep -w "Com_insert"|cut -d"|" -f3`

echo $result

;;

Com_delete)

result=`${MYSQL_CONN} extended-status |grep -w "Com_delete"|cut -d"|" -f3`

echo $result

;;

Com_commit)

result=`${MYSQL_CONN} extended-status |grep -w "Com_commit"|cut -d"|" -f3`

echo $result

;;

Bytes_sent)

result=`${MYSQL_CONN} extended-status |grep -w "Bytes_sent" |cut -d"|" -f3`

echo $result

;;

Bytes_received)

result=`${MYSQL_CONN} extended-status |grep -w "Bytes_received" |cut -d"|" -f3`

echo $result

;;

Com_begin)

result=`${MYSQL_CONN} extended-status |grep -w "Com_begin"|cut -d"|" -f3`

echo $result

;;

*)

echo "Usage:$0(Uptime|Com_update|Slow_queries|Com_select|Com_rollback|Questions|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin)"

;;

esac

以下几个参数对Myisam 和Innodb 存储引擎都计数:

  1. Com_select 执行select 操作的次数,一次查询只累加1;

  2. Com_insert 执行insert 操作的次数,对于批量插入的insert 操作,只累加一次;

  3. Com_update 执行update 操作的次数;

  4. Com_delete 执行delete 操作的次数;

以下几个参数是针对Innodb 存储引擎计数的:

  1. Innodb_rows_read select 查询返回的行数;

  2. Innodb_rows_inserted 执行Insert 操作插入的行数;

  3. Innodb_rows_updated 执行update 操作更新的行数;

  4. Innodb_rows_deleted 执行delete 操作删除的行数;

通过以上几个参数,可以很容易的了解当前数据库的应用是以插入更新为主还是以查询操作为主,以及各种类型的SQL 大致的执行比例是多少。对于更新操作的计数,是对执行次数的计数,不论提交还是回滚都会累加。对于事务型的应用,通过Com_commit 和Com_rollback 可以了解事务提交和回滚的情况,对于回滚操作非常频繁的数据库,可能应用编写存在问题。

另外还有几个参数可以了解数据库的基本信息:

  1. Connections 试图连接Mysql 服务器的次数

  2. Uptime 服务器工作时间

  3. Slow_queries 慢查询的次数

在脚本中输入密码mysql会提示安全告警信息使zabbix获取不到正确数据,(Warning: Using a password on the command line interface can be insecure),需要将帐号密码等配置添加到mysql配置文件my.cnf中即可,脚本中不用输入账号密码,重启mysql配置生效

vim /etc/my.cnf

[client]

user=zabbix

password=zabbix

[mysqladmin]

host=localhost

user=zabbix

password=zabbix

[client]

user=zabbix

password=zabbix

[mysqladmin]

host=localhost

user=zabbix

password=zabbix

为zabbix_agent添加用户参数

vim /usr/local/etc/zabbix_agentd.conf

UserParameter=mysql.version,mysql -V

UserParameter=mysql.status[*],/opt/scripts/chk_mysql.sh $1

#UserParameter=mysql.ping,mysqladmin -P3306 -h127.0.0.1 ping | grep -c alive

UserParameter=mysql.ping,sudo netstat -ntpl |grep 3306|grep mysql|wc |awk '{print $1}'

修改/etc/sudoers( chmod +s /bin/netstat也可以,省去了修改/etc/sudoers的麻烦)

#注释掉此行Defaults requiretty

#在最后加入如下行:

zabbix ALL=(ALL) NOPASSWD: /bin/netstat

重启zabbix_agentd

<span style="color:#ff0000">killall zabbix_agentd

systemctl restart zabbix-agent</span>

在server端测试是否能获取到数据

$ zabbix_get -s10.10.50.50 -k"mysql.status[Com_rollback]"

mysql主从状态监控

写一个脚本实现主从监控:

这个脚本主要用于获取MYSQL主从同步信息;

我们先执行一个命令

mysql -u zabbix -e 'show slave status\G'

我们在输出的信息中选择

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

这两项来监控,我测试了一下,当操作的数据出现异常的时候,Slave_SQL_Running就会变成No,当执行slave stop的时候,两个都会变成No;

授权:

grant all PRIVILEGES on *.* to zabbix@'localhost' identified by 'zabbix';

flush privileges;

编写主从监控脚本:

vim mysql_master.sh

#!/bin/bash

mysql -uzabbix -e 'show slave status\G' |grep -E "Slave_IO_Running|Slave_SQL_Running"|awk '{print $2}'|grep -c Yes

为agent添加用户参数:

vim /usr/local/etc/zabbix_agentd.conf

UserParameter=system.mysql,/etc/zabbix/scripts/mysql_master.sh

重启agent

systemctl restart zabbix-agent

连接模版:

<spanstyle="color:#33cc00">https://download.csdn.net/download/abel_dwh/10510113\</span>

相关推荐
远歌已逝2 小时前
维护在线重做日志(二)
数据库·oracle
qq_433099403 小时前
Ubuntu20.04从零安装IsaacSim/IsaacLab
数据库
Dlwyz3 小时前
redis-击穿、穿透、雪崩
数据库·redis·缓存
工业甲酰苯胺5 小时前
Redis性能优化的18招
数据库·redis·性能优化
没书读了6 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
i道i7 小时前
MySQL win安装 和 pymysql使用示例
数据库·mysql
小怪兽ysl7 小时前
【PostgreSQL使用pg_filedump工具解析数据文件以恢复数据】
数据库·postgresql
wqq_9922502777 小时前
springboot基于微信小程序的食堂预约点餐系统
数据库·微信小程序·小程序
爱上口袋的天空7 小时前
09 - Clickhouse的SQL操作
数据库·sql·clickhouse
Oak Zhang8 小时前
sharding-jdbc自定义分片算法,表对应关系存储在mysql中,缓存到redis或者本地
redis·mysql·缓存