zabbix-监控mysql

监控mysql

主要监控myql的连接数、主从同步状态、同步延迟等。

实现mysql主从同步

从节点配置:
1、apt install mysql-server

2、vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
bind-address            = 0.0.0.0
relay-log = /var/lib/mysql/relay-log
server-id = 204

3、systemctl restart mysql


主节点配置:
1、vim /etc/mysql/mysql.conf.d/mysqld.cnf 
[mysqld]
bind-address            = 0.0.0.0
server-id = 203
log-bin = /var/lib/mysql/master-log

2、systemctl restart mysql

mysql-master创建授权同步账号

mysql> grant replication slave on *.* to 'mysql-slave'@'192.168.3.%' identified by 'linux';

将主节点的数据备份到一个sql文件中

1、mysqldump --all-databases --single_transaction --flush-logs --master-data=2 --lock-tables > /opt/backup.sql

2、scp /opt/backup.sql 192.168.3.204:/opt

从节点导入sql语句

1、mysql < /opt/backup.sql

2、head -n30 /opt/backup.sql  #查看二进制日志位置
CHANGE MASTER TO MASTER_LOG_FILE='master-log.000002', MASTER_LOG_POS=154;
#则表示master-log.000002之前的已经导入到当前的mysql中,从MASTER_LOG_POS=154之后的数据开始做主从同步

3、mysql> CHANGE MASTER TO MASTER_HOST='192.168.3.203',MASTER_USER='mysql-slave',MASTER_PASSWORD='linux',MASTER_LOG_FILE='master-log.000002',MASTER_LOG_POS=154;
#指定主从同步信息,指定同步账号,从指定的位置开启同步

4、mysql> start slave;   #开启同步线程

5、mysql> show slave statusG;

zabbix通过percona插件监控mysql数据

percona插件会使用php获取mysql上的数据,所以需要安装php连接mysql的软件包;
安装完percona插件,里面会有一个自定义监控项的配置文件以及一个shell和php脚本,在通过监控项查询数据时会调用shell脚本,当在300s内还要查询这些监控项,则shell脚本会通过判断/tmp/下的指定文件的创建文件时的时间戳与当前时间做对比(第一次查询监控项的数据时,会生成此文件),如果小于300s,则不进行查询,如果大于300s,才进行查询;
shell脚本查询监控项的数据时,会通过调用php脚本获取数据库中的数据;
目前Percona与ubuntu自带的php 7.2不兼容,需要安装php 5.6版本;

<https://www.percona.com/doc/percona-monitoring-plugins/LATEST/zabbix/index.html > #percona插件帮助文档
https://www.percona.com/downloads/percona-monitoring-plugins/LATEST/ #插件下载地址

安装percona插件

1、dpkg -i percona-zabbix-templates_1.1.8-1.artful_all.deb

2、cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.conf.d/
#将percona官方的自定义监控项配置文件拷贝到zabbix agent的目录下

3、

安装php

1、add-apt-repository ppa:ondrej/php         #安装php源

2、apt update

3、apt install -y php5.6 php5.6-mysql

4、vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php.cnf
<?php
$mysql_user ='root';
$mysql_pass ='';
#创建连接mysql的认证文件,php连接mysql需要有账号密码连接,并且该账号需要有权限访问数据库中的数据

5、/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg
#通过脚本查看是否能够获取到数据库中的数据

mysql-master服务器上agent的配置

1、vim /etc/zabbix/zabbix_agentd.conf            #导入自定义监控项的配置文件
Include=/etc/zabbix/zabbix_agentd.conf.d/*.conf
User=root
AllowRoot=1

2、vim /lib/lib/systemd/system/zabbix-agent.service   
#指定agent的service文件中启动agent的用户及组为root

3、systemctl daemon-reload

2、systemctl restart zabbix-agent

注:
修改agent的启动用户为root是因为,agent需要执行脚本去连接数据库,但是有的权限不支持普通用户执行,所以修改为root启动agent,去执行脚本

缩小数据获取间隔

1、vim /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
if [ `expr $TIMENOW - $TIMEFLM` -gt 60 ]; then     #修改脚本数据获取间隔

2、zabbix web上也需要把模板的监控项数据获取间隔修改为60s

server端测试

/apps/zabbix-server/bin/zabbix_get -s 192.168.3.203 -p 10050 -k MySQL.Open-files
zabbix web上也需要创建模板,把模板关联到主机;percona自带的模板不兼容zabbix 3、4,所以无法使用

mysql监控脚本

此脚本配置在mysql从节点上,主要用于查看从节点的主从同步延迟,以及主从同步的线程是否开启

1、vim /etc/zabbix/zabbix_agentd.d/mysql_monitor.sh
#!/bin/bash
  
Seconds_Behind_Master() {
        NUM=$(mysql -uroot -e "show slave statusG;" | grep  Seconds_Behind_Master | awk '{print $NF}')
        echo "$NUM"
}

master_slave_check() {
        NUM1=$(mysql -uroot -e "show slave statusG;" | grep  -w Slave_IO_Running | awk '{print $NF}')
        NUM2=$(mysql -uroot -e "show slave statusG;" | grep  -w Slave_SQL_Running | awk '{print $NF}')

        if [ $NUM1 == 'Yes' ] && [ $NUM2 == 'Yes' ];then
                echo 50
        else
                echo 100
        fi
}

main() {
        case $1 in
        Seconds_Behind_Master)
                Seconds_Behind_Master
                ;;
        master_slave_check)
                master_slave_check
                ;;
        esac
}

main $1

2、chmod a+x /etc/zabbix/zabbix_agentd.d/mysql_monitor.sh

agent配置

1、vim /etc/zabbix/zabbix_agentd.conf
Include=/etc/zabbix/zabbix_agentd.d/*.conf
AllowRoot=1      #zabbix用户是无法使用root账号登录数据库的
User=root

2、vim /etc/zabbix/zabbix_agentd.d/all.conf
UserParameter=mysql_monitor[*],/etc/zabbix/zabbix_agentd.d/mysql_monitor.sh "$1"
#所有的自定义监控项都放到一个单独的配置文件中,方便以后批量复制

3、vim /lib/systemd/system/zabbix-agent.service
User=root
Group=root

4、systemctl daemon-reload

5、systemctl restart zabbix-agent

server端测试

/apps/zabbix-server/bin/zabbix_get -s 192.168.3.204 -p 10050 -k mysql_monitor["Seconds_Behind_Master"]
0

小知识

stat -c %y FILENAME    #查看此文件创建时的unix时间戳
原文地址:https://www.cnblogs.com/dongzhanyi123/p/13299472.html