mysql管理工具之pt
2024-08-29 20:55:53
之前我一直用Seconds_behind_master来衡量主从的延迟,今天看到文档,才觉得多么不可靠!以下是官方文档的描述:
In essence, this field measures the time difference in seconds between the slave SQL thread and the slave I/O thread.
也就是说,这个变量是描述的是从库上I/O thread和SQL thread之间的时间差。
下面使用pt-heartbeat监控主从延迟:
【原理】:
1:在主库上创建一张heartbeat表,按照一定的时间频率更新该表的字段(把时间更新进去)。
2:连接到从库上检查复制的时间记录,和从库的当前系统时间进行比较,得出时间的差异。
【用法】:
pt-heartbeat [OPTIONS] [DSN] --update|--monitor|--check|--stop
【参数说明】
--check
检查从的延迟,检查一次就退出,除非指定了--recurse会递归的检查所有的从服务器。 --monitor
持续监控从的延迟情况。通过--interval指定的间隔时间,打印出从的延迟信息--daemonize
执行时,放入到后台执行 --file
打印--monitor最新的记录到指定的文件,很好的防止满屏幕都是数据的烦恼。 --frames
在--monitor里输出的[]里的记录段,默认是1m,5m,15m。可以指定1个,如:--frames=1s,多个用逗号隔开。可用单位有秒(s)、分钟(m)、小时(h)、天(d)。 --interval
检查、更新的间隔时间。默认是见是1s。最小的单位是0.01s,最大精度为小数点后两位,因此0.015将调整至0.02。 --log
开启daemonized模式的所有日志将会被打印到制定的文件中。 --update
更新主上的心跳表。 --replace
使用--replace代替--update模式更新心跳表里的时间字段,这样的好处是不用管表里是否有行。 --stop
停止运行该工具(--daemonize),在/tmp/目录下创建一个“pt-heartbeat-sentinel” 文件。后面想重新开启则需要把该临时文件删除,才能开启(--daemonize)。 --table
指定心跳表名,默认heartbeat。 --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
);
【使用案例】
主库:10.10.101.11 端口3306
从库:10.10.101.11 端口3307
1、在主库上执行命令:
/usr/local/bin/pt-heartbeat -D test --create-table -h 10.10.101.11 -P 3306 -u root -p '*******' --update --daemonize
-D:表示受监控的数据库
这时,主库中已经创建了下面的表heartbeat:
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| checksums |
| heartbeat |
+----------------+
2 rows in set (0.00 sec) mysql> select * from heartbeat;
+----------------------------+-----------+------------------+----------+-----------------------+---------------------+
| ts | server_id | file | position | relay_master_log_file | exec_master_log_pos |
+----------------------------+-----------+------------------+----------+-----------------------+---------------------+
| 2015-11-02T15:01:45.001340 | 113306 | mysql-bin.000021 | 1240408 | mysql-bin.000021 | 120 |
+----------------------------+-----------+------------------+----------+-----------------------+---------------------+
1 row in set (0.00 sec)
2、在从库上进行延迟监控:
#执行一次就退出
[root@10-10-101-11 backup]# /usr/local/bin/pt-heartbeat -D test -h 10.10.101.11 -P 3307 -uroot -p'*******' --check
0.00
[root@10-10-101-11 backup]#
持续监控:
[root@10-10-101-11 backup]# /usr/local/bin/pt-heartbeat -D test -h 10.10.101.11 -P 3307 -uroot -p'*******' --monitor
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 ]
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 ]
0.00s [ 0.00s, 0.00s, 0.00s ]
更加详细请参考官方说明文档:https://www.percona.com/doc/percona-toolkit/2.2/pt-heartbeat.html
最新文章
- WCF学习之旅—WCF服务部署到应用程序(十)
- _weak typeof(self) weakSelf = self;
- js 获取据当前时间n天前的时间
- Shell标准输出、标准错误 >;/dev/null 2>;&;1
- Execl 使用技巧
- Python 打印99乘法口诀表
- web学习笔记
- CPU虚拟化的常见技术
- VB兼容问题
- linux笔记:shell基础-bash基本功能
- 使用MiniProfiler调试ASP.NET MVC网站性能
- Catching Fish[HDU1077]
- Oracle用户及角色的权限管理[Oracle基础]
- ASP.NET- Web.Config配置大文件上传
- ubuntu用户及用户组文件信息
- 学生选课系统数据库SQL语句考试题
- OD: Ring0 &; Kernel
- AJAX封装(IE)
- 如何让一个DIV水平,垂直方向都居中于浏览器?
- mysql建数据库的字符集与排序规则
热门文章
- php中如何传递Session ID
- 在CSS中定义【导航栏】超链接样式
- exactly the kind of division of tasks that Gulp.js is built on
- sersync+rsync做实时同步
- 读写Session
- ES6 javascript 实用开发方法技巧分享
- 【FFMPEG】【ARM-Linux开发】 ffmpeg 静态库使用,undefined reference错误
- cpp调用c的动态库
- Reactor系列(四)subscribe订阅
- 【持续更新】一个简洁、易用的美赛 LaTeX 模板: easyMCM