pt-table-checksum和pt-heartbeat的使用
安装见percona-toolkit的安装,pt-table-checksum和pt-heartbeat是percona-toolkit的组件
一.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
需要注意的是,你必须确保心跳表能够被同步到从库,只有这样子,检查才会有意义.