想校验tidb 和 tidb 的数据,执行命令的时候报错:
上游tidb版本:4.0.8 下游tidb版本:7.1.1
# Diff Configuration.
######################### Global config #########################
# 检查数据的线程数量,上下游数据库的连接数会略大于该值
check-thread-count = 4
# 如果开启,若表存在不一致,则输出用于修复的 SQL 语句。
export-fix-sql = true
# 只对比表结构而不对比数据
check-struct-only = false
######################### Datasource config #########################
[data-sources]
[data-sources.mysql1] # mysql1 是该数据库实例唯一标识的自定义 id,用于下面 task.source-instances/task.target-instance 中
host = "*****"
port = 4000
user = "root"
password = "****" # 设置连接上游数据库的密码,可为明文或 Base64 编码。
#(可选)使用映射规则来匹配上游多个分表,其中 rule1 和 rule2 在下面 Routes 配置栏中定义
route-rules = ["rule1"]
[data-sources.tidb0]
host = "****"
port = 8000
user = "****"
password = "****" # 设置连接下游数据库的密码,可为明文或 Base64 编码。
#(可选)使用 TLS 连接 TiDB
# security.ca-path = ".../ca.crt"
# security.cert-path = ".../cert.crt"
# security.key-path = ".../key.crt"
#(可选)使用 TiDB 的 snapshot 功能,如果开启的话会使用历史数据进行对比
# snapshot = "386902609362944000"
# 当 snapshot 设置为 "auto" 时,使用 TiCDC 在上下游的同步时间点,具体参考 <https://github.com/pingcap/tidb-tools/issues/663>
# snapshot = "auto"
########################### Routes ###########################
# 如果需要对比大量的不同库名或者表名的表的数据,或者用于校验上游多个分表与下游总表的数据,可以通过 table-rule 来设置映射关系
# 可以只配置 schema 或者 table 的映射关系,也可以都配置
#[routes]
#[routes.rule1] # rule1 是该配置的唯一标识的自定义 id,用于上面 data-sources.route-rules 中
#schema-pattern = "ceshi" # 匹配数据源的库名,支持通配符 "*" 和 "?"
#table-pattern = "insurance_area_face_mode" # 匹配数据源的表名,支持通配符 "*" 和 "?"
#target-schema = "epp" # 目标库名
#target-table = "insurance_area_face_mode" # 目标表名
#[routes.rule2]
#schema-pattern = "test2_*" # 匹配数据源的库名,支持通配符 "*" 和 "?"
#table-pattern = "t2_*" # 匹配数据源的表名,支持通配符 "*" 和 "?"
#target-schema = "test2" # 目标库名
#target-table = "t2" # 目标表名
######################### Task config #########################
# 配置需要对比的*目标数据库*中的表
[task]
# output-dir 会保存如下信息
# 1 sql: 检查出错误后生成的修复 SQL 文件,并且一个 chunk 对应一个文件
# 2 log: sync-diff.log 保存日志信息
# 3 summary: summary.txt 保存总结
# 4 checkpoint: a dir 保存断点续传信息
output-dir = "./output"
# 上游数据库,内容是 data-sources 声明的唯一标识 id
source-instances = ["mysql1"]
# 下游数据库,内容是 data-sources 声明的唯一标识 id
target-instance = "tidb0"
# 需要比对的下游数据库的表,每个表需要包含数据库名和表名,两者由 `.` 隔开
# 使用 ? 来匹配任意一个字符;使用 * 来匹配任意;详细匹配规则参考 golang regexp pkg: https://github.com/google/re2/wiki/Syntax
target-check-tables = ["visadb.vsParamCompany"]
补充配置文件
route-rules = ["rule1"]
像是这一行的问题,因为下面的rule1被你注释掉了。这个应该是关联不到的。把这一行注释掉,再试试看。
这一行注释了 也不行还是报同样的错误
你的 sync_diff版本是4.0的,但是你的sync_diff.toml文件内容则是7.1的格式。
下面这个链接来自4.0版本的sync_diff文档,你可以看到里面的配置文件内容写法有很大的不同。
https://docs.pingcap.com/zh/tidb/v4.0/sync-diff-inspector-overview
######################### Databases config #########################
# 源数据库实例的配置
[[source-db]]
host = "127.0.0.1"
port = 3306
user = "root"
password = "123456"
# 源数据库实例的 id,唯一标识一个数据库实例
instance-id = "source-1"
# 使用 TiDB 的 snapshot 功能,如果开启的话会使用历史数据进行对比
# snapshot = "2016-10-08 16:45:26"
# 设置数据库的 sql-mode,用于解析表结构
# sql-mode = ""
# 目标数据库实例的配置
[target-db]
host = "127.0.0.1"
port = 4000
user = "root"
password = "123456"
# 使用 TiDB 的 snapshot 功能,如果开启的话会使用历史数据进行对比
# snapshot = "2016-10-08 16:45:26"
# 设置数据库的 sql-mode,用于解析表结构
# sql-mode = ""
所以根本识别不到source-db的配置。
是的,配置文件是不贴的不对呢
好的 谢谢,这个确实没有关注,以为配置文件都一样的写法,我更改下
更改了配置文件,可以执行了,但是我上下游的表结构不一致,导致报错了,想问下,这个工具只能校验表结构一致的表,如果表结构不一致的话是不是没有办法校验了,目前上游是12个字段,下游是21个字段
是的,校验本质上是对范围的列进行hash值运算。字段不同,就算出来肯定不同。不过印象中syncdiff是有注释忽略某列的功能的。可以把多的列注释掉试试。
配置文件里有个ignore-columns 可以忽略某些列的对比
有页面可以查到sync_diff参数变化了哪些么?除了ReleaseNotes
不清楚,要不是他有报错信息,我才去比对了一下版本参数变化,我都没想到变化这么大。
而且截图里看这sync diff 是4.0.9 还不是4.0.8,提示的比较清楚就是配置项不对,
不过可以肯定的说是老用户无疑了
好嘞,谢谢 不过很多表的字段数量都不一样,这样排查起来有点困难,像我这种情况,数据进行校验的话有没有建议
没有。除非只校验条数,写个count脚本
话说回来,版本差异这么大,是为了验证新版本么,为升级做准备么?
原来的业务在4.0.8 ,业务升级正好也申请了新的服务器,就部署了新的版本,业务想切到新的版本上
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。