zabbix监控MySQL(windows和linux环境)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

一、linux环境下监控MySQL

Zabbix Server自带了MySQL插件来监控mysql数据库的模板,只需要配置好agent客户端,然后在web端给主机增加模板就行了

监控项目:

Com_update:     mysql执行的更新个数

Com_select:     mysql执行的查询个数

Com_insert:     mysql执行插入的个数

Com_delete:     执行删除的个数

Com_rollback:   执行回滚的操作个数

Bytes_received:  接受的字节数

Bytes_sent:     发送的字节数

Slow_queries:   慢查询语句的个数

Com_commit:     确认的事物个数

Com_begin:      开始的事物个数

Uptime:         服务器已启动的秒数

Questions:      客户端发送到服务器的语句个数

监控模板下载地址:http://www.zabbix.org/wiki/Zabbix_Templates#External_template_resources

脚本下载地址:https://github.com/itnihao/zabbix-book


1)创建zabbix链接MySQL的用户名,密码并授予权限。

1
2
3
mysql> grant all on *.* to zabbix@ 'localhost'
identified by "123456”;
mysql> flush privileges;

2)在zabbix_agent服务目录下创建 .my.cnf 连接文件

1
2
3
4
5
cd  /usr/local/zabbix/etc/
vim .my.cnf
[client]
user=zabbix
password=123456

注意:
如果在数据库grant授权时,针对的是localhost,这个.my.cnf里面就不用加host参数了【如上配置】
但如果grant授权时针对的是本机的ip(如192.168.1.25),那么在.my.cnf文件里就要加上host参数进行指定:host=192.168.1.25


3)配置MySQL的key文件

这个可以从zabbix安装时的解压包里拷贝过来:

1
2
3
cp 
/usr/local/src/zabbix3 .0.3 /conf/
zabbix_agentd /userparameter_mysql .conf  /usr/local/zabbix/etc/zabbix_agentd .conf.d/


4)替换zabbix安装路径,注意如果MySQL没配置好环境变量可能找不到MySQL命令,可以用MySQL全路径

看到类似 HOME=/var/lib/zabbix 的路径设置,把路径全都替换为 /usr/local/zabbix/etc/,也就是上面的.my.cnf文件所在的目录路径。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
cd  /usr/local/zabbix/etc/zabbix_agentd .conf.d/
vim userparameter_mysql.conf
# For all the following commands HOME should be set to the directory that has .my.cnf file with password information.
# Flexible parameter to grab global variables. On the frontend side, use keys like mysql.status[Com_insert].
# Key syntax is mysql.status[variable].
UserParameter=mysql.status[*], echo  "show global status where Variable_name='$1';"  | HOME= /usr/local/zabbix/etc/  mysql -N |  awk  '{print $$2}'
# Flexible parameter to determine database or table size. On the frontend side, use keys like mysql.size[zabbix,history,data].
# Key syntax is mysql.size[<database>,<table>,<type>].
# Database may be a database name or "all". Default is "all".
# Table may be a table name or "all". Default is "all".
# Type may be "data", "index", "free" or "both". Both is a sum of data and index. Default is "both".
# Database is mandatory if a table is specified. Type may be specified always.
# Returns value in bytes.
# 'sum' on data_length or index_length alone needed when we are getting this information for whole database instead of a single table
UserParameter=mysql.size[*], bash  -c  'echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema=\"$1\"")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name=\"$2\"");" | HOME=/usr/local/zabbix/etc/ mysql -N'
UserParameter=mysql. ping ,HOME= /usr/local/zabbix/etc/  mysqladmin  ping  grep  -c alive
UserParameter=mysql.version,mysql -V
 
%s #/var/lib/zabbix#/usr/local/zabbix/etc/#      #用命令替换

也可以用这个shell脚本监控,包括主从监控:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
### MySQL DB Infomation
UserParameter=mysql.status[*], echo "show global status where Variable_name='$1';" |mysql--defaults- file = /usr/local/zabbix/etc/ .my.cnf -N| awk  '{print $$2}'
UserParameter=mysql.variables[*], echo "show global variables where Variable_name='$1';" |mysql--defaults- file = /usr/local/zabbix/etc/ .my.cnf -N| awk  '{print $$2}'
UserParameter=mysql. ping ,mysqladmin--defaults- file = /usr/local/zabbix/etc/ .my.cnf  ping | grep  -c  alive
UserParameter=mysql.version, echo "select version();" |mysql--defaults- file = /usr/local/zabbix/etc/ .my.cnf -N
  
