pt-heartbeat监控mysql主从复制延迟

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

   

   虽然自带的show slave  status\G;输出的seconds_behind_master列理论上显示了备库的延时,但是由于各种原因并不总是很正确,所以我们使用percona toolkit的一个工具pt-heartbeat来监控

安装文档:http://douya.blog.51cto.com/6173221/1735233  

 

一、pt-hearbaet的原理:

1,在主上创建一张heartbeat表,按照一定的时间频率更新该表的字段(把时间更新进去)。

2,连接到从库上检查复制的时间记录,和从库的当前系统时间进行比较,得出时间的差异。

二、使用方法:


1
pt-heartbeat [OPTIONS] [DSN]  --update|--monitor|--check|--stop

 

三、常用参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
注意:需要指定的参数至少有  --stop,--update,--monitor,--check。
     其中 --update,--monitor和--check是互斥的,--daemonize和--check也是互斥。
--ask-pass
隐式输入MySQL密码
--charset
字符集设置
--check
检查从的延迟,检查一次就退出,除非指定了 --recurse会递归的检查所有的从服务器。
--check-read-only
如果从服务器开启了只读模式,该工具会跳过任何插入。
--create-table
在主上创建心跳监控的表,如果该表不存在。可以自己建立,建议存储引擎改成memory。通过更新该表知道主从延迟的差距。
CREATE  TABLE  heartbeat (
   ts                     varchar (26)  NOT  NULL ,
   server_id              int  unsigned  NOT  NULL  PRIMARY  KEY ,
   file                   varchar (255)  DEFAULT  NULL ,     -- SHOW MASTER STATUS
   position               bigint  unsigned  DEFAULT  NULL -- SHOW MASTER STATUS
   relay_master_log_file  varchar (255)  DEFAULT  NULL ,     -- SHOW SLAVE STATUS
   exec_master_log_pos    bigint  unsigned  DEFAULT  NULL   -- SHOW SLAVE STATUS
);
heratbeat表一直在更改ts和position,而ts是我们检查复制延迟的关键。
--daemonize
执行时,放入到后台执行
--user
-u,连接数据库的帐号
--database
-D,连接数据库的名称
--host
-h,连接的数据库地址
--password
-p,连接数据库的密码
--port
-P,连接数据库的端口
--socket
-S,连接数据库的套接字文件
--file 【--file=output.txt】
打印 --monitor最新的记录到指定的文件,很好的防止满屏幕都是数据的烦恼。
--frames 【--frames=1m,2m,3m】
--monitor里输出的[]里的记录段,默认是1m,5m,15m。可以指定1个,如:--frames=1s,多个用逗号隔开。可用单位有秒(s)、分钟(m)、小时(h)、天(d)。
--interval
检查、更新的间隔时间。默认是见是1s。最小的单位是0.01s,最大精度为小数点后两位,因此0.015将调整至0.02。
--log
开启daemonized模式的所有日志将会被打印到制定的文件中。
--monitor
持续监控从的延迟情况。通过 --interval指定的间隔时间,打印出从的延迟信息,通过--file则可以把这些信息打印到指定的文件。
--master-server-id
指定主的server_id,若没有指定则该工具会连到主上查找其server_id。
--print-master-server-id
--monitor和--check 模式下,指定该参数则打印出主的server_id。
--recurse
多级复制的检查深度。模式M-S-S...不是最后的一个从都需要开启log_slave_updates,这样才能检查到。
--recursion-method
指定复制检查的方式,默认为processlist,hosts。
--update
更新主上的心跳表。
--replace
使用 --replace代替--update模式更新心跳表里的时间字段,这样的好处是不用管表里是否有行。
--stop
停止运行该工具( --daemonize),在/tmp/目录下创建一个“pt-heartbeat-sentinel” 文件。后面想重新开启则需要把该临时文件删除,才能开启(--daemonize)。
--table
指定心跳表名,默认heartbeat。



四、测试环境

