工具pt-table-checksum
1从库设置report_host,report_port,并开启start slave
2 主库建立test表,并插入数据,此时从库也进行正常插入
insert into test values(111,222);
3 主库上执行
pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=cnt.checksums --databases="abc" h=10.10.10.101,u=slave,p="123456",P=3306
结论:DIFFS 为0,一致性无误
TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
02-11T15:27:13 0 0 0 1 0 0.012 abc.code_dbinfo
02-11T15:27:13 0 0 9177 4 0 0.055 abc.abc_seller_distribution_ref
02-11T15:27:13 0 0 1398 1 0 0.014 abc.abc_seller_info
02-11T15:27:14 0 0 77342 1 0 1.083 abc.abc_seller_order_kpi_hours
02-11T15:27:14 0 0 4 1 0 0.018 abc.sys_dept
02-11T15:27:14 0 0 13 1 0 0.011 abc.sys_dict
02-11T15:27:15 0 0 0 1 0 0.011 abc.sys_expense
02-11T15:27:15 0 0 49 1 0 0.012 abc.sys_login_log
02-11T15:27:15 0 0 65 1 0 0.012 abc.sys_menu
02-11T15:27:15 0 0 2 1 0 0.012 abc.sys_notice
02-11T15:27:15 0 0 102 1 0 0.012 abc.sys_operation_log
02-11T15:27:15 0 0 126 1 0 0.011 abc.sys_relation
02-11T15:27:15 0 0 6 1 0 0.011 abc.sys_role
02-11T15:27:15 0 0 31 1 0 0.012 abc.sys_user
02-11T15:27:15 0 0 1 1 0 0.011 abc.test
##参数
--no-check-replication-filters 表示不需要检查 Master 配置里是否指定了 Filter。 默认会检查,如果配置了 Filter,如 replicate_do_db,replicate-wild-ignore-table,binlog_ignore_db 等,在从库checksum就与遇到表不存在而报错退出,所以官方默认是yes(--check-replication-filters)但我们实际在检测中时指定--databases=,所以就不存在这个问题,干脆不检测。
--no-check-binlog-format 不对binlog的格式进行检查
--replicate= :把checksum的信息写入到指定表中,建议直接写到被检查的数据库当中。
--replicate-check-only 只显示主从不一致部分,此参数不会生成新的checksums数据,只会根据checksums表已经有的数据来显示
--databases=,-d:要检查的数据库,逗号分隔。 --databases-regex 正则匹配要检测的数据库,--ignore-databases[-regex]忽略检查的库。Filter选项。
--tables=,-t:要检查的表,逗号分隔。如果要检查的表分布在不同的db中,可以用--tables=dbname1.table1,dbnamd2.table2的形式。
同理有--tables-regex,--ignore-tables,--ignore-tables-regex。--replicate指定的checksum表始终会被过滤。
4 从库上人为删除test数据
Delete from abc.test
5 主库上检测
pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=cnt.checksums --databases="abc" h=10.10.10.101,u=slave,p="123456",P=3306
结论:DIFFS 在test表上为1,表示有误,不一致
TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
02-11T15:26:53 0 0 0 1 0 0.014 abc.code_dbinfo
02-11T15:26:53 0 0 9177 4 0 0.060 abc.abc_seller_distribution_ref
02-11T15:26:53 0 0 1398 1 0 0.015 abc.abc_seller_info
02-11T15:26:54 0 0 77342 1 0 1.087 abc.abc_seller_order_kpi_hours
02-11T15:26:54 0 0 4 1 0 0.012 abc.sys_dept
02-11T15:26:54 0 0 13 1 0 0.011 abc.sys_dict
02-11T15:26:54 0 0 0 1 0 0.012 abc.sys_expense
02-11T15:26:54 0 0 49 1 0 0.012 abc.sys_login_log
02-11T15:26:54 0 0 65 1 0 0.012 abc.sys_menu
02-11T15:26:54 0 0 2 1 0 0.012 abc.sys_notice
02-11T15:26:54 0 0 102 1 0 0.012 abc.sys_operation_log
02-11T15:26:54 0 0 126 1 0 0.011 abc.sys_relation
02-11T15:26:54 0 0 6 1 0 0.012 abc.sys_role
02-11T15:26:54 0 0 31 1 0 0.012 abc.sys_user
02-11T15:26:54 0 1 1 1 0 0.011 abc.test
6 从库上人为插入数据
insert into test values(111,222);
7主库检测pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=cnt.checksums --databases="abc" h=10.10.10.101,u=slave,p="123456",P=3306
结论:一致
TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
02-11T15:27:13 0 0 0 1 0 0.012 abc.code_dbinfo
02-11T15:27:13 0 0 9177 4 0 0.055 abc.abc_seller_distribution_ref
02-11T15:27:13 0 0 1398 1 0 0.014 abc.abc_seller_info
02-11T15:27:14 0 0 77342 1 0 1.083 abc.abc_seller_order_kpi_hours
02-11T15:27:14 0 0 4 1 0 0.018 abc.sys_dept
02-11T15:27:14 0 0 13 1 0 0.011 abc.sys_dict
02-11T15:27:15 0 0 0 1 0 0.011 abc.sys_expense
02-11T15:27:15 0 0 49 1 0 0.012 abc.sys_login_log
02-11T15:27:15 0 0 65 1 0 0.012 abc.sys_menu
02-11T15:27:15 0 0 2 1 0 0.012 abc.sys_notice
02-11T15:27:15 0 0 102 1 0 0.012 abc.sys_operation_log
02-11T15:27:15 0 0 126 1 0 0.011 abc.sys_relation
02-11T15:27:15 0 0 6 1 0 0.011 abc.sys_role
02-11T15:27:15 0 0 31 1 0 0.012 abc.sys_user
02-11T15:27:15 0 0 1 1 0 0.011 abc.test