技术分享 | 使用 sync_diff_inspector 对两个 MySQL 进行数据校验

本文介绍了sync-diff-inspector工具的使用方法,包括如何配置和运行该工具来对比两个MySQL实例间的数据一致性。通过示例展示了对不同schema和table的校验,以及如何进行数据修复操作。

作者:沈光宇

爱可生南区 DBA 团队成员,主要负责 MySQL 故障处理和性能优化。对技术执着,为客户负责。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


一、sync-diff-inspector简介

sync-diff-inspector 是由 PingCAP 开源的数据校验工具,用于校验MySQL/TiDB中两份数据是否一致。

主要功能如下:

  • 对比表结构和数据
  • 如果数据不一致,则生成用于修复数据的 SQL 语句
  • 支持不同库名或表名的数据校验
  • 支持分库分表场景下的数据校验
  • 支持 TiDB 主从集群的数据校验
  • 支持从 TiDB DM 拉取配置的数据校验

sync-diff-inspector 的使用限制

  • 对于 MySQL 和 TiDB 之间的数据同步不支持在线校验,需要保证上下游校验的表中没有数据写入,或者保证某个范围内的数据不再变更,通过配置 range 来校验这个范围内的数据。
  • FLOAT、DOUBLE 等浮点数类型在 TiDB 和 MySQL 中的实现方式不同,在计算 checksum 时会分别取 6 位和 15 位有效数字。如果不使用该特性,需要设置 ignore-columns 忽略这些列的检查。
  • 支持对不包含主键或者唯一索引的表进行校验,但是如果数据不一致,生成的用于修复的 SQL 可能无法正确修复数据。

本文将介绍使用 sync-diff-inspector 工具对两个 MySQL 实例中的数据进行校验,两个 MySQL 实例之间使用 DTS 工具来同步数据。

二、sync-diff-inspector工具下载安装

#sync-diff-inspector已集成在TiDB工具包中,直接下载TiDB工具包即可
shell> wget https://download.pingcap.org/tidb-community-toolkit-v6.4.0-linux-amd64.tar.gz
shell> tar zxvf tidb-community-toolkit-v6.4.0-linux-amd64.tar.gz
shell> ls -lh tidb-community-toolkit-v6.4.0-linux-amd64 | grep sync_diff_inspector
-rwxr-xr-x 1 tidb tidb  98M Nov 17 11:41 sync_diff_inspector
shell> ./sync_diff_inspector  -V
App Name: sync_diff_inspector v2.0
Release Version: v6.4.0
Git Commit Hash: f7e65073b35538def61ae094cd4a8e57e705344b
Git Branch: heads/refs/tags/v6.4.0
UTC Build Time: 2022-11-04 07:21:08
Go Version: go1.19.2

三、sync-diff-inspector工具使用示例

1.配置文件通用部分

shell> cat config.toml
check-thread-count = 4             # 检查数据的线程数量
export-fix-sql = true              # 如果开启,若表数据存在不一致,则输出用于修复的SQL语句
check-struct-only = false          # 只对比表结构而不对比数据
[data-sources]                    
[data-sources.mysql1]              # 上游MySQL数据库配置(源端)
    host = "10.186.65.57"          
    port = 3306
    user = "sgy"
    password = "admin"
    route-rules = ["rule1"]        # 映射匹配规则,通过配置相应的规则可以对单个、多个schema或table进行校验
                                   # 如有多个rule时,可配置成 ["rule1", "rule2"]
[data-sources.mysql2]              # 下游MySQL数据库配置(目标端)
    host = "10.186.65.89"
    port = 3309
    user = "sgy"
    password = "admin"

2.基于schema的数据校验

  • 对单个schema进行数据校验
#映射匹配规则部分,需要将此部分放到置配置文件通用部分的后面
[routes]                               # 映射关系,如上下游schema不同名可在此配置
[routes.rule1]
    schema-pattern = "sbtest"          # 匹配上游数据库的的库名
    target-schema = "sbtest"           # 匹配下游数据库的库名

[task]
    output-dir = "./output"
    source-instances = ["mysql1"]   # 上游数据库,内容是 data-sources 声明的唯一标识 id,分库分表场景下支持多个上游数据库,如:["mysql10", "mysql20"]
    target-instance = "mysql2"      # 下游数据库,内容是 data-sources 声明的唯一标识 id
    target-check-tables = ["sbtest.*"]    # 需要比对的下游数据库的表
    
 # 进行数据校
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值