#### MySQL Master Information
UserParameter=mysql.master.Slave_count, echo "show slave hosts;" |mysql--defaults- file = /usr/local/zabbix/etc/ .my.cnf -N| wc  -l
UserParameter=mysql.master.Binlog_file, echo "show master status;" |mysql--defaults- file = /usr/local/zabbix/etc/ .my.cnf -N| awk  '{print $1}' | awk  -F. '{print $1}'
UserParameter=mysql.master.Binlog_number, echo "show master status;" |mysql--defaults- file = /usr/local/zabbix/etc/ .my.cnf -N| awk  '{print $1}' | awk  -F. '{print $2}'
UserParameter=mysql.master.Binlog_position, echo "show master status;" |mysql --defaults- file = /usr/local/zabbix/etc/ .my.cnf-N| awk  '{print $2}'
UserParameter=mysql.master.Binlog_count, echo "show binary logs;" |mysql--defaults- file = /usr/local/zabbix/etc/ .my.cnf -N| wc  -l
UserParameter=mysql.master.Binlog_total_size, echo "show binary logs;" |mysql--defaults- file = /usr/local/zabbix/etc/ .my.cnf -N| awk  '{sum+=$NF}END{print  sum}'
  
#### MySQL Slave Information
UserParameter=mysql.slave.Seconds_Behind_Master, echo "show slave status\G" |mysql--defaults- file = /usr/local/zabbix/etc/ .my.cnf| grep  "Seconds_Behind_Master" | awk '{print $2}'
UserParameter=mysql.slave.Slave_IO_Running, echo "show slave status\G" |mysql--defaults- file = /usr/local/zabbix/etc/ .my.cnf| grep "Slave_IO_Running" | awk  '{print $2}'
UserParameter=mysql.slave.Slave_SQL_Running, echo "show slave status\G" |mysql--defaults- file = /usr/local/zabbix/etc/ .my.cnf| grep "Slave_SQL_Running" | awk  '{print $2}'
UserParameter=mysql.slave.Relay_Log_Pos, echo "show slave status\G" |mysql--defaults- file = /usr/local/zabbix/etc/ .my.cnf| grep "Relay_Log_Pos" | awk  '{print $2}'
UserParameter=mysql.slave.Exec_Master_Log_Pos, echo "show slave status\G" |mysql--defaults- file = /usr/local/zabbix/etc/ .my.cnf| grep "Exec_Master_Log_Pos" | awk  '{print $2}'
UserParameter=mysql.slave.Read_Master_Log_Pos, echo "show slave status\G" |mysql--defaults- file = /usr/local/zabbix/etc/ .my.cnf| grep "Read_Master_Log_Pos" | awk  '{print $2}'



5)修改zabbix_agentd.conf配置文件,开启额外加载,就是去掉前面的#号

1
2
vim zabbix_agentd.conf
Include= /usr/local/zabbix/etc/zabbix_agentd .conf.d/

6)重启zabbix_agentd服务

1
/etc/init .d /zabbix_agentd  restart

7)测试看能否获取到数据

1
2
# zabbix_get -s 127.0.0.1 -p 10050 -k mysql.status[Com_select]
200661

8)登陆zabbix监控界面,在“配置”里为主机添加模板,完成监控。

wKioL1kDCfnzGAvoAAErWK8wki4296.png-wh_50

wKiom1kDCfrxfjaPAAEhZQbl6As617.png-wh_50

wKioL1kDCfugFXQpAADs2vrL1NI866.png-wh_50


二、windows下的MySQL监控

要想在Windows上取得MySQL的状态数据,可以用vbs脚本运行mysql命令

1)在d:\Zabbix\Scripts\目录下新建两个脚本文件内容如下:

mysql_ping.vbs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Set  objFS =CreateObject( "Scripting.FileSystemObject" )
Set  objArgs = WScript.Arguments
str1 = getCommandOutput( "D:\SOFT_PHP_PACKAGE\mysql\bin\mysqladmin-ucactiuser -pcactiuser ping" )     //修改对应数据库路径,用户名和密码
  
