MySQL slave状态之Seconds_Behind_Master
在MySQL的主从环境中,我们能够通过在slave上运行show slave status来查看slave的一些状态信息,当中有一个比較重要的參数Seconds_Behind_Master。那么你是否明确它的真正含义以及它是怎么计算的呢?
在之前我一直误以为Seconds_Behind_Master是表示slave比master落后多少,假设这个值为0的表示主从已经处于一致了(在非同步模式下,如今官方最多也仅仅在5.5中添加�了半同步复制)。可是近期我最终认识到之前的错误理解。首先我们须要明确的一点:Seconds_Behind_Master表示slave上SQL thread与IO thread之间的延迟,我们都知道在MySQL的复制环境中,slave先从master上将binlog拉取到本地(通过IO thread),然后通过SQL
thread将binlog重放,而Seconds_Behind_Master表示本地relaylog中未被运行完的那部分的差值。手冊上的定义:
In essence, this field measures the time difference in seconds between the slave SQL thread and the slave I/O thread.
所以假设slave拉取到本地的relaylog(实际上就是binlog,仅仅是在slave上习惯称呼relaylog而已)都运行完,此时通过show slave status看到的会是0,那么Seconds_Behind_Master的值为0是否表示主从已经处于一致了呢?答案差点儿是否定的!为什么差点儿是否定的?由于绝大部分的情况下复制都是异步的,异步就意味着master上的binlog不是实时的发送到slave上,所以即使Seconds_Behind_Master的值为0依旧不能肯定主从处于一致,这也是我之前强调非同步复制的原因(如今已经有公司在做同步复制了,比方网易自己实现了VSR,VirtualSynchronized Replication,由于同步复制性能较差,所以网易再实现同步复制的同一时候还打了group
commit的补丁)。所以假设我们要以这个參数来预计主从延迟多久的话至少得在一个比較好的网络环境中,这样才干保证差点儿master上的binlog都已经发送到slave上。
上面解释了Seconds_Behind_Master这个值的真正含义,那么它的值究竟是怎么计算出来的呢?实际上在binlog中每一个binlog events都会附上运行时的timestamp,所以在在确定Seconds_Behind_Master的值时MySQL是通过比較当前系统的时间戳与当前SQL thread正在运行的binlog event的上的时间戳做比較,这个差值就是Seconds_Behind_Master的值。或许你会有疑问那要是两台server之间的时钟不一致怎么办?确实会存在这样的情况,那么此时这个值的可靠性就不大了,手冊上对此也进行了说明:
This time difference computation works even if the master and slave do not have identical clock times, provided that the difference,
computed when the slave I/O thread starts, remains constant from then on. Any changes—including NTP updates—can lead to clock
skews that can make calculation of Seconds_Behind_Master less reliable
Seconds_Behind_Master的值除了是非负数之外还可能是NULL,它是由例如以下几种情况导致的:SQL thread没执行/IO thread没执行/slave没有连接到master。
接下来再简介一下异步复制/半同步复制之间的差别。
异步复制,master上的操作记录binlog的同一时候不关心binlog是否已经被slave接收。
半同步复制,master上的操作记录binlog的同一时候会关心binlog是否被slave接受。可是因为它的处理逻辑问题可能丢一个事务,例如以下图所看到的:

