[root@linuxidc_192.168.0.10 ~]# pt-heartbeat -D linuxidc --table=heartbeat --monitor -h 192.168.0.20 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表示从没有延迟。 [ 0.00s, 0.00s, 0.00s ] 表示1m,5m,15m的平均值。可以通过--frames去设置。
我们这里看见复制没有延迟,那么我们可以使用压力工具测试一下。在主库创建测试数据库sbtest;
mysql> create database sbtest; Query OK, 1 row affected (0.00 sec) mysql>
开始生成100w记录的数据
[root@linuxidc_192.168.0.10 ~]# sysbench --test=oltp --oltp-table-size=1000000 --oltp-read-only=off --init-rng=on --num-threads=16 --max-requests=0 --oltp-dist-type=uniform --max-time=1800 --mysql-user=root --mysql-socket=/tmp/mysqld.sock --mysql-password=123456 --db-driver=mysql --mysql-table-engine=innodb --oltp-test-mode=complex prepare sysbench 0.4.10: multi-threaded system evaluation benchmark Creating table 'sbtest'... Creating 1000000 records in table 'sbtest'...
再次检测复制延时:
[root@linuxidc_192.168.0.10 ~]# pt-heartbeat -D linuxidc --table=heartbeat --monitor -h 192.168.0.20 28.21s [ 0.47s, 0.09s, 0.03s ] 28.72s [ 0.95s, 0.19s, 0.06s ] 29.38s [ 1.44s, 0.29s, 0.10s ] 29.13s [ 1.92s, 0.38s, 0.13s ] 30.85s [ 2.44s, 0.49s, 0.16s ] 31.04s [ 2.96s, 0.59s, 0.20s ] 29.84s [ 3.45s, 0.69s, 0.23s ] 31.24s [ 3.97s, 0.79s, 0.26s ] 32.20s [ 4.51s, 0.90s, 0.30s ] 32.96s [ 5.06s, 1.01s, 0.34s ] 33.82s [ 5.62s, 1.12s, 0.37s ] 34.15s [ 6.19s, 1.24s, 0.41s ]
立马发现效果了哦^_^
我们还可以使用--check监测一次就退出:
[root@linuxidc_192.168.0.10 ~]# pt-heartbeat -D linuxidc --table=heartbeat --check -h 192.168.0.20 0.00 [root@linuxidc_192.168.0.10 ~]#
2,如何关闭主上面执行的后台进程。可以用参数--stop 去关闭:
[root@linuxidc_192.168.0.10 ~]# pt-heartbeat --stop Successfully created file /tmp/pt-heartbeat-sentinel [root@linuxidc_192.168.0.10 ~]#
这样就把在主上开启的进程杀掉了,后续要继续开启后台进行的话,需要把/tmp/pt-heartbeat-sentinel 文件删除,否则启动不了。
总结:
通过pt-heartbeart工具可以很好的弥补默认主从延迟的问题,但需要搞清楚该工具的原理。而默认的Seconds_Behind_Master值是通过将服务器当前的时间戳与二进制日志中的事件时间戳相对比得到的,所以只有在执行事件时才能报告延时。备库复制线程没有运行,也会报延迟null。还有一种情况:大事务,一个事务更新数据长达一个小时,最后提交。这条更新将比它实际发生时间要晚一个小时才记录到二进制日志中。当备库执行这条语句时,会临时地报告备库延迟为一个小时,执行完后又很快变成0。