If  Instr(str1, "alive" ) > 0Then
WScript.Echo 1
Else
WScript.Echo 0
End  If
  
Function  getCommandOutput(theCommand)
  
Dim  objShell, objCmdExec
Set  objShell =CreateObject( "WScript.Shell" )
Set  objCmdExec = objshell.exec(thecommand)
getCommandOutput =objCmdExec.StdOut.ReadAll
end  Function


 MYSQL-status.vbs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Set  objFS = CreateObject( "Scripting.FileSystemObject" )
Set  objArgs = WScript.Arguments
str1 = getCommandOutput( "D:\SOFT_PHP_PACKAGE\mysql\bin\mysqladmin-u cactiuser -pcactiuser extended-status" )      //修改对应数据库路径,用户名和密码
Arg = objArgs(0)
str2 = Split(str1, "|" )
  
For  i = LBound(str2) to UBound(str2)
  
If  Trim(str2(i)) = Arg  Then   
WScript.Echo TRIM(str2(i+1))
Exit  For
End  If
next
  
  
Function  getCommandOutput(theCommand)
  
Dim  objShell, objCmdExec
Set  objShell =CreateObject( "WScript.Shell" )
Set  objCmdExec = objshell.exec(thecommand)
getCommandOutput =objCmdExec.StdOut.ReadAll
  
end  Function



2)修改windows上的zabbix_agentd.comf文件,设置key值。在UserParameter下面加两句;

UserParameter=mysql.status[*], cscript/nologo d:\Zabbix\Scripts\MySQL_Ext-Status_Script.vbs $1 
UserParameter=mysql.ping, cscript /nologo d:\Zabbix\Scripts\MySql_Ping.vbs

3)重启zabbix_agentd,并给主机添加MySQL模版,查看items状态。

wKioL1kDCfugFXQpAADs2vrL1NI866.png-wh_50



本文转自 80后小菜鸟 51CTO博客,原文链接:http://blog.51cto.com/zhangxinqi/1920584

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
18天前
|
安全 Ubuntu Linux
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
38 9
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
|
1天前
|
Ubuntu 网络协议 Linux
快速部署WSL(Windows Subsystem for Linux)
WSL提供了一种轻量级的方法,使开发者能够在Windows上无缝运行Linux环境。通过本文介绍的步骤,可以快速安装、配置和使用WSL,以满足开发和测试的需求。
20 8
|
2天前
|
NoSQL 关系型数据库 MySQL
Linux安装jdk、mysql、redis
Linux安装jdk、mysql、redis
58 7
|
3天前
|
Prometheus 运维 监控
Prometheus+Grafana+NodeExporter:构建出色的Linux监控解决方案,让你的运维更轻松
本文介绍如何使用 Prometheus + Grafana + Node Exporter 搭建 Linux 主机监控系统。Prometheus 负责收集和存储指标数据,Grafana 用于可视化展示,Node Exporter 则采集主机的性能数据。通过 Docker 容器化部署,简化安装配置过程。完成安装后,配置 Prometheus 抓取节点数据,并在 Grafana 中添加数据源及导入仪表盘模板,实现对 Linux 主机的全面监控。整个过程简单易行,帮助运维人员轻松掌握系统状态。
35 3
|
18天前
|
自然语言处理 安全 Java
Nexpose 7.0.1 for Linux & Windows - 漏洞扫描
Nexpose 7.0.1 for Linux & Windows - 漏洞扫描
38 6
|
21天前
|
关系型数据库 MySQL Linux
MySQL数据库下载安装教程(Windows&Linux)
本文档详细介绍了MySQL的安装步骤,包括安装前的准备工作、下载安装包、Windows和Linux系统下的具体安装流程,以及如何配置MySQL服务、设置环境变量、启动服务和连接数据库等关键操作。
|
1月前
|
NoSQL Linux PHP
如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤
本文介绍了如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤。接着,对比了两种常用的 PHP Redis 客户端扩展:PhpRedis 和 Predis,详细说明了它们的安装方法及优缺点。最后,提供了使用 PhpRedis 和 Predis 在 PHP 中连接 Redis 服务器及进行字符串、列表、集合和哈希等数据类型的基本操作示例。
64 4
|
3天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
13 3
|
3天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
19 3
|
3天前
|
SQL 关系型数据库 MySQL
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE &#39;log_%&#39;;`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
22 2