当前位置:   article > 正文

Zabbix监控MySQL数据库实战

Zabbix监控MySQL数据库实战

Zabbix 监控mysql数据库系统性能及mysql主从状态

zabbix监控mysql的方式

  • 只是安装agent
  • 启用模板监控
  • 启用自定义脚本的模板监控

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

创建mysql的zabbix授权用户

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

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

  1. Query OK, 0 rows affected (0.04 sec)
  2. mysql> flush privileges;
  3. Query OK, 0 rows affected (0.01 sec)
flush privileges; Query OK, 0 rows affected (0.01 sec)

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

  1. [root@master scripts]# pwd
  2. /etc/zabbix/scripts
  3. 脚本权限:
  4. -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
  1. vim chk_mysql.sh
  2. # 用户名
  3. #MYSQL_USER='zabbix'
  4. # 密码
  5. #MYSQL_PWD='zabbix' #在脚本中输入密码mysql会提示安全告警信息#Warning: Using a password on the command line interface can be #insecure,需要将帐号密码等配置添加到mysql配置文件my.cnf中即可,脚本中#不用输入账号密码
  6. # 主机地址/IP
  7. MYSQL_HOST='127.0.0.1'
  8. # 端口
  9. MYSQL_PORT='3306'
  10. # 数据连接
  11. MYSQL_CONN="/usr/bin/mysqladmin -u${MYSQL_USER} -p${MYSQL_PWD} -h${MYSQL_HOST} -P${MYSQL_PORT}"
  12. # 参数是否正确
  13. if [ $# -ne "1" ];then
  14. echo "arg error!"
  15. fi
  16. # 获取数据
  17. case $1 in
  18. Uptime)
  19. result=`${MYSQL_CONN} status|cut -f2 -d":"|cut -f1 -d"T"`
  20. echo $result
  21. ;;
  22. Com_update)
  23. result=`${MYSQL_CONN} extended-status |grep -w "Com_update"|cut -d"|" -f3`
  24. echo $result
  25. ;;
  26. Slow_queries)
  27. result=`${MYSQL_CONN} status |cut -f5 -d":"|cut -f1 -d"O"`
  28. echo $result
  29. ;;
  30. Com_select)
  31. result=`${MYSQL_CONN} extended-status |grep -w "Com_select"|cut -d"|" -f3`
  32. echo $result
  33. ;;
  34. Com_rollback)
  35. result=`${MYSQL_CONN} extended-status |grep -w "Com_rollback"|cut -d"|" -f3`
  36. echo $result
  37. ;;
  38. Questions)
  39. result=`${MYSQL_CONN} status|cut -f4 -d":"|cut -f1 -d"S"`
  40. echo $result
  41. ;;
  42. Com_insert)
  43. result=`${MYSQL_CONN} extended-status |grep -w "Com_insert"|cut -d"|" -f3`
  44. echo $result
  45. ;;
  46. Com_delete)
  47. result=`${MYSQL_CONN} extended-status |grep -w "Com_delete"|cut -d"|" -f3`
  48. echo $result
  49. ;;
  50. Com_commit)
  51. result=`${MYSQL_CONN} extended-status |grep -w "Com_commit"|cut -d"|" -f3`
  52. echo $result
  53. ;;
  54. Bytes_sent)
  55. result=`${MYSQL_CONN} extended-status |grep -w "Bytes_sent" |cut -d"|" -f3`
  56. echo $result
  57. ;;
  58. Bytes_received)
  59. result=`${MYSQL_CONN} extended-status |grep -w "Bytes_received" |cut -d"|" -f3`
  60. echo $result
  61. ;;
  62. Com_begin)
  63. result=`${MYSQL_CONN} extended-status |grep -w "Com_begin"|cut -d"|" -f3`
  64. echo $result
  65. ;;
  66. *)
  67. 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)"
  68. ;;
  69. 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配置生效

  1. vim /etc/my.cnf
  2. [client]
  3. user=zabbix
  4. password=zabbix
  5. [mysqladmin]
  6. host=localhost
  7. user=zabbix
  8. password=zabbix
[client] user=zabbix password=zabbix [mysqladmin] host=localhost user=zabbix password=zabbix

为zabbix_agent添加用户参数

  1. vim /usr/local/etc/zabbix_agentd.conf
  2. UnsafeUserParameters=1
  3. UserParameter=mysql.version,mysql -V
  4. UserParameter=mysql.status[*],/opt/scripts/chk_mysql.sh $1
  5. #UserParameter=mysql.ping,mysqladmin -P3306 -h127.0.0.1 ping | grep -c alive
  6. UserParameter=mysql.ping,sudo netstat -ntpl |grep 3306|grep mysql|wc |awk '{print $1}'
UnsafeUserParameters=1 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

  1. <span style="color:#ff0000">killall zabbix_agentd
  2. systemctl restart zabbix-agent</span>

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

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

mysql主从状态监控

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

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

我们先执行一个命令

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

我们在输出的信息中选择

  1. Slave_IO_Running: Yes
  2. Slave_SQL_Running: Yes

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

授权:

  1. grant all PRIVILEGES on *.* to zabbix@'localhost' identified by 'zabbix';
  2. flush privileges;


编写主从监控脚本:

[root@master scripts]# pwd

  1. /etc/zabbix/scripts
  2. vim mysql_master.sh
  3. #!/bin/bash
  4. mysql -uzabbix -e 'show slave status\G' |grep -E "Slave_IO_Running|Slave_SQL_Running"|awk '{print $2}'|grep -c Yes

为agent添加用户参数:

  1. vim /usr/local/etc/zabbix_agentd.conf
  2. UserParameter=system.mysql,/etc/zabbix/scripts/mysql_master.sh

重启agent

systemctl restart zabbix-agent

连接模版:

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/49313
推荐阅读
相关标签
  

闽ICP备14008679号