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 参数即可 。
原文地址:http://lee90.blog.51cto.com/10414478/1944854