pt-table-checksum和pt-heartbeat的使用

时间:2022-04-28 19:34:14

一.pt-table-checksum

1.主从上均新建账户
GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO 'checksum'@'192.168.1.%' IDENTIFIED BY 'xxx';

2.主上新建percona数据库

3.对percona数据库赋予checksum账户的所有权限
GRANT ALL PRIVILEGES ON `percona` . * TO 'checksum'@'192.168.118.126' WITH GRANT OPTION ;

4.主上执行检查表
pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --set-vars innodb_lock_wait_timeout=50 --replicate=percona.checksums --databases=db07 --tables=test,trade,point,play h=192.168.1.126,u=checksum,p='xxx',P=3306

参数解释:
--databases
指定校验的库,多个库用逗号(,)分隔
--tables
指定检查的表,多个表用,隔开
--nocheck-replication-filters
忽略replication-do-db规则
--replicate=test.checksums
在test库下创建checksums表,并将数据写入
--recursion-method=none
指定复制检查的方式,默认情况下使用SHOW PROCESSLIST,如果非标准的3306端口,就使用SHOW SLAVE HOSTS的方式,推荐使用dsn方式,手动指定

检查库中所有表在主从上是否同步
pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --set-vars innodb_lock_wait_timeout=50 --replicate=percona.checksums --databases=db07 h=192.168.1.126,u=checksum,p='xxx',P=3306

输出结果:
TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
12-05T19:39:40 0 0 4 1 0 0.114 db_77313.test

DIFFS:
0代表主从数据一致
1代表不一致

*如果出现错误:
Waiting for the --replicate table to replicate to XXX的问题出在 percona.checksums 表在从库不存在,拷贝主库checksums建表sql语句,在从库对应的percona库中执行建表

二.pt-heartbeat
1.有时候我们需要查看从服务器落后主服务器多少,这个时候就需要pt-heartbeat

2.使用pt-table-checksum建立的账户

3.主上执行:
pt-heartbeat --update -h 192.168.1.126 -u checksum -p xx --database percona --create-table

一直在前台运行
pt-heartbeat --update -h 192.168.1.126 -u checksum -p xx --database percona

在后台运行
pt-heartbeat --update -h 192.168.1.126 -u checksum -p xx --database percona --daemonize

如果需要停止

pt-heartbeat --stop

在此运行,则需要删除tmp下的文件

rm -rf /tmp/pt-heartbeat-sentinel

4.从上执行(其中ip账户信息均为从的)

一直监控:

pt-heartbeat -D percona --monitor -h 192.168.1.84 --master-server-id=10 -u checksum -p xxx

输出:
0.00s [ 0.00s, 0.00s, 0.00s ]

分别表示:
实时延迟 [ 1分延迟,5分延迟,15分延迟]

监控一次:

pt-heartbeat -D percona --check -h 192.168.1.84 --master-server-id=10 -u checksum -p xxx

需要注意的是,你必须确保心跳表能够被同步到从库,只有这样子,检查才会有意义.