请选择 进入手机版 | 继续访问电脑版

数据校验工具pt-table-checksum

[复制链接]
滚雪球少年 发表于 2021-1-1 18:33:05 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
配景

pt-table-checksum 是 Percona-Toolkit 的组件之一,用于检测 MySQL 主、从库的数据是否一致。
写在前面
内容一部门来自 作者:耿进 爱可生 DBA 团队成员,负责公司 DMP 产物的运维和客户 MySQL 问题的处理惩罚。对数据库技能有着浓重的兴趣。你见过破晓四点 MySQL 的 error 吗?
link
原理

  1. 在主库执行基于 statement 的 SQL 语句来生成主库数据块的checksum,把相同的 SQL 语句通报到从库执行,并在从库上盘算相同数据块的 checksum,最后,比较主从库上相同数据块的 checksum 值,由此判定主从数据是否一致。
复制代码
复制筛选器是危险的,因为 pt-table-checksum 执行的查询大概与它们发生冲突,并导致复制失败。
**参数innodb_lock_wait_timeout **
  比方,pt-table-checksum 将它的会话级 innodb_lock_wait_timeout 设置为 1 秒,这样,如果存在锁期待,它将成为受害者,而不是导致其他查询超时。
  
   –set-vars innodb_lock_wait_timeout=120
  
  默认情况下,如果有高出 25 个并发执行的查询,pt-table-checksum 将暂停。您大概应该使用 --max-load 选项为服务器设置一个公道的值。
若无主键做校验和修复对性能影响非常重,数据校验和修复最重要的约束便是主健,无主键或唯一索引,将导致修复不乐成。
操纵

用户

  1. 必须保证一个账号能同时在主库和从库都有对应的访问权限mysql> GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO 'root'@'%' IDENTIFIED BY '******';mysql> flush privileges;
复制代码
  –nocheck-binlog-format:不检测日志格式。这个选项对于 ROW 模式的复制很重要,因为 pt-table-checksum 会在 Master 和 Slave 上设置 binlog_format=STATEMENT(确保从库也会执行 checksum SQL),MySQL 限制从库是无法设置的,所以如果行复制从库,再作为主库复制出新从库时(A->B->C),B 的 checksums 数据将无法传输。
  –replicate= 指定 checksum 盘算结果存到哪个库表⾥,如果没有指定,默认是 percona.checksums
  –nocheck-replication-filters 默认值:是
–recursion-method=processlist
–replicate=test.checksums
–databases=test
–tables=t01
  增补解析:
–no-check-binlog-format 不查抄复制的binlog模式。
–nocheck-replication-filters 不查抄复制过滤器,发起启用。
–replicate=test.checksums 查抄结果写入test库的checksums表里。
–databases=db1 --tables=tb1 校验db1库里的tb1表,若无参数则校验全库全表。
-h 192.168.XXX.XX -P 3306 主库IP地点和3306端口。
-u’hangxing’ -p’PASSOWRD’ 校验账号暗码。
–recursion-method=“processlist” 用processlist的方法来发现从库。
  
   该processlist方法是默认方法,因为它不可靠。但是,如果服务器使用非尺度端口(不是3306),则该方法将成为默认方法,因为在这种情况下它会更好地工作。SHOW SLAVE HOSTShosts
该hosts方法需要与被设置的副本report_host, report_port等等
  
  –ask-pass 提示输入暗码
–quiet 只举行连接验证,也不输出
  –[no]check-slave-tables
默认值:是;组:安全
查抄附属服务器上的表是否存在并具有所有校验和–columns。在附属服务器上缺少表或没有所有校验和的表–columns大概会导致该工具在尝试查抄差异时中断复制。仅当您意识到风险并确保所有附属服务器上的所有表都存在而且与主服务器相同时,才禁用此查抄。
执行主从数据一致性查抄

  1. 查抄整个test库pt-table-checksum --nocheck-binlog-format --nocheck-replication-filters --recursion-method=processlist --replicate=test.checksums  --databases=test  --host=192.168.66.133 --user=msandbox --password=123456 --port=17261查抄test110表pt-table-checksum --nocheck-binlog-format --nocheck-replication-filters --recursion-method=processlist --replicate=test.checksums  --databases=test  --tables=test110 --host=192.168.66.133 --user=msandbox --password=123456 --port=17261
复制代码
  1. 查抄所有表pt-table-checksum --nocheck-binlog-format --nocheck-plan --nocheck-replication-filters --replicate=test.checksums  --defaults-file=/usr/local/sandboxes/msb_5_7_26/master/my.sandbox.cnf --socket=/tmp/mysql_sandbox17261.sock --user=msandbox --password='123456' --recursion-method="processlist"
复制代码
以上操纵会在主库创建--replicate=test.checksums 表,可以根据需要清理。
验证

DIFFS列 体现主从差异的行数


本文说明,主要技能内容来自互联网技能大佬的分享,另有一些自我的加工(仅仅起到注释说明的作用)。如有相关疑问,请留言,将确认之后,执行侵权必删

来源:https://blog.csdn.net/baidu_34007305/article/details/112004728
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )