答案:MySQL复制延迟报警通过监控Seconds_Behind_Master值实现。1. 检查Slave_IO_Running和Slave_SQL_Running状态需为Yes,确保复制正常;2. 编写Shell脚本获取延迟值并判断是否超阈值(如60秒),超限则邮件告警;3. 配置crontab每分钟执行脚本;4. 推荐使用PMM、Zabbix或Prometheus+Alertmanager等专业工具,支持多通道通知,适用于生产环境。

MySQL复制延迟报警的配置主要依赖于监控从库的复制状态,结合脚本或监控工具实现自动检测和告警。核心是通过SHOW SLAVE STATUS获取Seconds_Behind_Master值,判断是否超过设定阈值。以下是具体配置方法。
1. 检查复制状态关键字段
登录从库执行:
SHOW SLAVE STATUS\G关注以下两个字段:
- Slave_IO_Running:应为Yes,表示IO线程正常拉取主库binlog
- Slave_SQL_Running:应为Yes,表示SQL线程正常回放事件
- Seconds_Behind_Master:复制延迟秒数,是告警的主要依据
如果该值持续大于设定阈值(如60秒),就需要触发报警。
2. 编写延迟检测脚本
可以使用Shell脚本定期检查延迟情况。示例脚本如下:
#!/bin/bashUSER="monitor"
PASS="your_password"
HOST="localhost"
THRESHOLD=60
# 获取延迟秒数
DELAY=$(mysql -u$USER -p$PASS -h$HOST -Nse "SHOW SLAVE STATUS\G" | grep "Seconds_Behind_Master" | awk '{print $2}')
# 判断是否为空或异常
if [ -z "$DELAY" ]; then
echo "ERROR: Unable to get slave status"
exit 1
fi
if [ "$DELAY" -gt "$THRESHOLD" ]; then
echo "ALERT: Replication delay is $DELAY seconds" | mail -s "MySQL Replication Delay Alert" admin@example.com
fi
将脚本保存为check_slave_delay.sh,并赋予执行权限。
3. 配置定时任务
使用crontab每分钟执行一次检测:
crontab -e* * * * * /path/to/check_slave_delay.sh
这样系统会每隔一分钟检查一次复制延迟,超出阈值即发送邮件告警。
4. 使用专业监控工具(推荐)
更稳定的方式是使用Prometheus + MySQL Exporter + Alertmanager,或Zabbix、Percona Monitoring and Management (PMM)等工具。
- PMM:部署简单,自带MySQL复制延迟图形化监控和阈值告警
-
Zabbix:可自定义模板监控
seconds_behind_master - Prometheus:通过MySQL Exporter采集指标,配合Rule规则触发Alertmanager通知
这些工具支持微信、钉钉、企业微信、邮件等多种通知方式,适合生产环境。
基本上就这些。关键是获取准确的延迟数据,并确保告警机制及时可靠。手动脚本适合小环境,中大型系统建议用专业监控平台。










