自定义监控mysql主从状态与主从延迟

一.准备工作

环境部署:

server:ip——192.168.80.128——服务器

agent:ip——192.168.80.130——客户端,从库

master:ip——192.168.80.129——主库

前提:

server主机安装 zabbix_server zabbix_agentd   
agent主机安装zabbix_agent  
在master和agent安装mysql  


//关闭主从端的防火墙和selinux
[root@master ~]# systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)


[root@agent ~]# systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead) since Thu 2022-07-08 8:04:09 CST; 4 days ago
     Docs: man:firewalld(1)
 Main PID: 978 (code=exited, status=0/SUCCESS)

1.搭建mysql主从

配置主库

//在主库创建用户repl授权给从库使用
mysql> CREATE USER 'repl'@'192.168.80.130' IDENTIFIED BY 'repl123';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.80.130';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

配置主库文件

[root@master ~]# cat /etc/my.cnf 
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve

server-id=10 
log-bin=mysql_bin

[root@master ~]# systemctl restart mysqld.service

mysql> show master status;  //里面的参数后续会用到
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql_bin.000001 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)


配置从库

//配置从库文件
[root@agent ~]# cat /etc/my.cnf 
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve

server-id=20
relay-log=mysql-relay-bin

[root@agent ~]# systemctl restart mysqld.service 



//连接到从数据库配置主从
mysql> CHANGE MASTER TO
    -> MASTER_HOST= '192.168.80.129',
    -> MASTER_USER='repl',
    -> MASTER_PASSWORD='repl123',
    ->  MASTER_LOG_FILE='mysql_bin.000001',
    -> MASTER_LOG_POS=154;
Query OK, 0 rows affected, 2 warnings (0.03 sec)

mysql> start slave;   //启动主从

mysql> show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.80.129
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql_bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: mysql-relay-bin.000003
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql_bin.000001
             Slave_IO_Running: Yes  //此处为双yes 就是成功开启了
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 154
              Relay_Log_Space: 693
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 10
                  Master_UUID: 32748ca6-00f6-11ed-a5ea-000c29972037
             Master_Info_File: /opt/data/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)


测试

在主库创建一个数据库到从库查看,是否同步

[root@master ~]# mysql -uroot -p'runtime123!' -e  'create database abc;'
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@master ~]# mysql -uroot -p'runtime123!' -e  'show databases;'
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| abc                |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+

从库查看

[root@agent ~]# mysql -uroot -p'runtime123!' -e 'show databases;'
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| abc                |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+

二.自定义监控mysql主从状态

1.编写脚本

因为正常状态为两个yes,所以将两个yes的信息过滤并且做判断即可

[root@agent scropts]# cat mysqlms.sh 
#!/bin/bash

count=$( mysql -uroot -pruntime123! -e "show slave status\G" 2>/dev/null | grep -v grep | grep -c 'Yes')

if [ $count -ne 2 ];then   //当count不等于2打印1 反之打印0
    echo '1'
else
    echo '0'
fi


ps:

 2>dev/null 去掉告警信息  
 grep -v grep 将grep本身的进程去掉
 grep -c 'Yes'  //将匹配yes的行数取出来


2.测试脚本

[root@agent scropts]# chmod +x mysqlms.sh   //赋予脚本执行权限
[root@agent scropts]# ll
总用量 12
-rwxr-xr-x. 1 root root  124 7月  10 21:34 check_process.sh
-rwxr-xr-x. 1 root root 1854 7月  10 22:15 log.py
-rwxr-xr-x. 1 root root  178 7月  11 17:40 mysqlms.sh

[root@agent scropts]# bash mysqlms.sh    //打印0 因为主从没问题所以是正常的
0
[root@agent scropts]# 

3.修改配置文件

[root@agent ~]# vim zabbix_agentd.conf
UserParameter=check_mysqlms,/bin/bash /scropts/mysqlms.sh   //添加自定义监控

[root@agent ~]# pkill zabbix_agentd  
[root@agent ~]# zabbix_agentd   //杀死进程 重新启动让配置文件生效


//服务器测试
[root@server ~]# zabbix_get -s 192.168.80.130 -k check_mysqlms
0

4.zabbix网页配置

添加监控项

添加触发器

当监控项的结果为1时就触发报警

测试

打开主库防火墙

[root@master ~]# systemctl start firewalld.service 
[root@master ~]# systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: active (running) since Mon 2022-07-11 06:10:40 EDT; 32s ago
     Docs: man:firewalld(1)
 Main PID: 258109 (firewalld)
    Tasks: 2 (limit: 11160)
   Memory: 28.8M
   CGroup: /system.slice/firewalld.service
           └─258109 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork --nopid




//连接到从库
[root@agent ~]# mysql -u root -p'runtime123!'   //进到数据库 重启主从 让其刷新
mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

查看此时最新数据

数字打印为1,并且触发报警

 三.自定义监控mysql主从延迟

查看mysql主从延迟

mysql> show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.80.129
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql_bin.000001
          Read_Master_Log_Pos: 469
               Relay_Log_File: mysql-relay-bin.000007
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql_bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 469
              Relay_Log_Space: 693
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0   //取出这个值 这个是mysql主从延迟
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 10
                  Master_UUID: 32748ca6-00f6-11ed-a5ea-000c29972037
             Master_Info_File: /opt/data/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)

1.编写脚本

[root@agent scropts]# cat mysql_delay.sh 
#!/bin/bash

delay=$( mysql -uroot -pruntime123! -e "show slave status\G" 2>/dev/null | grep 'Seconds_Behind_Master'| awk '{print $2}')

echo $delay

测试脚本

[root@agent scropts]# chmod +x mysql_delay.sh 
[root@agent scropts]# ll
总用量 16
-rwxr-xr-x. 1 root root  124 7月   9 19:34 check_process.sh
-rwxr-xr-x. 1 root root 1854 7月   9 22:15 log.py
-rwxr-xr-x. 1 root root  151 7月  11 18:36 mysql_delay.sh
-rwxr-xr-x. 1 root root  178 7月  11 17:40 mysqlms.sh

[root@agent scropts]# bash mysql_delay.sh   //因为是在虚拟机中所以延迟为0
0

修改配置文件

[root@agent etc]# cd /usr/local/etc/
[root@agent etc]# cat zabbix_agentd.conf
UserParameter=mysql_delay,/bin/bash /scropts/mysql_delay.sh

[root@agent etc]# pkill zabbix_agentd   //杀掉进程让文件生效
[root@agent etc]# zabbix_agentd 

服务端测试

[root@server ~]# zabbix_get -s 192.168.80.128 -k mysql_delay
0

2.zabbix网页配置

添加监控项

添加触发器

 测试

因为虚拟机环境内延迟是0,所以直接触发报警

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值