一个数据库系统,如果在高可用、高可靠和高性能之间让你按优先级排序,你会怎么选?这个问题当然因业务而异,但是对网易云数据库,即基于InnoSQL的RDS来说,高可靠必须是优先级最高的。高可靠要求数据不能有任何一点点丢失,即使数据库服务不可用,也不能丢失数据。
从上述引用博文可知,pt-table-checksum的原理粗略地可分为以下几步:
1. 就是先对主库分表分块进行checksum
2. 然后通过主从复制关系将checksum产生的STATEMENT格式的Binlog传给从库
3. 从库执行此Binlog就会对相应表中数据块进行checksum,用checksum生成的值替换掉test.checksums表中this_cnt字段。
4. 然后在从库上执行如下SQL语句就能得到数据是否一致:
select * from percona.checksums where master_cnt <> this_cnt OR master_crc <> this_crc OR ISNULL(master_crc) <> ISNULL(this_crc) \G
pt-table-checksum h='10.165.124.33',u='myadmin',p='myadmin',P=3306 -d mysql --nocheck-replication-filters --no-check-binlog-format --replicate=test.checksums
其中10.165.124.33是主库,10.165.124.34是从库
rds-user@rdslibistest0003:~$ pt-table-checksum h='10.165.124.33',u='myadmin',p='myadmin',P=3306 -d libis --nocheck-replication-filters --no-check-binlog-format --replicate=test.checksums
Cannot connect to P=3306,h=10.165.124.34,p=...,u=myadmin
Diffs cannot be detected because no slaves were found. Please read the --recursion-method documentation for information.
TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
12-13T14:35:29 0 0 10000 7 0 3.102 libis.sbtest
结果一下子就大白天下了!上面猜测是正确的,Percona就是通过主库的用户名密码登陆从库,然后从checksums表中获取数据一致性校验结果的。PS:percona的有用工具真多,有时间真得好好研究;
本文来自网易实践者社区,经作者范欣欣授权发布。