简介
pt-table-checksum是percona-toolkit系列工具中的一个, 可以用来检测主、 从数据库中数据的一致性。其原理是在主库上运行, 对同步的表进行checksum, 记录下来
在MySql主从复制架构的应用中,长时间运行的DB出现各种异常之后,可能会有主备不一致的情况产生,影响正常的业务。
pt-table-checksum用于校验主从数据的一致性,而pt-table-sync用于同步MySQL表之间的数据,它可以同步单个表,也可以同步整个库,但是不同步表结构、索引、或任何其他模式对象。
官方文档
https://www.percona.com/doc/percona-toolkit/3.0/installation.html
https://www.percona.com/doc/percona-repo-config/apt-repo.html
环境
操作系统:Ubuntu 16.04
Mysql版本:MySQL 5.7.18-15
主库:192.168.10.36
从库:192.168.10.37
安装(在主库操作)
1 | wget https://repo.percona.com/apt/percona-release_0.1-4.$(lsb_release -sc)_all.deb |
pt-table-checksum
场景:端口3306,只检查某一个库的关键表,一主一从,同网段复制,pt_checksums@’192.168.10.%’具备该有的权限(主从都需要设置)1
2GRANT SELECT,INSERT, DELETE,PROCESS,SUPER,REPLICATION SLAVE on *.* to pt_checksums@'192.168.10.%' IDENTIFIED BY 'BHJ1jRP79dgZ2LHd5LM3ytG5ZyjMi6';
GRANT ALL PRIVILEGES on percona.* to pt_checksums@'192.168.10.%' IDENTIFIED BY 'BHJ1jRP79dgZ2LHd5LM3ytG5ZyjMi6';
只检测xmusic单个数据库(在主库操作)
1 | pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --databases=xmusic --replicate=percona.checksums h=192.168.10.36,u=pt_checksums,p='BHJ1jRP79dgZ2LHd5LM3ytG5ZyjMi6',P=3306 |
如果是首次运行,会在主库自动创建 percona.checksums 表。
执行时显示的结果参数说明
- TS :完成检查的时间戳。
- ERRORS :检查时候发生错误和警告的数量。
- DIFFS :0表示一致,1表示不一致。当指定--no-replicate-check时,会一直为0,当指定--replicate-check-only会显示不同的信息
- ROWS :比对的表行数。
- CHUNKS :被划分到表中的块的数目。
- SKIPPED :由于错误或警告或过大,则跳过块的数目。
- TIME :执行的时间。
- TABLE :被检查的表名
命令选项
--nocheck-replication-filters:不检查复制过滤器,建议启用。后面可以用--databases来指定需要检查的数据库。
--no-check-binlog-format :不检查复制的binlog模式,要是binlog模式是ROW,则会报错。
--replicate-check-only:只显示不同步的信息。(注意:要谨慎使用,此参数不会生成新的checksums数据,只会根据checksums表已经有的数据来显示。)
--replicate=:把checksum的信息写入到指定表中,建议直接写到被检查的数据库当中。
--databases=:指定需要被检查的数据库,多个则用逗号隔开。
--tables=:指定需要被检查的表,多个用逗号隔开
pt-table-checksum 其工作原理是通过计算每个表的散列值 并将计算过程在服务器上重放从而拿到主从各自的散列值做比较
但是pt-table-checksum 不是直接计算整个表的散列值,而是分块计算避免服务器长时间延时,因此在计算散列过程重放时是基于statement 不能基于row
只检测xmusic.type单张表
1 | pt-table-checksum h=192.168.10.36,u=pt_checksums,p='BHJ1jRP79dgZ2LHd5LM3ytG5ZyjMi6',P=3306 --databases=xmusic --tables=type \ |
pt-table-sync
pt-table-sync可以高效的同步MySQL表之间的数据,他可以做单向和双向同步的表数据。他可以同步单个表,也可以同步整个库。它不同步表结构、索引、或任何其他模式对象。所以在修复一致性之前需要保证他们表存在。
执行前可以使用--dry-run或--print打印下不一致信息
1 | pt-table-sync --replicate=percona.checksums h=192.168.10.36,u=pt_checksums,p='BHJ1jRP79dgZ2LHd5LM3ytG5ZyjMi6',P=3306 h=192.168.10.37,u=pt_checksums,p='BHJ1jRP79dgZ2LHd5LM3ytG5ZyjMi6',P=3306 --print |
1 | pt-table-sync --replicate=percona.checksums h=192.168.10.36,u=pt_checksums,p='BHJ1jRP79dgZ2LHd5LM3ytG5ZyjMi6',P=3306 h=192.168.10.37,u=pt_checksums,p='BHJ1jRP79dgZ2LHd5LM3ytG5ZyjMi6',P=3306 --execute |
命令选项
1 | --replicate:指定通过pt-table-checksum得到的表,这2个工具差不多都会一直用。 |
http://m.itboth.com/d/NNbqya/mysql
http://seanlook.com/2015/12/29/mysql_replica_pt-table-checksum/