TiDB-从0到1-sync-diff-inspector数据校验工具

在这里插入图片描述

TiDB从0到1系列

一、sync-diff-inspector工具

sync-diff-inspector是TiDB原生的数据对比工具,可以对比表与表的结构\数据差异
支持MySQL - MySQL、MySQL - TiDB的两两组合,其工具被开发出来主要的意义也是为了大家将数据从MySQL迁移
到TiDB后可以做校验。

sync-diff-inspector实现逻辑:
通过checksum,根据表结构表数据通过算法得到一个类MD5值然后进行比较。
如果整体扫描后checksum不同,则将checksum一分为二(二分法)再次比较,以此类推,当范围足够小时就对数据进行逐行对比
最终生成FIX SQL(修复SQL)
同时每10s生成一个checkpoint,用于断点后继续比较

需要权限
上下游:select show_databases reload

二、sync-diff-inspector使用限制

  • 不支持json bit binary blob等类型的数据对比
  • 如果是TiDB和mysql之间进行校验,Float,double等浮点数类型无法对比(因为底层排序规则逻辑不通,对比时会有差异)
  • 没有主键或唯一键的表可以校验,但是无法正确生成修复sql
  • 当数据正在同步时不支持数据在线校验

三、sync-diff-inspector操作

1、下载安装

wget https://download.pingcap.org/tidb-community-toolkit-v7.5.1-linux-amd64.tar.gz
------
tar -xvf tidb-community-toolkit-v7.5.1-linux-amd64.tar.gz

2、解压后在工具包就可看到
在这里插入图片描述

3、创建对比的配置文件

vim sync_diff_config.toml
--------------------------------
#对比时的线程数
check-thread-count=4
#是否输出修复语句
export-fix-sql=true
#true只查表结构,false检查表结构和数据
check-struct-only=false

#数据源
[data-sources]
[data-sources.mysql]
  host = "172.21.243.119"
  port = 3306
  user = "dba"
  password = "Dba1qaz@WSX"
  #对比规则
  route-rules = ["rule1"]

[data-sources.tidb]
  host = "172.21.243.119"
  port = 4000
  user = "dba"
  password = "Dba1qaz@WSX"

#对比规则
[routes]
[routes.rule1]
#原库名
schema-pattern = "test"
#目标库名
target-schema = "test"

[task]
#对比结果输出目录
  output-dir = "/tmp/output"
  #原端标识,对应上面的mysql
  source-instances = ["mysql"]
  #目标端标识,对应上面的tidb
  target-instance = "tidb"
  #对比哪些表
  target-check-tables = ["test.*"]

4、执行对比

./sync_diff_inspector --config=/opt/sync_diff_config.tom

在这里插入图片描述在这里插入图片描述

5、查看对比结果
在这里插入图片描述

  • checkpoint:检查点
  • fix-on-b:修复语句(需在目标端执行)
  • summary.txt:对比内容记录
  • sync_diff.log:对比日志

6、SQL修复内容

  • 下游数据库缺失行,生成replace语句
  • 下游数据库冗余,生成delete语句
  • 下游数据库行部分数据不一致,则是replace语句,但会在SQL文件中通过注释的方法标明不同的列

7、执行修复SQL后再验证
在这里插入图片描述
在这里插入图片描述

8、操作注意事项

  • 避免在业务高峰期
  • 建议比对前先收集表的统计信息
  • sql修复数据前需先确认
  • sync-diff-inspector默认开启sharding校验,(如果不是比对分片数据,sharding需要设置为false)
  • 如果表的主键或唯一键为varchar类型,需要在sync-diff-inspector的配置文件中增加collation配置(目的是为了保证check排序校验是顺序一致) collation=utf83
  • 生成的修复SQL是单行的,差异较大时修复速度过慢

彩蛋

TiDB相较于其他数据库的一大优势就是工作中常用的组件都有原生工具,并且大多数都遵循Apache License 2.0开源协议。

在这里插入图片描述

  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值