1
2
Master  192.168.2.22:3306
Slave   192.168.2.23:3306


1,首先添加heartbeat表

1
2
mysql>  create  database  heartbeat;
Query OK, 1 row affected (0.00 sec)
1
2
[root@mysql-master data]#pt-heartbeat  --user=root --password=123456 
-S /tmp/mysql.sock -D heartbeat   --master-server-id=1  --create-table --update

wKiom1aYrHSTIYHAAAApZdMA_Bo824.png


 



2,在主库上运行: --daemonize 表示守护进程,后台运行。

1
2
3
4
5
6
7
8
[root@mysql-master ~]#pt-heartbeat  --user=root --ask-pass --host=127.0.0.1  --create-table 
-D heartbeat   --interval=1 --update --replace --daemonize
Enter  password
  
   检查是否正常启动:
[root@mysql-master ~]# pgrep -fl pt-heartbeat
5406 perl /usr/ local /bin/pt-heartbeat  --user=root --ask-pass --host=127.0.0.1 
--create-table -D heartbeat --interval=1 --update --replace --daemonize



3. 在从库运行监测复制延迟,也可以在主库监控复制延迟

例子1:从库监测

1
2
3
4
5
6
7
8
9
10
11
[root@mysql-slave ~]# pt-heartbeat  --user=root --password=123456 
-S /tmp/mysql.sock -D  heartbeat  --master-server-id=1  --monitor --print-master-server-id
0.00s [  0.00s,  0.00s,  0.00s ] 1  #实时延迟,1分钟延迟,5分钟延迟,15分钟延迟
0.00s [  0.00s,  0.00s,  0.00s ] 1
0.00s [  0.00s,  0.00s,  0.00s ] 1
0.00s [  0.00s,  0.00s,  0.00s ] 1
0.00s [  0.00s,  0.00s,  0.00s ] 1
0.00s [  0.00s,  0.00s,  0.00s ] 1
0.00s [  0.00s,  0.00s,  0.00s ] 1
0.00s [  0.00s,  0.00s,  0.00s ] 1
0.00s [  0.00s,  0.00s,  0.00s ] 1


例子2:从库监测

1
2
3
4
5
6
7
8
[root@mysql-slave ~]# pt-heartbeat  --user=root --password=123456 
-S /tmp/mysql.sock -D  heartbeat   --master-server-id=1 --monitor 
--print-master-server-id --daemonize --log=/tmp/slave-lag.log
[root@mysql-slave ~]# tail -f /tmp/slave-lag.log 
0.00s [  0.00s,  0.00s,  0.00s ] 1
0.00s [  0.00s,  0.00s,  0.00s ] 1
0.00s [  0.00s,  0.00s,  0.00s ] 1
0.00s [  0.00s,  0.00s,  0.00s ] 1


例子3:主库监测

1
2
3
4
5
6
7
8
9
10
[root@mysql-master ~]#  pt-heartbeat -D heartbeat  --table=heartbeat 
--monitor --host=192.168.2.23 --user=root --password=123456 
--print-master-server-id   --master-server-id=1 
0.00s [  0.00s,  0.00s,  0.00s ] 1
0.00s [  0.00s,  0.00s,  0.00s ] 1
0.00s [  0.00s,  0.00s,  0.00s ] 1
0.00s [  0.00s,  0.00s,  0.00s ] 1
0.00s [  0.00s,  0.00s,  0.00s ] 1
0.00s [  0.00s,  0.00s,  0.00s ] 1
0.00s [  0.00s,  0.00s,  0.00s ] 1



,如何关闭主库,从库上面执行的后台进程。可以用参数--stop 去关闭:

方法一:

1
2
3
4
[root@mysql-master ~]#  pt-heartbeat  --stop
Successfully created file /tmp/pt-heartbeat-sentinel
[root@mysql-master ~]# rm -rf /tmp/pt-heartbeat-sentinel 
[root@mysql-master ~]#  不删除pt-heartbeat-sentinel  ,第二次,会无法启动

 方法二:推荐

