sync-diff-inspector 能不能校验mysql与mysql的一致性?

sync-diff-inspector 能不能校验mysql与mysql的一致性?

1) sync-diff-inspector 是一个用于校验 MySQL/TiDB 中两份数据是否一致的工具。该工具提供了修复数据的功能(适用于修复少量不一致的数据)
—这是官方说的,暗含只比对mysql和tidb的。
2)其次,sync-diff-inspector目前不能进行动态对比 。
3)再者,如果是校验mysql和myql,为什么不用pt工具呢?并且可以实时校验和修复。

1 个赞

谢谢回复

1、不需要动态对比,只对比静态

2、pt-table-checksum通常是用来校验master/slave,校验mysql group replication有点麻烦或者说不能校验

如果只校验主库,也会报一大堆错误类似如下:

Error checksumming table pay_timing.qrtz_simple_triggers: DBD::mysql::st execute failed: The table does not comply with the requirements by an external plugin. [for Statement "DELETE FROM `percona`.`checksums` WHERE db = ? AND tbl = ?" with ParamValues: 0='pay_timing', 1='qrtz_simple_triggers'] at /data/percona/tool/bin/pt-table-checksum line 11150

还有可能没有任何报错,而是直接退出了

1 个赞

感觉是权限的问题,权限缺失

或者
/data/percona/tool/bin/pt-table-checksum line 11150

看看这行的代码,看看报错的条件是什么?

突然想起来了,确实会有些问题,MGR协议必须是row模式同步,但是PT工具在校验的时候,把session级别的binlog改成statement模式,会导致有这个问题。

这样就可能需要变换一种方式,mgr集群改成简单的m-s,然后校验完后,再改回去。

这行是mgr返回的错误给pt-table-checksum,通常是没有主键造成的,但我的mgr集群是正常的

可能这也是一种办法,但对于生产环境很难实现

–no-check-binlog-format也不可以吗

1 个赞

不行:joy:

版本:

App Name: sync_diff_inspector
Release Version: v5.3.0
Git Commit Hash: cef6f500d02daca6f6e420e1e6d3466dfb39ddbd
Git Branch: HEAD
UTC Build Time: 2021-11-16 11:53:47
Go Version: go1.16.4

执行了sync_diff_inspector一直报下面错误:config.toml配置是直接复制官网文档

Error: unknown keys in config file config.toml: [log-level chunk-size sample-percent use-checksum only-use-checksum use-checkpoint ignore-data-check ignore-struct-check fix-sql-file check-tables check-tables.schema check-tables.tables table-config table-config.schema table-config.table table-config.index-fields table-config.range table-config.is-sharding table-config table-config.schema table-config.table table-config.is-sharding table-config.source-tables table-config.source-tables.instance-id table-config.source-tables.schema table-config.source-tables.table source-db source-db.host source-db.port source-db.user source-db.password source-db.instance-id target-db target-db.host target-db.port target-db.user target-db.password]
1 个赞

使用sync_diff_inspector 校验mysql–》mysql的?我这边没有这样用过。

试试看:sweat_smile:

看起来应该是下载了nightly版本有问题

试了下还真可以:grinning:

但好像只能对比相同表中数据的差异,不会比较是否有多出来的表或者少表

库中表不多的话,并且只需要静态对比,可以通过crc32函数直接校验。

对的,静态对比的话analyze或者crc32都行
SELECT COUNT(*) AS cnt, COALESCE(LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS(’#’,%s)) AS UNSIGNED)), "
"10, 16)), 0) AS crc FROM table_name

1 个赞

好的,谢谢:+1:

多谢回复:+1:

:+1::+1:

Hello, 我也是这个报错,您是怎么解决的呀