percona-toolkit下载
需要安装的依赖包[centos7]
yum -y install perl-Digest-MD5 perl-DBI perl-DBD-MySQL --nogpgcheck --disablerepo mysql80-community --enablerepo mysql57-community
原理
将一张大表分成多个chunk,每次针对一个chunk进行校验,同时将校验的结果通过REPLACE INTO语句写入到percona.checksums表中,然后该语句通过主从复制,在SLAVE中同样执行一次,校验的结果同样是写入到percona.checksums表中,最后,通过查询percona.checksums来获取主从不一致的信息。
指令介绍
pt-table-checksum
pt-table-checksum --set-vars innodb_lock_wait_timeout=120 u=remote,p=QianFeng@123,h=192.168.96.157,P=3306 --no-check-binlog-format --quiet
--set-vars innodb_lock_wait_timeout=120 设置变量,innodb锁等待两分钟
-h remote 主库ip
-p 主库密码
-u 主库用户
-P 主库端口
--no-check-binlog-format pt-table-checksum默认是运行在statement下,如果是其它日志格式,需加--no-check-binlog-format参数
--quiet 输出静默
pt-table-checksum --set-vars innodb_lock_wait_timeout=120 u=remote,p=QianFeng@123,h=192.168.96.157,P=3306 --no-check-binlog-format --replicate-check-only
--replicate-check-only 如果指定了--replicate-check-only参数,则意味着不会校验任何表,直接获取上次校验的结果。
pt-table-sync
pt-table-sync --execute --print --charset=utf8 --replicate=percona.checksums h=192.168.96.157,u=remote,p=QianFeng@123
--execute 恢复数据到从库
--print 打印sql
--charset 指定字符集
--replicate 指定记录差异的库表,会自动创建,mariadb为test.checksums