使用SHOW SLAVE STATUS查看Seconds_Behind_Master等字段可快速判断复制延迟,2. pt-heartbeat工具通过心跳记录实现精准监控,3. 编写脚本自动化检查延迟并告警,4. 结合Prometheus和Grafana实现可视化监控,建议综合使用以构建完整监控体系。
监控 MySQL 复制延迟是保障主从架构数据一致性和系统稳定的关键。可以通过以下几种方式准确判断和持续跟踪复制延迟情况。
1. 使用 SHOW SLAVE STATUS 查看延迟信息
最直接的方式是登录从库执行:
SHOW SLAVE STATUSG
关注以下几个关键字段:
- Seconds_Behind_Master:表示从库落后主库的秒数,是核心延迟指标。为 0 表示无延迟,NULL 表示复制可能出错或停止。
- Slave_IO_Running:应为 Yes,表示 I/O 线程正常拉取主库 binlog。
- Slave_SQL_Running:应为 Yes,表示 SQL 线程正常应用中继日志。
- Read_Master_Log_Pos 和 Exec_Master_Log_Pos:两者差值越大,说明积压的日志越多,可能存在延迟。
注意:
Seconds_Behind_Master
在某些情况下可能不可靠(如主库空闲时),需结合其他指标判断。
2. 利用 pt-heartbeat 工具实现精准监控
pt-heartbeat 是 Percona Toolkit 中的专业工具,通过在主库周期性插入时间戳记录,从库读取并计算差异,可提供更精确的延迟测量,不受主库负载影响。
使用方法:
- 在主库运行写入 heartbeat 记录:
- 在从库查看延迟:
pt-heartbeat -D test –update -h master_host –interval=1
pt-heartbeat -D test –monitor -h slave_host
该方式适合生产环境长期监控,能真实反映数据同步延迟。
3. 监控复制状态的自动化脚本
可通过编写脚本定期检查
SHOW SLAVE STATUS
的输出,提取
Seconds_Behind_Master
或日志位置差值,并设置告警阈值。
例如 Shell 脚本片段:
output=$(mysql -e "SHOW SLAVE STATUSG") delay=$(echo "$output" | grep "Seconds_Behind_Master" | awk '{print $2}') if [ "$delay" -gt 30 ]; then echo "Warning: Replication delay is $delay seconds" fi
4. 结合监控系统(如 Prometheus + Grafana)
将 MySQL 复制状态暴露给监控平台,实现可视化和告警:
- 使用 mysqld_exporter 收集 MySQL 指标。
- 在 Grafana 中创建仪表盘,展示
mysql_slave_lag_seconds
等关键指标。
- 配置告警规则,如延迟超过 60 秒触发通知。
基本上就这些。日常运维中建议结合
SHOW SLAVE STATUS
快速排查和
pt-heartbeat
精准监控,再接入自动化告警系统,形成完整的复制延迟监控体系。