zabbix3.0.4监控mysql主从同步

本文介绍如何使用Zabbix 3.0.4监控MySQL的主从同步状态,包括设置监控原理、创建具有权限的用户、配置Zabbix Agent及服务端测试方法,并给出了解决同步异常的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

zabbix3.0.4监控mysql主从同步


1.监控mysql主从同步原理:
执行一个命令
mysql -u zabbix -pzabbix -e 'show slave status\G'


我们在输出的信息中选择
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
这两项来监控

当操作的数据出现异常的时候,Slave_SQL_Running就会变成No
当执行slave  stop的时候,两个都会变成No

2.添加一个具有权限的用户zabbix,只需要赋予replication_client服务器权限即可



3.编辑zabbix-agent配置文件
vim /etc/zabbix/zabbix_agentd.conf

UserParameter=db_status,mysql -uzabbix -pzabbixpass -e "show slave status\G" 2>/dev/null|egrep 'Slave_IO_Running|Slave_SQL_Running'|grep -v 'Slave_SQL_Running_State'|awk '{print $NF}'|grep -c Yes

重启使之生效

先用zabbix这个用户来获取slave的所有状态,然后grep出这两个状态,然后再输出第二列,最后查看有几个Yes状态的

服务端测试:

zabbix_get -s x.x.x.x -p 10050 -k "db_status"


zabbix服务端web配置

添加监控项item
Confuguration --> Hosts --> 找到对应的主机,点开 Items --> Create item


创建对该监控项的触发器
Confuguration --> Hosts --> 找到对应的主机,点开 Triggers --> Create trigger

运行一段时间后报错:

MariaDB [zabbix]> show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.19.50.236
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 52002057
               Relay_Log_File: relay-bin.000008
                Relay_Log_Pos: 46774145
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: No
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: zabbix.%
  Replicate_Wild_Ignore_Table: mysql.%
                   Last_Errno: 1062
                   Last_Error: Error 'Duplicate entry '149' for key 'PRIMARY'' on query. Default database: 'zabbix'. Query: 'insert into escalations (escalationid,actionid,status,triggerid,itemid,eventid,r_eventid) values (149,7,0,16272,null,3334811,null)'
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 46773861
              Relay_Log_Space: 52003816
              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: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 1062
               Last_SQL_Error: Error 'Duplicate entry '149' for key 'PRIMARY'' on query. Default database: 'zabbix'. Query: 'insert into escalations (escalationid,actionid,status,triggerid,itemid,eventid,r_eventid) values (149,7,0,16272,null,3334811,null)'
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
1 row in set (0.00 sec)


解决的办法是在从库上执行:

 mysql> slave stop;
 mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
 mysql> slave start;
上面的方法可以解决问题,还有一种解决问题的办法是通过修改mysql的配置文件,让从库的同步线程忽略这个错误,方法:

修改mysql配置文件 /etc/my.cnf 在 [mysqld]下加一行 slave_skip_errors = 1062 ,保存重启mysql
mysql slave可以正常同步了.


