pt-heartbeat 很常用的一个检测主从是否延迟的工具。

下文虽然说是针对RDS的笔记,但是同样适用于社区版的MySQL。


原理:
在master上创建一个表,按照一定的时间频率更新该表的字段(把时间更新进去)。
连接到slave上检查复制的时间记录,与slave的当前系统时间进行比较,得出时间差异。

注意: 主从机器的时间同步要基本一致,不然pt-heartbeat测出的结果不准确。

 

1、连接到RDS主实例,创建test.heartbeat表,建议使用memory引擎

CREATE TABLE `test`.`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=Memory DEFAULT CHARSET=utf8 ;

 

2、在主实例上启动pt-heartbeat进程,并在后台运行:

pt-heartbeat --user mw_dba --password 123456 --host rm-xxxxxx.mysql.rds.aliyuncs.com --database test --update --interval=1  --no-version-check  --daemonize

 

3、连接到只读实例上执行命令,检查落于Master多长时间

pt-heartbeat --user mw_dba --password 123456  --host rr-xxxxxx.mysql.rds.aliyuncs.com --database test --monitor --master-server-id 35006  --no-version-check 

说明:

  1、如果步骤2的结果始终未0,表示没有延迟。

  2、上面命令中 --master-server-id 跟的是master的server_id。 --minitor 表示一直监控不退出

 

4、监控完毕,记得关闭第二步的pt-heartbeat后台进程
ps aux | egrep pt-heartbeat | grep -v grep|awk '{print $2}'|xargs kill -9

或者使用

pt-heartbeat --user mw_dba --password 123456 --host rm-xxxxxx.mysql.rds.aliyuncs.com  --no-version-check   --stop


说明:
对于阿里云的RDS, 使用各种percona工具的时候,经常出现不支持的情况,可能是alisql修改了某些版本信息,导致pt工具检查失败, 我们执行时候 加上 --no-version-check  参数即可 。