作者:沈光宇
爱可生南区 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.*"] # 需要比对的下游数据库的表
# 进行数据校

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

被折叠的 条评论
为什么被折叠?