这种处理流程存在一个问题,当存储引擎提交(storage commit)后,此时假设master挂了那么会存在主从不一致,对于这个问题orczhou好像自己对源代码进行了改动更改storage commit的顺序来达到一个增强的半同步复制。
对Seconds_Behind_Master就解释到这里,希望对你也能有点帮助。
MySQL slave状态之Seconds_Behind_Master的更多相关文章
- Mysql slave 状态之Seconds_Behind_Master
在MySQL的主从环境中,我们可以通过在slave上执行show slave status来查看slave的一些状态信息,其中有一个比较重要的参数Seconds_Behind_Master.那么你是否 ...
- MySQL slave状态之Seconds_Behind_Master【转】
在MySQL的主从环境中,我们可以通过在slave上执行show slave status来查看slave的一些状态信息,其中有一个比较重要的参数Seconds_Behind_Master.那么你是否 ...
- MySQL slave状态之Seconds_Behind_Master zz
在MySQL的主从环境中,我们可以通过在slave上执行show slave status来查看slave的一些状态信息,其中有一个比较重要的参数Seconds_Behind_Master.那么你是否 ...
- zabbix--监控MySQL主从状态
zabbix监控MySQL主从状态 搭建MySQL主从后,很多时候不知道从的状态是否ok,有时候出现异常不能及时知道,这里通过shell脚本结合zabbix实现监控并告警 一般情况下,在MySQL的从 ...
- MySQL同步状态双Yes的假象及 seconds_behind_master的含义
MySQL同步状态双Yes的假象及seconds_behind_master的含义 近期由于特殊原因有一台主库宕机了一个小时没有处理,说起来这是个挺不好啥意思的事情,但是由于这个事情反而发现个比较 ...
- ZABBIX监控mysql主从状态
模板如下 <zabbix_export> <version>3.4</version> <date>2018-11-30T08:28:28Z</d ...
- [zabbix] zabbix检测mysql主从状态
环境说明: zabbix-proxy 172.16.2.95(zabbix-server同理) zabbix-agent111 172.16.2.111 mysql从机 1.mysql从机添加用户权限 ...
- (转)使用参数SQL_SLAVE_SKIP_COUNTER处理mysql slave同步错误讨论
使用参数SQL_SLAVE_SKIP_COUNTER处理mysql slave同步错误讨论 本文链接地址:http://blog.chinaunix.net/uid-31396856-id-57532 ...
- 普通用户Mysql 5.6.13 主从,主主及nagios的mysql slave监控
Master:192.168.209.19 Slave:192.168.209.20 mysql版本:mysql5.6.13 1. 以root身份创建普通用户,如mysql,并创建mysql安装目录: ...
随机推荐
- HTML5 自适应rem布局
(function(doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? ' ...
- linux安装composer
1,确保php已成功安装,并且php可以被访问php -r "copy('https://getcomposer.org/installer', 'composer-setup.php'); ...
- iOS: 神奇的addSubView
看着addSubView, 本以为是添加多个对象, 但通过测试代码, 发现同一个对象在addSubView中只会添加一次. 想想, 视图对象是通过引用得到的. 在视图的子视图集中, 只保存一个相应的对 ...
- 从一个模板函数聊聊模板函数里面如何获得T的名字
写了个小程序,遇到点问题.总结总结,学习学习 #include<vector> #include<iostream> #include<typeinfo> usin ...
- 当xcode里点运行出现treating unicode character as whites
可能是由于粘贴网页上的代码的时候两行之间的回车引起的,两行之间重新输入回车就行......删掉重新写一遍就ok了 引入网页上的回车时 可能 网页对其格式做了处理,所以Xcode 不认识了
- JavaService wrapper
http://my.oschina.net/yjwxh/blog/260835 http://blog.chinaunix.net/uid-664509-id-3398193.html http:// ...
- C语言头文件的作用
C99中规定, 所有顶层的默认存储类标志符都是extern ! 头文件中声明的函数,默认都是extern前缀.但是为了我们程序员方便,我们采取下面的手段: 我个人认为是extern催生了头文件的诞生. ...
- HTTP之Content-Length
在HTTP协议中,有Content-Length的详细解读.Content-Length用于描述HTTP消息实体的传输长度the transfer-length of the message-body ...
- SQL*Net more data to client
The server process is sending more data/messages to the client. The previous operation to the client ...
- 关于IN-LIST迭代
IN-list iterator (IN-list迭代) 字段有索引,in里有多少个值就执行多少次索引扫描.不管值是否在字段里存在~ SQL> create table t1 as select ...