sync-diff-inspector

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:tidb 4.0.8
  • 【问题描述】:使用sync-diff-inspector 工具校验分库分表数据得一致性 配置如下:校验mysql库中分表:voucher_header_001、voucher_header_002、voucher_header_003得数据和tidb中voucher_header(分表合并后)得数据
    执行校验命令:(并没有校验),能否帮忙看看哪里配置得有问题吗
    ./sync_diff_inspector -config=./diff_inspectory_partion.toml
    [2020/11/27 14:11:44.363 +08:00] [INFO] [printer.go:45] [“Welcome to sync_diff_inspector”] [“Release Version”=1.0.0~rc2+git.399be9f] [“Git Commit Hash”=399be9fe97931d16ad154f1bda8f7d7d676a96d6] [“Git Branch”=master] [“UTC Build Time”=“2020-11-15 01:30:26”] [“Go Version”=go1.13]
    [2020/11/27 14:11:44.364 +08:00] [INFO] [main.go:62] [config="{“log-level”:“info”,“source-db”:[{“host”:“10.0.74.91”,“port”:7491,“user”:“mysql2tidb”,“schema”:"",“snapshot”:"",“instance-id”:“sourcefinance”,“Conn”:null}],“target-db”:{“host”:“10.70.74.39”,“port”:4000,“user”:“dm_agent”,“schema”:"",“snapshot”:"",“instance-id”:“target”,“Conn”:null},“chunk-size”:1000,“sample-percent”:100,“check-thread-count”:4,“use-checksum”:true,“only-use-checksum”:false,“fix-sql-file”:“fix.sql”,“check-tables”:[{“schema”:“db_finance”,“tables”:null,“exclude-tables”:null}],“table-rules”:[{“schema-pattern”:“d’b_finance”,“table-patterndb”:“voucher_header_*”,“target-schema”:“db_finance”,“target-table”:“voucher_line”}],“table-config”:null,“ignore-struct-check”:false,“ignore-data-check”:false,“use-checkpoint”:true,“dm-addr”:"",“dm-task”:"",“ConfigFile”:"./diff_inspectory_partion.toml",“PrintVersion”:false}"]
    set tidb cfg
    [2020/11/27 14:11:44.433 +08:00] [INFO] [report.go:80] [“check result summary”] [“check passed num”=0] [“check failed num”=0]
    [2020/11/27 14:11:44.433 +08:00] [INFO] [main.go:75] [“check data finished”] [cost=67.575632ms]
    [2020/11/27 14:11:44.433 +08:00] [INFO] [main.go:69] [“check pass!!!”]

Diff Configuration.

######################### Global config #########################

日志级别,可以设置为 info、debug

log-level = “info”

sync-diff-inspector 根据主键/唯一键/索引将数据划分为多个 chunk,

对每一个 chunk 的数据进行对比。使用 chunk-size 设置 chunk 的大小

chunk-size = 1000

检查数据的线程数量

check-thread-count = 4

抽样检查的比例,如果设置为 100 则检查全部数据

sample-percent = 100

通过计算 chunk 的 checksum 来对比数据,如果不开启则逐行对比数据

use-checksum = true

如果设置为 true 则只会通过计算 checksum 来校验数据,如果上下游的 checksum 不一致也不会查出数据再进行校验

only-use-checksum = false

是否使用上次校验的 checkpoint,如果开启,则只校验上次未校验以及校验失败的 chunk

use-checkpoint = true

不对比数据

ignore-data-check = false

不对比表结构

ignore-struct-check = false

保存用于修复数据的 sql 的文件名称

fix-sql-file = “fix.sql”

######################### Tables config #########################

配置需要对比的目标数据库中的表

[[check-tables]]
# 库的名称
schema = “dbfinance”

# 需要检查的表的名称
#tables = ["voucher_header"]

通过 table-rule 来设置上游分表与下游总表的映射关系。可以只配置 schema 或者 table 的映射关系,也可以都配置

[[table-rules]]
# schema-pattern 和 table-pattern 支持通配符 ?
# 在 source-db 中配置的上游数据库中所有满足 schema-pattern 和 table-pattern 规则的表都为 target-schema.target-table 的分表
schema-pattern = “db_finance”
#table-pattern = “~^voucher_header_\d{1,4}$”
table-pattern = "voucher_header_
"
target-schema = “db_finance”
target-table = “voucher_line”

######################### Databases config #########################

源数据库实例的配置

[[source-db]]
host = “10.0.xx”
port = 7491
user = “my2tidb”
password = “****”
instance-id = “sourcefidb”

目标数据库实例的配置

[target-db]
host = “10.0.xx.xx”
port = 4000
user = “dm_agent”
password = “Hxxx8132”

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

麻烦调整 log-level = “debug” 再执行一次。然后再上传一下 debug 的日志。

已经解决了,谢谢,想继续问问题:
1、怎么能忽略某些特定得表

可以通过 exclude-tables 来配置
https://github.com/pingcap/tidb-tools/blob/2707c97b3853f3ebffb4fc4339945c59fc1b32a6/sync_diff_inspector/config.toml#L62

1 个赞

好得,谢谢

:+1::+1::+1: