38_zabbix监控mysql主从同步

mysql主从监控的必要性

  1. 如果发生主从同步异常,业务会出问题
  2. 如果从库是用来备份的,会导致数据丢失

mysql主从同步监控说明

  1. mysql提供show slave status\G来监控mysql主从同步
  2. Slave IO Running可以查看从库的IO进程是否正常,IO进程用于同步二进制日志
  3. Slave SQL Running可以观察从库的SQL进程是否正常,SQL进程用于执行二进制日志
  4. Seconds Behind Master代表主从同步的延时时间

主从监控权限用户的创建

mysql -uroot -pzabbixpwd -h 127.0.0.1
grant usage,replication client on *.* to 'monitor'@'127.0.0.1' identified by 'monitorpwd';
flush privileges;

监控mysql主从的shell脚本

cat >/tmp/check_mysql_slave.sh <<EOF
key=\$1
port=\$2
mysql -umonitor -pmonitorpwd -h 127.0.0.1 -P\$port -e 'show slave status\G' | grep "\$key\s" | awk '{print \$2}' 2>/dev/null
EOF

脚本测试

sh /tmp/check_mysql_slave.sh "Slave SQL Running" 3306

zabbix自定义key监控mysql主从

cat >/usr/local/zabbix/etc/zabbix_agentd.conf.d/check_mysql_slave.conf <<EOF
UserParameter=mysql.slave.status[*],sh /tmp/check_mysql_slave.sh
EOF
pkill zabbix_agentd
zabbix_agentd

创建监控模板

mysql.slave.status[Slave_IO_Running,3306]
mysql.slave.status[Slave_SQL_Running,3306]
mysql.slave.status[Seconds_Behind_Master,3306]
# 也可以使用自动发现

定义解决器(Expression)来判断主从同步是否异常

  1. 两个状态都要为YES:
{Template Mysql Slave Status:mysql.slave.status[Slave_IO_Running,3306].str(Yes)}=0 or {Template Mysql Slave Status:mysql.slave.status[Slave_SQL_Running,3306].str(Yes)}=0
  1. 延时不能超过100:
{Template Mysql Slave Status:mysql.slave.status[Seconds_Behind_Master,3306].last()}<100

自动发现

尝试使用自动发现监控mysql主从状态,最重要的是自动发现端口