<think>我们被要求使用Zabbix监控MySQL主从复制状态。根据提供的引用,有几种方法可以实现,包括使用Percona插件和自己编写脚本。我们将结合引用内容,给出清晰的步骤。 主要步骤包括: 1.MySQL上准备监控脚本(检查IO线程和SQL线程状态,或者延迟时间)。 2. 配置Zabbix Agent以允许调用这些脚本。 3.Zabbix Server上配置监控项、触发器等。 4. 测试并验证。 我们将分步说明: ### 步骤1:准备监控脚本 根据引用[3],我们可以编写一个脚本来检查Slave_IO_Running和Slave_SQL_Running的状态。脚本可以放在从服务器的`/etc/zabbix/script/`目录下。 脚本示例(mysql_slave_status.sh): ```bash #!/bin/bash # 监控MySQL主从同步线程状态 USER="slave" # 替换为实际的MySQL用户 PASSWD="Zabbix@root818" # 替换为实际密码 HOST="192.168.158.136" # 如果是本机,可以用127.0.0.1 MYSQL_CMD="/usr/local/mysql/bin/mysql" # 替换为实际的mysql命令路径 function IO { Slave_IO_Running=`$MYSQL_CMD -h$HOST -u$USER -p$PASSWD -e "show slave status\G;" 2> /dev/null | grep -w "Slave_IO_Running" | awk &#39;{print $2}&#39;` if [[ $Slave_IO_Running == "Yes" ]]; then echo 0 else echo 1 fi } function SQL { Slave_SQL_Running=`$MYSQL_CMD -h$HOST -u$USER -p$PASSWD -e "show slave status\G;" 2> /dev/null | grep -w "Slave_SQL_Running" | awk &#39;{print $2}&#39;` if [[ $Slave_SQL_Running == "Yes" ]]; then echo 0 else echo 1 fi } case $1 in io) IO ;; sql) SQL ;; *) echo "Usage: $0 [io | sql]" exit 1 esac ``` 注意:需要给脚本执行权限: ```bash chmod +x /etc/zabbix/script/mysql_slave_status.sh ``` 另外,引用[4]提供了一个监控延迟的简单方法(监控Seconds_Behind_Master): ```bash #!/bin/bash # 监控MySQL主从延迟 delay=$(mysql -uroot -p123456 -e &#39;show slave status\G&#39; 2>/dev/null | grep &#39;Seconds_Behind_Master&#39; | awk &#39;{print $2}&#39;) echo ${delay:-0} # 如果为空,则输出0(可能表示主从正常没有延迟,或者主从已经断开?需要根据实际情况判断) ``` 我们可以根据需要选择监控线程状态还是延迟,或者两者都监控。 ### 步骤2:配置Zabbix Agent 在从Zabbix Agent配置文件中(通常是`/etc/zabbix/zabbix_agentd.conf`或`/etc/zabbix/zabbix_agentd.d/`下的配置文件)添加UserParameter,允许Zabbix Server调用这些脚本。 例如,添加以下内容: ```ini UserParameter=mysql.slave.status[*],/etc/zabbix/script/mysql_slave_status.sh $1 UserParameter=mysql.slave.delay,/etc/zabbix/script/mysql_delay.sh # 如果有延迟监控脚本 ``` 然后重启Zabbix Agent服务: ```bash systemctl restart zabbix-agent ``` ### 步骤3:在Zabbix Server上配置 1. 创建模板(或者直接在主机上添加监控项) 2. 创建监控项: - 监控IO线程:键值 `mysql.slave.status[io]` - 监控SQL线程:键值 `mysql.slave.status[sql]` - 监控延迟(可选):键值 `mysql.slave.delay` 3. 创建触发器: - 当IO线程不为0(即不是"Yes")时触发告警:`{Template MySQL Slave:mysql.slave.status[io].last()}<>0` - 当SQL线程不为0时触发告警:`{Template MySQL Slave:mysql.slave.status[sql].last()}<>0` - 延迟超过一定阈值(例如300秒)触发告警:`{Template MySQL Slave:mysql.slave.delay.last()}>300` 4. 创建图形(可选)。 5. 将模板关联到MySQL主机。 ### 步骤4:测试 在Zabbix Server上使用zabbix_get测试: ```bash zabbix_get -s <从IP> -k mysql.slave.status[io] zabbix_get -s <从IP> -k mysql.slave.status[sql] zabbix_get -s <从IP> -k mysql.slave.delay ``` 预期返回0(正常)或1(异常)或者延迟的秒数。 注意事项: - 确保MySQL用户有权限执行`show slave status`。 - 确保脚本中的MySQL客户端路径正确。 - 确保Zabbix Agent有权限执行脚本。 引用[1]提到Percona提供的插件,但这里我们使用了自定义脚本。Percona插件可能更全面,但自定义脚本更灵活。 以上是使用Zabbix监控MySQL主从复制状态的基本方法。 §§相关问题§§ 1. 如何监控MySQL主从复制的延迟时间? 2. 如果MySQL主从复制中断,除了Zabbix告警,还有哪些方法可以快速发现? 3. Zabbix监控MySQL主从复制状态时,如何确保监控脚本的安全性?</think>### Zabbix监控MySQL主从复制配置方法 #### 一、核心原理 Zabbix通过Agent在MySQL上执行监控脚本,获取主从复制状态的关键指标(如`Slave_IO_Running`、`Slave_SQL_Running`、`Seconds_Behind_Master`),并通过触发器实现异常告警[^3][^4]。 #### 二、配置步骤 ##### 1. 准备监控脚本 在MySQL创建监控脚本(示例路径:`/etc/zabbix/script/mysql_slave_status.sh`): ```bash #!/bin/bash USER="slave" # MySQL监控账号 PASSWD="YourPassword" # 替换为实际密码 HOST="127.0.0.1" # MySQL地址 MYSQL_CMD="/usr/bin/mysql" # MySQL命令路径 function IO { status=$($MYSQL_CMD -h$HOST -u$USER -p$PASSWD -e "SHOW SLAVE STATUS\G" 2>/dev/null | awk &#39;/Slave_IO_Running/{print $2}&#39;) [[ $status == "Yes" ]] && echo 0 || echo 1 } function SQL { status=$($MYSQL_CMD -h$HOST -u$USER -p$PASSWD -e "SHOW SLAVE STATUS\G" 2>/dev/null | awk &#39;/Slave_SQL_Running/{print $2}&#39;) [[ $status == "Yes" ]] && echo 0 || echo 1 } function DELAY { delay=$($MYSQL_CMD -h$HOST -u$USER -p$PASSWD -e "SHOW SLAVE STATUS\G" 2>/dev/null | awk &#39;/Seconds_Behind_Master/{print $2}&#39;) echo ${delay:-9999} # 无数据返回9999(异常) } case $1 in io) IO ;; sql) SQL ;; delay) DELAY ;; *) echo "Usage: $0 [io|sql|delay]" ;; esac ``` **权限设置**: ```bash chmod +x /etc/zabbix/script/mysql_slave_status.sh chown zabbix:zabbix /etc/zabbix/script/mysql_slave_status.sh ``` ##### 2. 配置Zabbix Agent 编辑Agent配置文件(`/etc/zabbix/zabbix_agentd.conf`): ```ini UserParameter=mysql.replication[*],/etc/zabbix/script/mysql_slave_status.sh $1 ``` 重启服务生效: ```bash systemctl restart zabbix-agent ``` ##### 3. Zabbix Server测试 ```bash zabbix_get -s 从IP -k mysql.replication[io] # 应返回0(正常)或1(异常) zabbix_get -s 从IP -k mysql.replication[delay] # 返回延迟秒数 ``` ##### 4. Web界面配置 1. **创建监控项**: | 名称 | 键值 | 值类型 | |---------------------|-------------------------|--------| | MySQL IO Thread | `mysql.replication[io]` | 整数 | | MySQL SQL Thread | `mysql.replication[sql]`| 整数 | | Replication Delay | `mysql.replication[delay]`| 整数 | 2. **创建触发器**: ```plaintext # IO线程异常 {Template:mysql.replication[io].last()}=1 # SQL线程异常 {Template:mysql.replication[sql].last()}=1 # 延迟超过300秒 {Template:mysql.replication[delay].last()}>300 ``` 3. **关联模板**:将模板绑定到MySQL主机 #### 三、关键注意事项 1. **MySQL账号权限**:监控账号需有`REPLICATION CLIENT`权限 ```sql CREATE USER &#39;slave&#39;@&#39;localhost&#39; IDENTIFIED BY &#39;YourPassword&#39;; GRANT REPLICATION CLIENT ON *.* TO &#39;slave&#39;@&#39;localhost&#39;; ``` 2. **防火墙配置**:确保Zabbix Server可访问从的10050端口 3. **脚本调试**:手动执行脚本验证输出(如`/etc/zabbix/script/mysql_slave_status.sh io`) #### 四、监控效果 - **正常状态**:IO/SQL线程返回0,延迟为数字 - **异常状态**: - IO/SQL线程返回1(线程停止) - 延迟返回9999(主从断开) - 触发器触发告警通知[^3] [^1]: 使用Percona插件监控MySQL复制 [^2]: Zabbix监控主从延迟的基础方法 [^3]: 通过脚本监控线程状态的完整实现 [^4]: 延迟监控的简化脚本实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值