pt-heartbeat – 监控MySQL主从同步
2,788 total views, 1 views today
pt-heartbeat用于监控MySQL及PostgreSQL主从延迟情况。
原理:其在主库创建一个heartbeat表,不停更新主库的heartbeart表,然后在备库查询heartbeat表,以此判定主从延迟情况。
用法:
1 |
Usage: pt-heartbeat [OPTIONS] [DSN] --update|--monitor|--check|--stop |
主库:
创建heartbeat表,并更新时间戳。
手工创建表,一定要插入一条数据用于初始化。
1 2 3 4 5 6 7 8 |
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 ); |
1 |
INSERT INTO heartbeat (ts, server_id) VALUES (NOW(), N); --N是主库的server_id,不用图省事使用@@server_id |
第一条数据的情况
1 2 3 4 5 6 7 |
select * from heartbeat; +---------------------+-----------+------+----------+-----------------------+---------------------+ | ts | server_id | file | position | relay_master_log_file | exec_master_log_pos | +---------------------+-----------+------+----------+-----------------------+---------------------+ | 2016-12-19 13:38:56 | 3306131 | NULL | NULL | NULL | NULL | +---------------------+-----------+------+----------+-----------------------+---------------------+ 1 row in set (0.00 sec) |
为了更加精准、简洁,这里建议使用pt-heartbeat命令的方式!
–create-table 参数可以自动创建表,无需手工建表了。
主库:创建一个后台进程(–daemonize)默认每1秒更新heartbeat表。
1 |
# pt-heartbeat -D test --update --user=root --password=root --create-table --daemonize |
从库:
1、一直监控主从延迟情况。
1 2 3 4 |
# pt-heartbeat -D cnail --monitor --user=root --password=root --master-server=3306131 0.00s [ 0.00s, 0.00s, 0.00s ] 0.00s [ 0.00s, 0.00s, 0.00s ] 0.00s [ 0.00s, 0.00s, 0.00s ] |
参数说明:
1 2 |
--monitor 持续监控从库延迟情况 --master-server 指定主库的server-id |
2、只监控一次主从延迟情况,然后退出
1 2 |
# pt-heartbeat -D cnail --check --user=root --password=root--master-server=3306131 0.00 |
pt-heartbeat其他参数:
1 2 3 4 5 6 |
--create-table-engine 创建heartbeat表的存储引擎类型,默认是InnoDB,建议使用memory。 --create-table 如果heartbeat表不存在,那么创建 --defaults-file 指定my.cnf参数文件的位置 --file 将 --monitor 的输出内容存储到文件中 --interval 用于主库,更新heartbeat表的时间间隔,默认1s。 --print-master-server-id 打印出master-server-id |
1 |