使用pt工具检测MySQL主从延迟(r12笔记第7天)

 今天翻看了下《高性能MySQL》,真是让人拍手称绝,里面的很多实战思路非常不错,各种问题分析如数家珍,如果是有一定基础的同学,看起来会非常不错。

  
当然里面提到的一个地方,感觉很有意思,那就是主从延迟的一个测算思路。书中他们是通过建立一张表,插入时间相关的数据,值得一提的是这个表的存储引擎是Federated,主要就是为了完成类似Oracle
DB link一样的特殊需求,在备库端来对比这个时间差来得到一个相对精准的延迟值。

   当然有的同学可能会说,我们有show slave status里面的Seconds_behind_master的选项嘛,那个可不能当做严格意义上的主从延迟标准,尽管看上去这个值都很小,接近于0.

   书中也提到了一个工具,那就是pt-heartbeat。这个工具算是一个比较主流的测试工具,使用起来也非常便捷,安装好pt工具集之后,这只是其中的一个。

   工具的安装部署可以参考

      Percona-toolkit的安装和配置(r8笔记第86天)
      MySQL主从不一致的修复过程

   我们创建一个用户pt_checksum,方便以后做数据修复等,权限都一并给到。

GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO 'pt_checksum'@'10.127.%.%' IDENTIFIED BY 'pt_checksum';   然后我们给予这个用户访问test数据库的权限。

grant all privileges on test.* to pt_checksum@'10.127.%.%';   工具具体的参数可以参考pt-heartbeat --help来看到,我给出要点即可。

  
我们来创建测试表,在后台启动这个心跳守护进程,其中的create-table就是创建测试表,interval是间隔1秒钟,最小可以到0.01秒,update是更新test库上的这个测试表,而replace则是更新替换表里的时间,无须考虑表里是否有数据,daemonize是后台运行的标注。

pt-heartbeat h='10.127.128.99',u='pt_checksum',p='pt_checksum',P=3306 -D
test --create-table --interval=1 --update --replace --daemonize   使用ps命令可以看到如下的heartbeat进程,或者换个口味,用pgrep -fl pt-heartbeat也可以查看。

# ps -ef|grep heartbeat
root     19920     1  0 22:35 ?       
00:00:00 perl /usr/local/bin/pt-heartbeat
h=10.127.128.99,u=pt_checksum,p=pt_checksum,P=3306 -D test
--create-table --interval=1 --update --replace --daemonize   接下来的就是重点工作了,我们可以开启monitor选项来监控主从延迟的情况,有一点需要提一下,就是需要设置server-id

# pt-heartbeat h='10.127.xx.xx',u='pt_checksum',p='pt_checksum',P=3306 -D test --table=heartbeat --monitor
The
--master-server-id option must be specified because the heartbeat table
`test`.`heartbeat` uses the server_id column for --update or --check
but the server's master could not be automatically determined.
Please read the DESCRIPTION section of the pt-heartbeat POD.主库上快速查看。

> show slave hosts;
+-----------+------+------+-----------+--------------------------------------+
| Server_id | Host | Port | Master_id | Slave_UUID                           |
+-----------+------+------+-----------+--------------------------------------+
|     13058 |      | 3306 |        20 | c6d66211-a645-11e6-a2b6-782bcb472f63 |
+-----------+------+------+-----------+--------------------------------------+
1 row in set (0.01 sec)结果和show variables like 'server%'结果是一致的,更快速高效。
  我们查看延迟的情况。

# pt-heartbeat h='10.127.xx.xx',u='pt_checksum',p='pt_checksum',P=3306 -D test --table=heartbeat --monitor --master-server-id=20
0.00s [  0.00s,  0.00s,  0.00s ]
0.00s [  0.00s,  0.00s,  0.00s ]
0.00s [  0.00s,  0.00s,  0.00s ]
0.00s [  0.00s,  0.00s,  0.00s ]
0.00s [  0.00s,  0.00s,  0.00s ]
0.00s [  0.00s,  0.00s,  0.00s ]   可以看到目前的环境中是诶呦任何延迟的,方括号里面的指标是什么意思,可以使用frames来定制,比如默认是1m,5m,15m,我们可以定制,比如显示为1m,2m,3m,4m这样。

# pt-heartbeat h='10.127.xx.xx',u='pt_checksum',p='pt_checksum',P=3306
-D test --table=heartbeat --monitor --master-server-id=20 --frames=1m,2m,3m,4m
0.00s [  0.00s,  0.00s,  0.00s,  0.00s ]
0.00s [  0.00s,  0.00s,  0.00s,  0.00s ]
0.00s [  0.00s,  0.00s,  0.00s,  0.00s ]   有的同学可能说,怎么都显示为0,如果用sysbench压一下,立马或有延迟的明显差异。我们在后面整体对比测试一下。

  如果想即查即看,就看一次,可以使用check选项,当然这个值就没有frame的时间范围了。

# pt-heartbeat h='10.127.128.99',u='pt_checksum',p='pt_checksum',P=3306
-D test --table=heartbeat  --master-server-id=20  --check
0.00   当然有进有出,我们开启了后台守护进程,本质上是个perl脚本,如果要停止,也规范一些,使用stop选项来做,会生辰改一个临时文件,下次需要重新启动的话,需要清理掉这个文件。

# pt-heartbeat h='10.127.xx.xx',u='pt_checksum',p='pt_checksum',P=3306 -D test --stop
Successfully created file /tmp/pt-heartbeat-sentinel

