前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pt-heartbeat检测MySQL同步延迟

pt-heartbeat检测MySQL同步延迟

作者头像
AsiaYe
发布2020-03-26 11:07:15
8810
发布2020-03-26 11:07:15
举报
文章被收录于专栏:DBA随笔

//

pt-heartbeat检测MySQL同步延迟

//

公司今年准备进行某一个机房的业务迁移,需要对新机房的网络做一个测试,为了测试机房的同步延迟,使用了下pt-heartbeat的工具,针对这个工具,总结一下它的基本用法。

01

工具简介

pt-heartbeat是用来检测主从延迟情况的,它比Seconds_behind_master的值更具有参考性,它的整体思路是:

1、在主库上创建一张心跳表heartbeat

2、主库上插入一条带有时间的记录到心跳表中,使用MySQL中的now()函数,

3、然后该记录会复制到slave中,在slave中也声称一个时间

4、slave表根据当前的时间戳减去heartbeat表中的记录值来判断主从的延迟情况。

我们看看这个heartbeat表的表结构:

代码语言:javascript
复制
mysql> show create table heartbeat\G
*************************** 1. row ***************************
       Table: heartbeat
Create Table: CREATE TABLE `heartbeat` (
  `ts` varchar(26) NOT NULL,
  `server_id` int(10) unsigned NOT NULL,
  `file` varchar(255) DEFAULT NULL,
  `position` bigint(20) unsigned DEFAULT NULL,
  `relay_master_log_file` varchar(255) DEFAULT NULL,
  `exec_master_log_pos` bigint(20) unsigned DEFAULT NULL,
  PRIMARY KEY (`server_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

里面的数据大概如下:

代码语言:javascript
复制
+----------------------------+-----------+-----------------+-----------+-----------------------+---------------------+
| ts                         | server_id | file            | position  | relay_master_log_file | exec_master_log_pos |
+----------------------------+-----------+-----------------+-----------+-----------------------+---------------------+
| 2020-03-17T09:56:38.002450 |       192 | mysqlbin.000003 |  51827996 | mysqlbin.000430       |           207392068 |
| 2020-03-17T21:05:22.000830 |    121249 | mysqlbin.000430 | 225253739 | NULL                  |                NULL |
+----------------------------+-----------+-----------------+-----------+-----------------------+---------------------+

ts就是我们的时间值。server_id是服务器的id,file和position是binlog的一些记录,这里我们不做过多关注。

02

具体用法

pt-heartbeat有很多参数,不同的参数有不同的功能,这里先说几个重要的参数:

--update:每秒更新一次heartbeat表的记录

-D,--database:heartbeat表所在的数据库

--create-table:第一次运行是,带上该参数可以在master上创建心跳表并且插入一条记录。

--daemonize:让脚本以后台进程的方式运行

--monitor:该参数是监测延迟并输出结果(持续输出)

--check:该参数监测延迟,但是只输出一次对比结果

Master端:

master端主要的做法是使用--create-table产生表,并且使用--update参数不停的更新表heartbeat中的时间。

代码语言:javascript
复制
/usr/bin/pt-heartbeat -D infra --update -u dba_dbmonitor -p xxxxxxx -P 4306 -h 127.0.0.1 --create-table --daemonize

Slave端:

slave端主要是使用--monitor参数或者--check参数监测对比结果,其中--monitor是监测结果持续输出,--check是只输出一次结果。

代码语言:javascript
复制
[root@ ~]# pt-heartbeat --database infra --monitor -u dba_dbmonitor -p xxxxxxx -P 4306 -h10.xxx.124.100
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 ]

其中,第一列是实施延迟,第二列是1分钟延迟,第三列是5分钟延迟,第四列是15分钟延迟

还需要注意几点:

1、--update, --monitor和--check三者是互斥的,

2、--daemonize只适用于--update场景

3、测试前需要开通主从防火墙

4、要分配主从账号,保证pt-heartbeat能够访问MySQL服务

03

其他参数

这里只写部分参数的个人理解,具体的可以使用pt-heartbeat --help的方式查看帮助文档。

--ask-pass:连接数据库时提示密码

--charset:默认的字符集

--check-read-only:检查server是否是只读的,如果是只读的,则会跳过插入操作

--config:设置配置文件,将参数写进配置文件中,而不是使用参数选项来加载

--create-table-engine:设置heartbeat表的参数引擎

--defaults-file指定参数文件的位置,必须为绝对路径

--file:将最新的--monitor信息输出到文件中

--frames:统计的时间间隔窗口自定义

--interval:插入心跳表的频率修改

--log:当脚本使用守护进程的时候,可以使用--log的方法将脚本的日志打印到一个文件

--master-server-id:指定master的server-id,最新版本的pt工具可以不写

--print-master-server-id:打印master的server-id

--recurse:该参数用来检测复制级联的延迟情况

--table:指定心跳表的名字

--skew:指定check相对于update的延迟时间,也就是在主库进行update之后,多久再在从库上进行对比操作。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档