1
2
3
4
[root@mysql-master ~]# pgrep -fl pt-heartbeat
5406 perl /usr/ local /bin/pt-heartbeat  --user=root --ask-pass --host=127.0.0.1
--create-table -D heartbeat --interval=1 --update --replace --daemonize
[root@mysql-master ~]# kill  -9 5406






      本文转自crazy_charles 51CTO博客,原文链接:http://blog.51cto.com/douya/1735386,如需转载请自行联系原作者




相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
8天前
|
监控 Java 关系型数据库
Spring Boot整合MySQL主从集群同步延迟解决方案
本文针对电商系统在Spring Boot+MyBatis架构下的典型问题(如大促时订单状态延迟、库存超卖误判及用户信息更新延迟)提出解决方案。核心内容包括动态数据源路由(强制读主库)、大事务拆分优化以及延迟感知补偿机制,配合MySQL参数调优和监控集成,有效将主从延迟控制在1秒内。实际测试表明,在10万QPS场景下,订单查询延迟显著降低,超卖误判率下降98%。
|
2月前
|
关系型数据库 MySQL 数据库
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
随着数据量增长和业务扩展,单个数据库难以满足需求,需调整为集群模式以实现负载均衡和读写分离。MySQL主从复制是常见的高可用架构,通过binlog日志同步数据,确保主从数据一致性。本文详细介绍MySQL主从复制原理及配置步骤,包括一主二从集群的搭建过程,帮助读者实现稳定可靠的数据库高可用架构。
180 9
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
|
2月前
|
SQL 网络协议 关系型数据库
MySQL 主从复制
主从复制是 MySQL 实现数据冗余和高可用性的关键技术。主库通过 binlog 记录操作,从库异步获取并回放这些日志,确保数据一致性。搭建主从复制需满足:多个数据库实例、主库开启 binlog、不同 server_id、创建复制用户、从库恢复主库数据、配置复制信息并开启复制线程。通过 `change master to` 和 `start slave` 命令启动复制,使用 `show slave status` 检查同步状态。常见问题包括 IO 和 SQL 线程故障,可通过重置和重新配置解决。延时原因涉及主库写入延迟、DUMP 线程性能及从库 SQL 线程串行执行等,需优化配置或启用并行处理
122 40
|
2月前
|
SQL 存储 关系型数据库
MySQL主从复制 —— 作用、原理、数据一致性,异步复制、半同步复制、组复制
MySQL主从复制 作用、原理—主库线程、I/O线程、SQL线程;主从同步要求,主从延迟原因及解决方案;数据一致性,异步复制、半同步复制、组复制
331 11
|
4月前
|
NoSQL 关系型数据库 Redis
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
169 14
|
4月前
|
关系型数据库 MySQL 数据库
docker高级篇(大厂进阶):安装mysql主从复制
docker高级篇(大厂进阶):安装mysql主从复制
155 24
|
5月前
|
缓存 监控 关系型数据库
如何根据监控结果调整 MySQL 数据库的参数以提高性能?
【10月更文挑战第28天】根据MySQL数据库的监控结果来调整参数以提高性能,需要综合考虑多个方面的因素
203 1
|
5月前
|
监控 关系型数据库 MySQL
如何监控和诊断 MySQL 数据库的性能问题?
【10月更文挑战第28天】监控和诊断MySQL数据库的性能问题是确保数据库高效稳定运行的关键
768 1
|
1月前
|
关系型数据库 MySQL Java
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
|
1月前
|
关系型数据库 MySQL 数据库连接
docker拉取MySQL后数据库连接失败解决方案
通过以上方法,可以解决Docker中拉取MySQL镜像后数据库连接失败的常见问题。关键步骤包括确保容器正确启动、配置正确的环境变量、合理设置网络和权限,以及检查主机防火墙设置等。通过逐步排查,可以快速定位并解决连接问题,确保MySQL服务的正常使用。
301 82
下一篇
oss创建bucket