时间: 2024-08-02 17:02:14

使用pt工具检测MySQL主从延迟(r12笔记第7天)的相关文章

MySQL 主从延迟监控脚本(pt-heartbeat)

    对于MySQL数据库主从复制延迟的监控,我们可以借助percona的有力武器pt-heartbeat来实现.pt-heartbeat通过使用时间戳方式在主库上更新特定表,然后在从库上读取被更新的时间戳然后与本地系统时间对比来得出其延迟.本文主要是通过脚本来定期检查从库与主库复制的延迟度并发送邮件,供大家参考.     有关pt-heartbeat工具的安装可以参考:percona-toolkit的安装及简介    有关pt-heartbeat工具的介绍可以参考:使用pt-heartbea

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

                一.如何监控发生了主从延迟?   在从库机器上,执行show slave status,查看Seconds_Behind_Master值,代表主从同步从库落后主库的时间,单位为秒,若同从同步无延迟,这个值为0.   Mysql主从延迟一个重要的原因之一是:mysql是以单线程串行执行.   主从复制数据时,在从服务器上的mysql,是一个线程在同步数据. 串行的方式,它是指,执行一个后才继续执行下一个.如果一个卡住了,要等待时间,才会继续下一个.串行与并行是相反的

使用Percona Toolkit解决Mysql主从不同步问题【备忘】

由于各种原因,mysql主从架构经常会出现数据不一致的情况出现,大致归结为如下几类 1:备库写数据 2:执行non-deterministic query 3:回滚掺杂事务表和非事务表的事务 4:binlog或者relay log数据损坏 数据不同步给应用带来的危害是致命的,当出现主从数据不一致的情况,常见的应对方法是先把从库下线,然后找个半夜三更的时间把应用停掉,重新执行同步,如果数据库的体积十分庞大,那工作量可想而知,会让人崩溃.本文介绍使用percona-toolkit工具对mysql主从

用HAProxy来检测MySQL复制的延迟的教程_Mysql

 在MySQL世界里,HAProxy 通常来作为软件负载均衡器使用.彼得.博罗什在过去的邮件中解释了如何使用percona xtradb集群(pxc)来对其设置.所以它只发送查询到可应用的节点.同样的方法可用于常规主从设置来读取负载并分散到多个从节点.不过,使用MySQL复制,另一个因素开始发挥作用:复制延迟.在这种情况下,被提及到的 Percona xtraDB 集群以及我们提出只返回"向上"或者"向下"的检查方法行不通.我们将希望依赖其复制延迟来调整内部Hapr

MySQL主从不一致发现的细小问题分析(r12笔记第63天)

   今天和同事一起看了一个问题,她在一个主从环境中发现了数据不一致,存在主键冲突.     show slave status的报错信息大概是下面的样子. Last_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 0 failed executing transaction '0e454161-3169-11e7-98f6

MySQL主从严重延迟后迁移Transfer的注意事项

MySQL-Transfer逐渐有一些其他公司的同学在使用,这里会持续更新运维上的注意事项.        背景        正常情况下,若要从原来的主从切换成Transfer 模式,只需要作如下步骤: 1.在slave相同机器上部署一个Transfer,并配置好各种remote_slave参数 2.在slave上stop slave 3.把slave的表结构dump给transfer 4.从slave中查看当前执行到master的位置 5.在transfer执行change master x

MySQL主从同步相关-主从多久的延迟?

这次单独调查一下主从延迟的时间.这里说的主从延迟,并不是指"从库更新性能跟不上主库", 而是"一个命令从主库更新完成到从库更新完成的延迟时间. 基本流程: 对于每一个连上来的从库,主库都有一个client线程与之对应. 先看主从的基本数据流 1.客户端SQL更新命令 2.主库执行 3.主库写binlog 4.主库client线程读binlog发送给从库的io线程 5.从库io线程写盘(relay-log) 6.从库sql线程读relay-log 7.执行更新. 这里有涉及到两

MySQL 5.6, 5.7并行复制测试(r12笔记第9天)

   对于主从延迟,其实一直以来就是一个颇有争议的话题,在MySQL阵营中,如果容忍一定的延迟的场景,通过主从来达到读写分离是个很不错的方案,但是延迟率到底有多高可以接受,新版本中的并行复制效果怎么样,在不同的版本中是否有改变,我们能否找到一些参考的数据来佐证,这一点上我们可以通过一些小测试来说明.    首先来为了基本按照同一个参考标准,我们就在同一台服务器上安装了5.6,5.7的MySQL服务,另外一台服务器上搭建了从库.    数据库版本为5.6.23 Percona分支, 5.7.17

MySQL 5.6, 5.7并行复制测试(二)(r12笔记第10天)

  昨天花了点时间整理了下并行复制在5.6,5.7中的一些差别和测试,当然只是一个开始,因为里面还有不少需要完善的部分,总体的感觉来看MySQL 5.7里的并行复制改进很大,能够极大提高效率,充分利用资源.   那我们来简单回顾一下MySQL的复制里的一些事情,然后继续展开测试.    首先借丁奇大师总结的一个经典的主从复制的流程图来展开. 整个复制的流程中,看似存在多个节点会存在延迟的可能,而如果把这些工作都细化,那么就会有一个很本质的原因,那就是在主库端的更新是多线程,而从库端更新是单线程.