暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
pt-table-checksum
1303
5页
19次
2020-06-30
免费下载
pt-table-checksum
pt-table-checksum是⼀个基于MySQL数据库主从架构在线数据⼀致性校验⼯具。其⼯作原理
在主库上运⾏, 通过对同步的表在主从段执⾏checksum 从⽽判断数据是否⼀致。在校验完
毕时,该⼯具将列出与主库存在差异的对象结果。
原理
在主库执⾏基于statementsql语句来⽣成主库数据块的checksum,把相同的sql语句传递到
从库执⾏,并在从库上计算相同数据块的checksum,最后,⽐较主从库上相同数据块的
checksum值,由此判断主从数据是否⼀致。检测过程根据唯⼀索引将表按row切分为块
chunk),以为单位计算,可以避免锁表。检测时会⾃动判断复制延迟、 master的负载,
超过阀值后会⾃动将检测暂停,减⼩对线上服务的影响。
pt-table-checksum 默认情况下可以应对绝⼤部分场景,官⽅说,即使上千个库、上万亿的
⾏,它依然可以很好的⼯作,这源⾃于设计很简单,⼀次检查⼀个表,不需要太多的内存和多
余的操作;必要时,pt-table-checksum 会根据服务器负载动态改变 chunk ⼤⼩,减少从库的
延迟。
为了减少对数据库的⼲预,pt-table-checksum还会⾃动侦测并连接到从库,当然如果失败,
可以指定—recursion-method选项来告诉从库在哪⾥。它的易⽤性还体现在,复制若有延迟,
在从库 checksum 会暂停直到赶上主库的计算时间点(也通过选项设定⼀个可容忍的延迟最
⼤值,超过这个值也认为不⼀致)
步骤:
1.连接到主库:pt⼯具连接到主库,然后⾃动发现主库的所有从库。默认采⽤show full
processlist来查找从库,但是这只有在主从实例端⼝相同的情况下才有效。
3.查找主库或者从库是否有复制过滤规则:这是为了安全⽽默认检查的选项。你可以关闭这个
检查,但是这可能导致checksumsql语句要么不会同步到从库,要么到了从库发现从库没有
要被checksum的表,这都会导致从库同步卡库。
5.开始获取表,⼀个个的计算。
6.如果是表的第⼀个chunk,那么chunk-size⼀般为1000;如果不是表的第⼀个chunk,那么
采⽤19步中分析出的结果。
7.检查表结构,进⾏数据类型转换等,⽣成checksumsql语句。
8.根据表上的索引和数据的分布,选择最合适的split表的⽅法。
9.开始checksum表。
10.默认在chunk⼀个表之前,先删除上次这个表相关的计算结果。除⾮–resume
14.根据explain的结果,判断chunksize是否超过了你定义的chunk-size的上限。如果超过
了,为了不影响线上性能,这个chunk将被忽略。
15.把要checksum的⾏加上for update锁,并计算。
17-18.把计算结果存储到mastercrc mastercount列中。
19.调整下⼀个chunk的⼤⼩。
20.等待从库追上主库。如果没有延迟备份的从库在运⾏,最好检查所有的从库,如果发现延
迟最⼤的从库延迟超过max-lag秒,pt⼯具在这⾥将暂停。
21.如果发现主库的max-load超过某个阈值,pt⼯具在这⾥将暂停。
22.继续下⼀个chunk,直到这个tablechunk完毕。
23-24.等待从库执⾏完checksum,便于⽣成汇总的统计结果。每个表汇总并统计⼀次。
25-26.循环每个表,直到结束。
参数说明
--nocheck-replication-filters :不检查复制过滤器,建议启⽤。后⾯可以⽤--databases来指定
需要检查的数据库。
--no-check-binlog-format : 不检查复制的binlog模式,要是binlog模式是ROW,则会报
错。
--replicate-check-only :只显示不同步的信息。
--replicate= :必须 checksum的信息写⼊到指定表中,写到要被检查的数据库当中。
--databases= :必须 指定需要被检查的数据库,多个则⽤逗号隔开。
--tables= :指定需要被检查的表,多个⽤逗号隔开
h=192.168.1.128 Master的地址
u=root :⽤户名
p=123456 :密码
P=3306 :端⼝
–replicate-check-only
会在前⼀次pt-table-checksum检验的数据之上⽐较(不会再执⾏计算),显示出数据不⼀致的SLAVE
机名
--recursion-method
示例:
[root@node1 ~]# pt-table-checksum h=‘127.0.0.1’,u=‘dbadmin’,p=‘123456’,P=3390 -d
rpldb —recursion-method=processlist —nocheck-replication-filters —
replicate=percona.checksums —no-check-binlog-format —ignore-databases=mysql —
engines=innodb
注意
1、根据测试,需要⼀个即能登录主库,也能登录从库的账号;
2、只能指定⼀个host,必须为主库的IP
3、在检查时会向表加S锁;
4、如果masterslavebinlog⽇志不是STATEMENT格式,要⽤--no-check-binlog-format
5、运⾏之前需要从库的同步IOSQL进程是YES状态。
6、表要有主键索引或唯⼀键索引
7、如果binlog_format MIXED格式,会破坏同步,需要使⽤–no-check-binlog-format选项
来关闭检查
8 、必须存在数据库 表,否则会破坏复制
9、检查的时候必须指定库表
测试
在主库,导⼊⼀些数据:
需要现创建⼀张⽤于记录 验证⼀致性信息 的表
CREATE TABLE IF NOT EXISTS `music`.`checksums` (
db CHAR(64) NOT NULL,
tbl CHAR(64) NOT NULL,
chunk INT NOT NULL,
chunk_time FLOAT NULL,
chunk_index VARCHAR(200) NULL,
lower_boundary TEXT NULL,
upper_boundary TEXT NULL,
this_crc CHAR(40) NOT NULL,
this_cnt INT NOT NULL,
master_crc CHAR(40) NULL,
master_cnt INT NULL,
ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP,
PRIMARY KEY (db, tbl, chunk),
of 5
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。