分类: Mysql/postgreSQL
2013-04-07 10:58:51
功能:用于检测mysql复制中主从数据同步一致性的perl工具。
原理:在master对同步表进行checksum,然后比对master 和slave的checksum 是否一致来从而判断数据同步一致性。
1.chunk。检测过程中pt-table-checksum 以块为单位进行,一个表可以在一个块中,比较大的表也可以被分隔为多个块,对表的切分依赖于索引实现。
2.slave host。pt-table-checksum 会自动去获取slave 信息,并创建从master到slave的连接,用于检测slave的复制状态,如果复制出现问题(IO/SQL thread 状态是stop 或者slave 延后master 一定时间(测试发现是10s)),
pt-table-checksum 将暂停检测一直等待同步正常。
3.性能。这样的检测需要在主库执行,pt-table-checksum 以多种方式来避免对主库性能的影响。
a.对与块大小的限制
b.对innodb_lock_wait_timeout =1s 的设置。
c.对load的监控,在load较大(默认25个并发查询)时暂停检测。参数--max-load 。
d.对表检测超时直接跳转到下一个表。
使用:
下载 wget
官方地址
解压之后,percona-toolkit-2.1.7/bin 目录下是percona-toolkit所有的工具。
1.创建账号。
其中ip 为master的内网ip,这样从master本地登陆和登陆到各个slave都可以。
2.创建表checksum。也可以授权的时候加上库级别的权限,这样检测中用到表可以自动创建。安全考虑,建议手动创建。
点击(此处)折叠或打开
3.检测。几个比较重要的参数:
-h -u -p -P -S -d 连接信息
--no-check-replication-filters 检测中忽略mysql 配置参数binlog_ignore_db等。
--chunk-size,--chunk-size-limit 用于指定检测块的大小。可控性更强
--explain 打印checksum实际运行的sql语句
--ignore-databases/tables/column 跳出指定元素的过滤
--lock-wait-timeout innodb 锁的超时设定,默认为1
--max-load 设置最大并发连接数
--recursion-method 指定获取slave hosts的方式:
1.show processlist
2.show slave host
3.从配置表dsns表中读取,此表需单独创建
--replicate 指定checksum 存储的db和表,如test.checksum
--replicate-check-only 只输出数据不一致的信息。
--help 有这个就行了,以及其他的详见文档。
4.构建的测试环境:
master:
slave: (模拟数据不一致)
运行方式一:
简单的方式:
输出列解释:
TS 检测结束时间
ERRORS 检测过程的错误或警告
DIFFS 这个就是我们想要的,数据不一致的块数量
ROWS 检测的行数,一般为表的数据量
CHUNKS 块数
SKIPPED 跳过检测的块数
TIME 检测消耗时间
TABLE db.table
运行方式二:只输出数据不一致的块信息
输出列解释:
TABLE db.table
CHUNCK 数据不一致的块数
CNT_DIFF slave与master 上的数据量差
CRC_DIFF slave和master该块的CRC相同则为1,否则为0
CHUNK_INDEX 切分块使用的索引
LOWER_BOUNDARY 块下限索引值
UPPER_BOUNDARY 块上限索引值