参考:主从32讲的:27节、从库Seconds_Behind_Master的计算方式

                               28、从库Seconds_Behind_Master延迟总结

版本:5.7.24


--一、查看从库状态
mysql> show slave status\G
*************************** 1. row ***************************Slave_IO_State: Connecting to master                //IO线程状态Master_Host: 192.168.56.61                       //连接的master IPMaster_User: repl                                //连接的master usernameMaster_Port: 3306                                //连接的master portConnect_Retry: 60                                  Master_Log_File: mysql-bin.000023                     //IO线程读到的master的binlogRead_Master_Log_Pos: 682                                 //IO线程读到的master的binlog的posRelay_Log_File: mysql-relay-bin.000018              //SQL线程执行到的relay logRelay_Log_Pos: 4                                   //SQL线程执行到的relay log的posRelay_Master_Log_File: mysql-bin.000023                    //SQL线程执行到对应master的binlogSlave_IO_Running: Connecting                          //IO线程状态Slave_SQL_Running: Yes                                 //SQL线程状态Replicate_Do_DB:Replicate_Ignore_DB:Replicate_Do_Table:Replicate_Ignore_Table:Replicate_Wild_Do_Table:Replicate_Wild_Ignore_Table:Last_Errno: 0Last_Error:Skip_Counter: 0Exec_Master_Log_Pos: 682                                  //SQL线程执行到对应master的binlog的posRelay_Log_Space: 2064Until_Condition: NoneUntil_Log_File:Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File:Master_SSL_CA_Path:Master_SSL_Cert:Master_SSL_Cipher:Master_SSL_Key:Seconds_Behind_Master: NULL                                                                                    //和master差距的时间 单位:秒  (即使是延迟0秒 也可能又复制延迟 详见如下:)
Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 2003                                                                                    //最近一个IO线程错误 idLast_IO_Error: error connecting to master 'repl@192.168.56.61:3306' - retry-time: 60  retries: 149     //最近一个IO线程错误 logLast_SQL_Errno: 0                                                                                       //最近一个SQL线程错误 idLast_SQL_Error:                                                                                         //最近一个SQL线程错误 logReplicate_Ignore_Server_Ids:Master_Server_Id: 0Master_UUID: c959bdb9-f94c-11e9-b3b8-0800277143f5                                                    //master的uuidMaster_Info_File: mysql.slave_master_infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Slave has read all relay log; waiting for more updatesMaster_Retry_Count: 86400                    Master_Bind:Last_IO_Error_Timestamp: 191216 16:44:04Last_SQL_Error_Timestamp:Master_SSL_Crl:Master_SSL_Crlpath:Retrieved_Gtid_Set: c959bdb9-f94c-11e9-b3b8-0800277143f5:5-6                                                 //接受到的GTID集合Executed_Gtid_Set: c959bdb9-f94c-11e9-b3b8-0800277143f5:1-6,                                                //执行过的GTID集合
f7b23f20-f3ea-11e9-bdb9-080027781379:1-1183171Auto_Position: 1                                                                                        //GTID为自动指定位置Replicate_Rewrite_DB:Channel_Name:Master_TLS_Version:
1 row in set (0.03 sec)--二、Seconds_Behind_Master 为0秒也可能延迟的情况。Seconds_Behind_Master的计算:
show_slave_status_send_data 方法
{
......
if (mi->rli->slave_running){/*Check if SQL thread is at the end of relay logChecking should be done using two conditionscondition1: compare the log positions andcondition2: compare the file names (to handle rotation case)*/if ((mi->get_master_log_pos() == mi->rli->get_group_master_log_pos()) &&           //1、计算IO线程读取到的主库binlog日志位置和SQL线程在备库应用主库binlog的位置 比较。如果一致说明不延迟 继续(!strcmp(mi->get_master_log_name(), mi->rli->get_group_master_log_name())))    //就是判断Read_Master_Log_Pos和Exec_Master_Log_Pos ,Master_Log_File和Relay_Master_Log_File  是否一致{if (mi->slave_running == MYSQL_SLAVE_RUN_CONNECT)protocol->store(0LL);                                                          //2、如果IO线程还在 Seconds_Behind_Master为0, 否则 Seconds_Behind_Master为NULLelseprotocol->store_null();}else                                                                               {long time_diff= ((long)(time(0) - mi->rli->last_master_timestamp)                //3、如果不一样 说明延迟,就计算相差的时间,就是:Seconds_Behind_Master。 具体计算如下:- mi->clock_diff_with_master);protocol->store((longlong)(mi->rli->last_master_timestamp ?max(0L, time_diff) : 0));}}else{protocol->store_null();}
......
}time(0):为当前从库的系统时间
mi->clock_diff_with_master: 为主库和备库的系统时间差。只是在从库IO线程启动时候 计算的时间差。可参考 handle_slave_io 线程方法中的 get_master_version_and_clock()方法。
mi->rli->last_master_timestamp:分为以下的DML和DDL。
DML:dml普通语句 就是 各个EVENT的header的timestamp。  MTS的情况是XID_EVENT的header的timestamp
DDL:就是当前时间(QUERY_EVENT的header的timestamp) + 执行DDL的时间准确查看:
在传统模式下,查看主库和从库的 binlog 的file和pos 是否一致  主从是否有延迟。
在GTID下,查看主库和从库的 执行过的GTID集合(executed_gtid_set) 是否一致  主从是否有延迟。

--三、延迟可能:
--1、SQL线程执行完了所有的binlog日志,  Seconds_Behind_Master也显示0  看起来虽然不延迟, 但如果有网络问题导致 IO线程读取的慢  也有延迟的可能性。
--2、如果在从库的IO线程启动后 修改了 从库的系统时间,影响了mi->clock_diff_with_master ,可能会有延迟的可能性。
--3、如果是DML语句,事务长时间没有提交 也可能造成延迟。 但Seconds_Behind_Master 延迟不会从0开始 会突然到这个事务所花费的时间, 因为在开头的GTID_EVENT和结尾XID_EVENT 事件都是事务提交时间(可参考《Mysql—binlog二进制日志 解析》 章节),
--4、如果是DDL语句,大表的DDL操作 也可能造成延迟。 但Seconds_Behind_Master 延迟是从0开始。
--5、没有主键或者索引 造成的延迟,参数slave_rows_search_algorithms(参考《Mysql主从复制的参数—slave_rows_search_algorithms 》 章节 ) 可设置index_scan和hash_scan 但不能完全消除问题。
--6、sync_relay_log=1 参数的设置 导致大量的relay log刷盘 ,可能造成延迟。
--7、从库是否开启了log_slave_updates参数(从库 开启binlog日志)。 如果从库不是级联库  5.7之后可以不开启,降低延迟的可能
--8、行锁和mdl索 操作的影响  有延迟的可能性。
--9、MTS中的slave_checkpoint_period参数。默认300毫秒检查一次。  如果设置为1分钟  可能Seconds_Behind_Master显示延迟可能。 todo.....

Mysql主从复制—判断是否延迟相关推荐

  1. MySQL主从复制延迟原因及处理思路

    简单概述一下复制逻辑: 1.主库将对数据库实例的变更记录到binlog中. 2.主库会有binlog dump线程实时监测binlog的变更并将这些新的events推给从库(Master has se ...

  2. mysql主从复制延时性问题_MySQL主从同步延迟原因及解决办法

    MySQL主从延迟原因以及解决方案:谈到MySQL数据库主从同步延迟原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作(mysql5.6版本之前),主库对所有DDL和D ...

  3. 动力节点老杜mysql文件_mysql主从复制+mysql主从复制延迟解决方案

    ### 1. 为什么需要mysql主从复制 1. 数据热备 在复杂的业务场景中, 可能因为某一条sql造成了锁表, 这样就会影响正常的业务运行.在复杂的业务场景中, 我们可以使用mysql主从复制, ...

  4. mysql主从复制延迟问题的相关知识与解决方案

    一.如何监控发生了主从延迟? 在从库机器上,执行show slave status,查看Seconds_Behind_Master值,代表主从同步从库落后主库的时间,单位为秒,若同从同步无延迟,这个值 ...

  5. mysql主从复制延迟解决

    mysql主从配置成功,但是过段时间再操作master,发现slave没有同步更新 复制有延迟,slave想要尽可能及时跟上master的进度,可以尝试采用以下几种方法: 1.采用MariaDB发行版 ...

  6. MySQL主从数据库同步延迟问题解决

    MySQL主从数据库同步延迟问题 摘要: MySQL的主从同步是一个很成熟的架构,优点为:①在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;②在从主服务器进行备份,避免备份期间影响 ...

  7. MySQL主从复制原理、半同步操作步骤及原理

    MySQL主从复制原理.半同步操作步骤及原理 1.1 企业Linux运维场景数据同步方案 1.1.1 文件级别的异机同步方案 1.scp/sftp/nc 命令可以实现远程数据同步. 2.搭建ftp/h ...

  8. 在线建立或重做mysql主从复制架构方法(传统模式和GTID模式)【转】

    mysql主从复制架构,是mysql数据库主要特色之一,绝大多数公司都有用到. 而GTID模式是基于事务的复制模式的意思,发展到现在也是越来越多人用. 以前很多文章,介绍搭建mysql主从复制架构,是 ...

  9. mysql主从复制、读写分离到数据库水平拆分及库表散列

    文章转载自http://blog.csdn.net/sd4422739/article/details/49514981 web项目最原始的情况是一台服务器只能连接一个mysql服务器(c3p0只能配 ...

最新文章

  1. POJ 2456 Aggressive cows(二分答案)
  2. 回顾Node文件路径
  3. IOS7笔记-6、控制器多态性、导航控制器、选项卡栏控制器
  4. Riot - 比 Facebook React 更轻量的 UI 库
  5. 机器人的自述作文_机器人的自述作文600字
  6. mysql数据库(9):常用查询的例子
  7. android中设置控件的搞,Android中如何自定义控件
  8. 今天没事做了个MBTI职业倾向测试
  9. Spring零配置之@Configuration注解详解。
  10. sklearn-python简介
  11. 只有得到祝福才是好婚姻
  12. 电脑win7语音怎么测试软件,win7话筒怎么测试 win7话筒测试方法【图文】
  13. Myeclipse修改jdk版本流程
  14. 关闭此标签页 关闭所有标签页easyUI
  15. OO第一单元总结——求导之旅
  16. python求解LeetCode题目,找出数组中的Majority element元素
  17. Java架构师和大数据架构师的区别是什么?哪个更有发展前景?
  18. 【数学建模】相关性分析 - 皮尔逊相关系数 斯皮尔曼相关系数
  19. 0xC0000005: 读取位置 0x00000000 时发生访问冲突
  20. mysql8安装错误,Windows安装MySQL8.0.16 的步骤及出现错误问题解决方法

热门文章

  1. java输出数组的方法
  2. 什么是SAP?它有什么作用!
  3. qlu_新生赛_2019
  4. 自动检测实体类必填字段
  5. 国际现货黄金的点差和持仓过夜费是什么意思
  6. 关于CC2530入门新手需要知道的一些关于单片机的基本知识(一)IO口控制
  7. Flink内核源码(八)Flink Checkpoint
  8. 【转载】CentOS7为firewalld添加开放端口及相关操作
  9. php 超级签名,手动实现一个超级签名
  10. Crypto - Substitution I (Crypto, Trai...) 的解法