在常用的MySQL的架构中,Master-Slave架构用的最多,但是对于主从的延迟一般都是按照Seconds_Behind_Master来查看的,但是这个参数有时候是不准确的,比如网络闪断Seconds_Behind_Master看不出任何问题,在看pos才发现已经不走了.所以用该状态值去判断主从延迟不太靠谱.在这里用到Percona-Toolkit系列工具中的pt-heartbeat来实现监控主从复制延迟.
安装Percona-Toolkit
[mysql@localhost ~]$ sudo yum install percona-toolkit
使用方法:
pt-heartbeat [OPTIONS] [DSN] --update|--monitor|--check|--stop
例子:
[mysql@localhost ~]$ pt-heartbeat --user=root --password=xxxx -h 192.168.40.130 --D test --master-server-id=2 --check
128.00
[mysql@localhost ~]$ pt-heartbeat --user=root --password=xxxx -h 192.168.40.130 --D test --master-server-id=2 --monitor
0.00s [ 0.00s, 0.00s, 0.00s ]
0.00s [ 0.00s, 0.00s, 0.00s ]
[mysql@localhost ~]$ pt-heartbeat --user=root --password=xxxx -h 192.168.40.130 --D test --master-server-id=2 --update --daemonize
[mysql@localhost ~]$ ps -ef | grep mysql
mysql 3844 1 0 11:47 ? 00:00:00 perl /usr/bin/pt-heartbeat --user=root --password=root -h 192.168.40.176 --D test --master-server-id=2 --update --daemonize
mysql 3853 1579 0 11:48 pts/0 00:00:00 ps -ef
[mysql@localhost ~]$ pt-heartbeat --user=repl --password=xxxx --host=192.168.40.130 --port=3306 --create-table -D test --monitor --daemonize --master-server-id=2 --log=/mysql/pt-slave.log
[mysql@localhost ~]$
[mysql@localhost ~]$ tail -f /mysql/pt-slave.log
795.00s [ 14.20s, 2.64s, 0.88s ]
796.00s [ 28.42s, 5.28s, 1.76s ]
797.00s [ 37.65s, 7.93s, 2.64s ]
798.00s [ 54.90s, 10.58s, 3.53s ]
0表示无没有延迟.[0.00s,0.00s,0.00s]表示1m,5m,15m的平均值,可以通过--frames去设置.
使pt-heartbeat守护进程停止
[mysql@localhost ~]$ pt-heartbeat --stop
Successfully created file /tmp/pt-heartbeat-sentinel
[mysql@localhost ~]$ rm -f /tmp/pt-heartbeat-sentinel
常用参数明细:
注意:--update,--monitor和--check是互斥的,--daemonize和--check是互斥.
--check
检查从的延迟,检查一次就退出.
--check-read-only
如果从服务器开启了只读模式,该工具会跳过任何插入.
--create-table
在主上创建心跳监控的表,如果该表不存在.可以自己建立.
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,而且是必须指定.
--print-master-server-id
在--monitor和--check 模式下,指定该参数则打印出主的server_id.
--recurse
多级复制的检查深度.比如M-S-S架构.
--recursion-method
指定复制检查的方式,默认为processlist,hosts.
--update
更新主上的心跳表.
--replace
使用--replace代替--update模式更新心跳表里的时间字段,这样的好处是不用管表里是否有行.
--stop
停止运行该工具
--table
指定心跳表名,默认heartbeat.
测试:
主:192.168.40.176
从:192.168.40.130
[mysql@localhost ~]$ pt-heartbeat --user=test --password=xxxxx --host=192.168.40.130 --port=3306 --create-table -D test --interval=1 --frames=1s,2s,3s --master-server-id=2 --print-master-server-id --monitor
0.00s [ 0.00s, 0.00s, 0.00s ] 2
0.00s [ 0.00s, 0.00s, 0.00s ] 2
0.00s [ 0.00s, 0.00s, 0.00s ] 2
在M-S-S架构中用如下命令
[mysql@localhost ~]$ pt-heartbeat --user=test --password=xxxxx --host=192.168.40.130 --port=3306 --create-table -D test --interval=1 --frames=1s --master-server-id=2 --print-master-server-id --recurse=3 --recursion-method=processlist --check
192.168.40.130:3306 0.00 2
192.168.40.177:3306 0.00 2
阅读(6115) | 评论(0) | 转发(0) |