mysql主从监控的必要性
- 如果发生主从同步异常,业务会出问题
- 如果从库是用来备份的,会导致数据丢失
mysql主从同步监控说明
- mysql提供show slave status\G来监控mysql主从同步
- Slave IO Running可以查看从库的IO进程是否正常,IO进程用于同步二进制日志
- Slave SQL Running可以观察从库的SQL进程是否正常,SQL进程用于执行二进制日志
- 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)来判断主从同步是否异常
- 两个状态都要为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
- 延时不能超过100:
{Template Mysql Slave Status:mysql.slave.status[Seconds_Behind_Master,3306].last()}<100
自动发现
尝试使用自动发现监控mysql主从状态,最重要的是自动发现端口