博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL pt-table-checksum及pt-table-sync校验及修复主从一致性
阅读量:7191 次
发布时间:2019-06-29

本文共 2310 字,大约阅读时间需要 7 分钟。

【pt-table-checksum】

pt-table-checksum是percona-toolkit系列工具中的一个, 可以用来检测主、 从数据库中数据的一致性。其原理是在主库上运行, 对同步的表进行checksum, 记录下来。 然后对比主从中各个表的checksum是否一致, 从而判断数据是否一致。检测过程中以块为单位, 对于大的表可以区分为多个块, 从而避免锁表( 根据唯一索引将表切分为块)检测时会自动判断复制延迟、 master的负载, 超过阀值后会自动将检测暂停。

【pt-table-sync】

pt-table-sync,顾名思义,它用来修复多个实例之间数据的不一致。它可以让主从的数据修复到最终一致,也可以使通过应用双写或多写的多个不相关的数据库实例修复到一致。同时它还内部集成了pt-table-checksum的校验功能,可以一边校验一边修复,也可以基于pt-table-checksum的计算结果来进行修复。

 

  • 校验(Master服务器运行)
pt-table-checksum --nocheck-binlog-format --nocheck-plan --nocheck-replication-filters --replicate=pt.checksums --set-vars innodb_lock_wait_timeout=120 --databases newtable -u'checksums' -p'checksums' -h10.1.1.6#-h -u -p -P -S -d 连接信息#--nocheck-replication-filters 检测中忽略mysql 配置参数binlog_ignore_db等。#--nocheck-binlog-format 不检测日志格式#--replicate 指定checksum 存储的db和表, 如test.checksum# --chunk-size, --chunk-size-limit 用于指定检测块的大小。 可控性更强# --ignore-databases/tables/column 跳出指定元素的过滤# --lock-wait-timeout innodb 锁的超时设定, 默认为1# --max-load 设置最大并发连接数# --replicate-check-only 只输出数据不一致的信息。# --help 有这个就行了, 以及其他的详见文档。备注:--no-check-binlog-format 忽略检查binlog格式,否则会报错,默认会去检查statement模式,一般我们都用row模式

  

TS :完成检查的时间。

ERRORS :检查时候发生错误和警告的数量。
DIFFS :0表示一致,1表示不一致。当指定--no-replicate-check时,会一直为0,当指定--replicate-check-only会显示不同的信息。
ROWS :表的行数。
CHUNKS :被划分到表中的块的数目。
SKIPPED :由于错误或警告或过大,则跳过块的数目。
TIME :执行的时间。
TABLE :被检查的表名。

备注:主要观察DIFFS列,标识差异数。

 

  • 查看差异(Slave库运行) 
select db, tbl, sum(this_cnt) as total_rows, count(*) as chunks   from checksums where ( master_cnt <> this_cnt OR master_crc <> this_crc OR isnull(master_crc) <> isnull(this_crc) ) group by db, tbl;

  

  • 复制,消除差异(Master服务器运行)

假设newtables数据库tb1表存在差异

i.自动消除差异(不推荐)pt-table-sync --print --execute --sync-to-master h=10.1.1.7,P=3306,u=checksums,p='checksums' --databases=newtables --tables=tb1ii.打印出sql语句,人工干预到Slave库执行(推荐)pt-table-sync --print --sync-to-master h=10.1.1.7,P=3306,u=checksums,p='checksums' --databases=newtables --tables=tb1pt-table-sync --print --sync-to-master h=10.1.1.7,P=3306,u=checksums,p='checksums'--replicate pt.checksums#--sync-to-master :指定一个DSN,即从的IP,他会通过show processlist或show slave status 去自动的找主。#--replicate :指定通过pt-table-checksum得到的表,这2个工具差不多都会一直用。#--print :打印,但不执行命令。#--execute :执行命令。

  备注:Slave需要授权主库Drop 和Create Temporary Tables权限

 

  • 检验

      重新执行一次pt-table-checksum,查看是否还存在差异。

转载于:https://www.cnblogs.com/vadim/p/7405709.html

你可能感兴趣的文章
牛客假日团队赛1 G.Superbull
查看>>
CSS的继承性和层叠性
查看>>
MQTT详解以及在IoT中的应用
查看>>
[python] - 读取文件内容,并输出
查看>>
$.fn.exted({})与$.extend({})区别
查看>>
apache 配置虚拟目录
查看>>
前端开发——HTML学习笔记
查看>>
设计模式-工厂方法模式
查看>>
类的数据成员的 const、static等类型的声明和定义常识
查看>>
银行家算法
查看>>
发现一个全部用html5写的网站,里面还有很多知识
查看>>
在php中使用对称加密DES3,开发银行卡绑定,实名验证……
查看>>
Linux history
查看>>
活动安排
查看>>
Python中怎么进行单元测试
查看>>
Laravel之哈希/常用函数/分页
查看>>
spring 事务传播说明
查看>>
Codeforces 442A
查看>>
Please enable network time synchronisation in system settings
查看>>
Android Actionbar Tab 导航模式
查看>>