日常工作中,对于MySQL主从复制检查,一方面我们要保证复制的整体结构是否正常,另一方面需要检查主从数据是否保持一致。对于前者我们可以通过监控复制线程是否工作正常以及主从延时是否在容忍范围内,对于后者则可以通过分别校验主从表中数据的md5码是否一致,来保证数据一致,可以使用Maatkit工具包中的mk-table-checksum工具去检查。在这里,我只想讨论下关于如何检查主从延时的问题。

判断主从延时,通常有两个方法:1. Seconds_Behind_Master vs 2. mk-heartbeat,下面具体说下两者在实现功能的差别。

方法1. 通过监控show slave statusG命令输出的Seconds_Behind_Master参数的值来判断,是否有发生主从延时。其值有这么几种:

NULL — 表示io_thread或是sql_thread有任何一个发生故障,也就是该线程的Running状态是No,而非Yes。

0 — 该值为零,是我们极为渴望看到的情况,表示主从复制良好,可以认为lag不存在。

正值 — 表示主从已经出现延时,数字越大表示从库落后主库越多。

负值 — 几乎很少见,我只是听一些资深的DBA说见过,其实,这是一个BUG值,该参数是不支持负值的,也就是不应该出现。

show slave statusG,该命令的输出结果非常丰厚,给我们的监控提供了很多有意义的参数,比如:Slave_IO_Running该参数可作为io_thread的监控项,Yes表示io_thread的和主库连接正常并能实施复制工作,No则说明与主库通讯异常,多数情况是由主从间网络引起的问题;Slave_SQL_Running该参数代表sql_thread是否正常,具体就是语句是否执行通过,常会遇到主键重复或是某个表不存在。下面就说到今天的重点Seconds_Behind_Master,该值作为判断主从延时的指标,那么它又是怎么得到这个值的呢,同时,它为什么又受到很多人的质疑?

Seconds_Behind_Master是通过比较sql_thread执行的event的timestamp和io_thread复制好的event的timestamp(简写为ts)进行比较,而得到的这么一个差值。我们都知道的relay-log和主库的bin-log里面的内容完全一样,在记录sql语句的同时会被记录上当时的ts,所以比较参考的值来自于binlog,其实主从没有必要与NTP进行同步,也就是说无需保证主从时钟的一致。你也会发现,其实比较真正是发生在io_thread与sql_thread之间,而io_thread才真正与主库有关联,于是,问题就出来了,当主库I/O负载很大或是网络阻塞,io_thread不能及时复制binlog(没有中断,也在复制),而sql_thread一直都能跟上io_thread的脚本,这时Seconds_Behind_Master的值是0,也就是我们认为的无延时,但是,实际上不是,你懂得。这也就是为什么大家要批判用这个参数来监控数据库是否发生延时不准的原因,但是这个值并不是总是不准,如果当io_thread与master网络很好的情况下,那么该值也是很有价值的。(就好比:妈–儿子–媳妇的关系,妈与儿子亲人,媳妇和儿子也亲人,不见得媳妇与妈就很亲。开个玩笑:-)之前,提到Seconds_Behind_Master这个参数会有负值出现,我们已经知道该值是io_thread的最近跟新的ts与sql_thread执行到的ts差值,前者始终是大于后者的,唯一的肯能就是某个event的ts发生了错误,比之前的小了,那么当这种情况发生时,负值出现就成为可能。

方法2. mk-heartbeat,Maatkit万能工具包中的一个工具,被认为可以准确判断复制延时的方法。

mk-heartbeat的实现也是借助timestmp的比较实现的,它首先需要保证主从服务器必须要保持一致,通过与相同的一个NTP server同步时钟。它需要在主库上创建一个heartbeat的表,里面至少有id与ts两个字段,id为server_id,ts就是当前的时间戳now(),该结构也会被复制到从库上,表建好以后,会在主库上以后台进程的模式去执行一行更新操作的命令,定期去向表中的插入数据,这个周期默认为1秒,同时从库也会在后台执行一个监控命令,与主库保持一致的周期去比较,复制过来记录的ts值与主库上的同一条ts值,差值为0表示无延时,差值越大表示延时的秒数越多。我们都知道复制是异步的ts不肯完全一致,所以该工具允许半秒的差距,在这之内的差异都可忽略认为无延时。这个工具就是通过实打实的复制,巧妙的借用timestamp来检查延时,赞一个!

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget

官方微博

TechTarget中国

如何监控mysql数据库时间_如何监控MySQL数据库主从之间的延时相关推荐

  1. 小程序 数据库 时间_使用云开发数据库构建更生动的小程序

    导语 长连接服务被广泛应用在消息提醒.即时通讯.推送.直播弹幕.游戏等场景.本篇文章将介绍云开发数据库的长连接服务--实时数据推送,使用它来构建更生动的小程序.什么是实时数据推送? 通过云开发数据库的 ...

  2. mysql 获取当前日期_详解mysql 获取当前日期及格式化

    本篇文章主要介绍了mysql 获取当前日期及格式化,具有一定的参考价值,感兴趣的小伙伴们可以参考一下. MySQL 获取当前日期及日期格式 获取系统日期: NOW() 格式化日期: DATE_FORM ...

  3. 监控mysql数据库 更新_实时监控mysql数据库变化

    对于二次开发来说,很大一部分就找找文件和找数据库的变化情况 对于数据库变化.还没有发现比较好用的监控数据库变化监控软件. 今天,我就给大家介绍一个如何使用mysql自带的功能监控数据库变化 1.打开数 ...

  4. 怎么监控mysql数据变化_实时监控mysql数据库变化

    对于二次开发来说,很大一部分就找找文件和找数据库的变化情况 对于数据库变化.还没有发现比较好用的监控数据库变化监控软件. 今天,我就给大家介绍一个如何使用mysql自带的功能监控数据库变化 1.打开数 ...

  5. mysql 实例可用性_转载:MySQL数据库的高可用性分析

    MySQL数据库是目前开源应用最大的关系型数据库,有海量的应用将数据存储在MySQL数据库中.存储数据的安全性和可靠性是生产数据库的关注重点.本文分析了目前采用较多的保障MySQL可用性方案. MyS ...

  6. mysql 参照完整性规则_详解mysql数据库审计特点、实现方案及审计插件部署演示...

    概述 数据库审计(简称DBAudit)能够实时记录网络上的数据库活动,对数据库操作进行细粒度审计的合规性管理,对数据库遭受到的风险行为进行告警,对攻击行为进行阻断.它通过对用户访问数据库行为的记录.分 ...

  7. mysql数据库实战_主题:MySQL数据库操作实战

    昨天项目发布,要做数据移行,要实现的功能很变态,时间很紧迫,基本上是使出了全身解数,才能有快又准地完成工作,期间发现很多小技巧串联起来使用,效果的确非常好. 武器: 1 mysqldump+mysql ...

  8. mysql 数据修改时间_怎样修改mysql数据中的具体时间

    匿名用户 1级 2016-12-30 回答 应用场景: 1.在数据表中,要记录每条数据是什么时候创建的,不需要应用程序去特意记录,而由数据数据库获取当前时间自动记录创建时间:2.在数据库中,要记录每条 ...

  9. mysql 默认时间_使用Sysbench对滴滴云MySQL进行基准测试

    Sysbench是一款开源的多线程.跨平台的基准测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试.本文使用Sysbench针对滴滴云的MySQL进行基准测试. 本文使用的MySQL数 ...

最新文章

  1. 一个好的APP需要后台产品经理么?
  2. Python3 爬虫实战 — 安居客武汉二手房【requests、Beautiful Soup、CSV】
  3. Makefile编写详解--项目开发
  4. OpenGL ARB 看来终于想通了,OpenGL SDK终于要出来了。
  5. 03MyBatis的事务管理和缓存机制
  6. Mac/Linux 安装联邦学习 Fate 框架单机部署所需的依赖(填坑大全)
  7. Eigen库数据结构内存对齐问题
  8. 关于Spring.net+NHibernate的事务控制
  9. 求字符串的最小正周期
  10. linux php连接mysql权限不够_PHP LINUX APACHE MYSQL权限挣扎
  11. 不仅仅是自动化,DevOps 测试工具推荐
  12. 新项目六之集成新版友盟统计
  13. CCID多线程界面-python
  14. 加拿大蒙特利尔城市风景高清Mac动态壁纸
  15. IGraphicsContain 删除元素
  16. Logo就是商标吗?别再被扰乱视线了
  17. SEO搜索引擎优化(总结学习)
  18. 信息学奥赛的“一二三四”
  19. oracle 日常管理小节
  20. LeetCode 546. 移除盒子 | Python

热门文章

  1. hwclock设置日期_linux中时间设置date、hwclock、clock
  2. Java设计模式(十):迭代器设计模式
  3. linux标准c和c编译器6,linux内核中GNU C和标准C的区别
  4. h5压缩图片上传 php_一键压缩,图片上传大小不得超过200K?
  5. linux安装的mysql没有密码_linux系统安装的mysql数据库root帐户密码忘记的两种处理方法...
  6. java字符串根据空格截取并存进list,并在每个元素前后加上/
  7. (转)在Eclipse中创建Maven多模块工程
  8. |Vijos|树状数组|P1512 SuperBrother打鼹鼠
  9. SQL server 2000建立远程连接(局域网)
  10. 001.搭建开发环境