如何监控MySQL主从同步状况

在高并发网站架构中,MySQL数据库主从同步是不可或缺的,不过常常会发生因为网络缘由或者操做错误,MySQL主从常常会出现不一样步的状况,那么如何监控MySQL主从同步,也变成网站正常运行的重要环节。

MySQL主从同步监控

MySQL同步功能由3个线程(master上1个,slave上2个)来实现,简单的说就是:master发送日志一个,slave接收日志一个,slave运行日志一个。 mysql

首先,咱们解释一下 show slave status  中重要的几个参数:
Slave_IO_Running: I/O线程是否被启动并成功地链接到主服务器上。 ios

Slave_SQL_Running: SQL线程是否被启动。 sql

Seconds_Behind_Mastershell

本字段是从属服务器“落后”多少的一个指示。当从属SQL线程正在运行时(处理更新),本字段为在主服务器上由此线程执行的最近的一个事件的时间标记开始,已通过的秒数。当此线程被从属服务器I/O线程遇上,并进入闲置状态,等待来自I/O线程的更多的事件时,本字段为零。总之,本字段测量从属服务器SQL线程和从属服务器I/O线程之间的时间差距,单位以秒计。 数据库

如何监控从服务器是否正常运行呢? windows

1. 手动执行SHELL脚本 bash

show slave status\G

查看上面所说的3个参数是否正常运行。 服务器

2. Percona Toolkit 网络

Percona Toolkit 提供了一些MySQL数据库相关的工具,能够很好的管理MySQL数据库。
Percona工具包能够去这里下载:http://www.percona.com/software/percona-toolkit 架构

pt-heartbeat: 监控MySQL从服务器的延时时间。
pt-slave-restart: 管理MySQL从服务器重启。
pt-table-checksum: 检查主从同步数据的一致性,好比遇到复制错误,咱们执行了skip error操做以后,检查一下数据仍是颇有必要的。不过这个工具须要提早设置一下,安装相应的checksum表,请参阅相关资料。

3. 第三方工具

MySQL Enterprise Monitor,MySQL企业版监控工具。
MONyog – MySQL Monior and Advisor,MONyog你们都不陌生,windows下比较好用的MySQLGUI提供者,也有相关MySQL监控工具。

4. Nagios 以及Zabbix 的相关插件。

Nagios相关插件仍是很丰富的,你们能够找到相关MySQL Slave的监控工具。

最后,这里给你们一个开源的MySQL Slave的监控脚本,实用cronjob或者其余相关工具就能够轻易的设置本身的监控工具。

好比咱们实用Jenkins+shell脚本,作失败通知便可迅速的搭建一个简单的MySQL监控工具。

MySQL Slave 监控脚本:

#!/bin/bash # (C) 2012 - Vincent van Scherpenseel, SYN-ACK.org   ### VARIABLES ### SERVER=`hostname` SECONDS_BEHIND_MASTER=`/usr/bin/mysql -e "SHOW SLAVE STATUS\G"| grep "Seconds_Behind_Master" | awk -F": " {' print $2 '}` SENTFILE_BROKEN=/tmp/mysql_slaverep_broken.sent SENTFILE_BEHIND=/tmp/mysql_slaverep_behind.sent     ### CHECK FOR REPLICATION BREAK ### if [ "$SECONDS_BEHIND_MASTER" == "NULL" ]; then         # Slave replication is broken           if [ ! -f $SENTFILE_BROKEN ]; then                 # This has not been reported before                 echo "Slave replication broken on $SERVER"                 touch $SENTFILE_BROKEN         fi else         # Slave replication is not broken           if [ -f $SENTFILE_BROKEN ]; then                 # It was broken before which was reported. Clear that state                 echo "Slave replication has been restored on $SERVER"                 rm $SENTFILE_BROKEN         fi           ### CHECK FOR REPLICATION DELAY ###         if [ "$SECONDS_BEHIND_MASTER" -gt "60" ]; then                 # Slave replication is delayed                   if [ ! -f $SENTFILE_BEHIND ]; then                         # This has not been reported before                         echo "Slave replication is $SECONDS_BEHIND_MASTER seconds behind master on $SERVER"                         touch $SENTFILE_BEHIND                 fi         else                 # Slave replication is not delayed                   if [ -f $SENTFILE_BEHIND ]; then                         # It was delayed before which was reported. Clear that state                         echo "Slave replication delay has been recovered and is now $SECONDS_BEHIND_MASTER seconds behind master on $SERVER"                         rm $SENTFILE_BEHIND                 fi         fi   fi 

推荐阅读:
如何添加新数据库到MySQL主从复制列表

相关文章
相关标签/搜索