文章目录
zabbix 监控mysql
3.1 监控Mysql什么内容
1、监控mysql端口状态
2、监控mysql连接数,增删改查,流量等(通过show global status获取)
3、监控mysql主从状态
3.2 如何监控mysql状态
- 通过监控命令mysql -uroot -pxxx -e ‘show global status’
- Threads_connnected: 连接数
- Com_select: 查询总量
- Com_insert: 插入总量
- Com_update: 更新总量
- Com_delete: 删除总量
- Bytes_received: 流入总流量
- Bytes_sent: 流出总流量
- Slow_queries: 慢查询总量
3.3 mysql状态监控实践
3.3.1 环境准备
角色 | IP |
---|---|
zabbix-server | 192.168.20.46 |
mysql | 192.168.20.48 |
3.3.2 编写监控脚本
[root@localhost zabbix_agent2.d]# cat /etc/zabbix/zabbix_agent2.d/mysql_status.sh
#!/bin/bash
key=$1
mysql -uroot -e "show global status" | grep "\<${key}\>" | awk '{print $2}'
#执行脚本测试
[root@localhost zabbix_agent2.d]# mysql -uroot -e "show global status" | grep "\<Com_select\>" | awk '{print $2}'
28
3.3.3 添加自定义监控项
[root@localhost zabbix_agent2.d]# cat mysql_status.conf
UserParameter=mysql.status[*],/bin/bash /etc/zabbix/zabbix_agent2.d/mysql_status.sh $1
[root@localhost zabbix_agent2.d]# /etc/init.d/zabbix-agent2 restart
Shutting down Zabbix agent 2: [确定]
Starting Zabbix agent 2:
3.3.4 服务器端测试取值
[root@zabbix-server ~]# zabbix_get -s 192.168.20.48 -k mysql.status[Threads_connected]
2
[root@zabbix-server ~]# zabbix_get -s 192.168.20.48 -k mysql.status[Com_insert]
0
[root@zabbix-server ~]# zabbix_get -s 192.168.20.48 -k mysql.status[Com_select]
31
3.web3.5 配置zabbix-web
1、创建模版
2、创建监控项
3、创建图形
4、关联对应主机
3.3.6 编写测试脚本
# 执行脚本后,可以通过图形观察事是否正常监控Mysql的增删改查等状态
[root@localhost ~]# cat mysql.sh
#!/usr/bin/bash
for i in {1..1000}
do
Var=$(echo $RANDOM)
Var2=$(echo $RANDOM)
mysql -uroot -h 127.0.0.1 -e "createdatabase IF NOT EXISTS zabbix_db;
use zabbix_db;
DROP TABLE IF EXISTS test${i};
create table test${i}(id int);
insert into zabbix_db.test${i} values (${Var});
update zabbix_db.test${i} setid=${Var2} where id=${Var};
select * from zabbix_db.test${i};
delete from zabbix_db.test${i} where id=${Var2};"
done
3.4 监控mysql主从状态
Master有数据写入,数据写到Binlog中
Slave节点,通过IO线程获取最新的Binlog数据;
Slave节点,通过SQL线程写入到自己的本地;
3.4.1 mysql主从监控说明
- 在从库上运行show slave status\G可以查看主从同步信息
- slave IO Running 观察从库的IO进程是否正常, IO进程用于同步二进制日志
- slave SQL Running 观察从库的SQL进程是否正常,SQL进程用于执行二进制日志
- Seconds Behind Master 代表主从同步的延时时间
3.4.2 搭建mysql主从环境
角色 | IP |
---|---|
MySQL-Master | 192.168.20.47 |
MySQL-Slave | 192.168.20.48 |
1、安装Mysql
#yum install mariadb mariadb-server -y
2.配置主服务器,增加如下内容
[root@web01 ~]# vim /etc/my.cnf
log-bin=mysql-bin # 启用二进制日志
server-id=7 # 服务器唯一标识
[root@web01 ~]# /etc/init.d/mysqld restart
3.配置从服务器
[root@localhost tmp]# vi /etc/my.cnf
log-bin=mysql-bin # 启用二进制日志(不是必须)
#log-slave-updates=1
server-id = 8 # 服务器唯一标识
[root@localhost tmp]# /etc/init.d/mysqld restart
4.配置主服务器,在主服务器创建一个slave帐号,并提取mysql-binlog的位置
mysql> grant REPLICATION SLAVE,REPLICATION CLIENT ON *.* to repl@'192.168.20.%' identified by '123';
mysql> flush privileges;
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 428 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
5.配置从服务器,连接主服务器
mysql> change master to master_host='192.168.20.47',master_user='repl',master_password='123',master_log_file='mysql-bin.000001',master_log_pos=428;
6.检查主从复制功能赚钱
mysql> start slave;
Master_Host: 192.168.20.47
Slave_IO_Running: Yes #从库通过IO线程将主库上的日志复制到自己的中继日志
Slave_SQL_Running: Yes #从库通过SQL线程读取中继日志中的事件,在本地重放
Seconds_Behind_Master: 0 #slave落后master的秒杀
3.4.3 编写监控主从脚本
[root@localhost zabbix_agent2.d]# cat ./mysql_slave_status.sh
#!/bin/bash
key=$1
mysql -uroot -e "show slave status\G" | grep "\<${key}\>" | awk '{print $2}'
[root@localhost zabbix_agent2.d]# chmod +x mysql_slave_status.sh
[root@localhost zabbix_agent2.d]# ./mysql_slave_status.sh Slave_SQL_Running
Yes
[root@localhost zabbix_agent2.d]# ./mysql_slave_status.sh Slave_IO_Running
Yes
3.4.4 添加自定义监控项
[root@localhost ~]# cat /etc/zabbix/zabbix_agent2.d/mysql_slave_status.conf
UserParameter=mysql.slave.status[*],/etc/zabbix/zabbix_agent2.d/mysql_slave_status.sh "$1"
[root@localhost ~]# /etc/init.d/zabbix-agent2 restart
3.4.5 服务端测试取值
[root@zabbix-server ~]# zabbix_get -s 192.168.20.48 -k mysql.slave.status[Slave_IO_Running]
Yes
[root@zabbix-server ~]# zabbix_get -s 192.168.20.48 -k mysql.slave.status[Slave_SQL_Running]
Yes
3.4.6配置zabbix-web
1、创建模版
2、创建监控项
3、创建触发器
4、关联对应主机
#1.触发器1: 两个状态都要为yes
报警:
{Template Mysql Slave Status panpancar:mysql.slave.status[Slave_IO_Running].str(yes)}=0 and {Template Mysql Slave Status panpancar:mysql.slave.status[Slave_SQL_Running].str(yes)}=0
恢复:
{Template Mysql Slave Status panpancar:mysql.slave.status[Slave_IO_Running].str(yes)}=1 and {Template Mysql Slave Status panpancar:mysql.slave.status[Slave_SQL_Running].str(yes)}=1
#2.触发器2:延迟不超过50s
报警:
{Template MySQL Slave Status:mysql.slave.status[Seconds_Behind_Master].last()}>=50
恢复:
{Template MySQL Slave Status:mysql.slave.status[Seconds_Behind_Master].last()}<10s
3.4.7
模拟故障
#slave 节点执行
mysql> create database zabbixdb;
#master节点执行
mysql> create database zabbixdb;
收到报警
恢复故障
mysql> stop slave;
Query OK, 0 rows affected (0.03 sec)
mysql> set global sql_slave_skip_counter=1;
Query OK, 0 rows affected (0.00 sec)
mysql> start slave;