sync-diff-inspector 用户文档
主要功能:
- 对比表结构和数据
- 如果数据不一致,则生成用于修复数据的 SQL 语句
- 支持不同库名或表名的数据校验
- 支持
- 支持 TiDB 主从集群的数据校验
GitHub 地址:
下载地址:tidb-enterprise-tools-latest-linux-amd64
不支持 JSON、BIT、BINARY、BLOB 等类型的数据,在校验时需要设置
ignore-columns
忽略检查这些类型的数据。FLOAT、DOUBLE 等浮点数类型在 TiDB 和 MySQL 中的实现方式不同,在计算 checksum 时可能存在差异,如果发现因为这些类型的数据导致的数据校验不一致,需要设置
ignore-columns
忽略这些列的检查。
sync-diff-inspector 需要获取表结构信息、查询数据、建 checkpoint 库保存断点信息,需要的数据库权限如下:
-
SELECT(查数据进行对比)
SHOW_DATABASES (查看库名)
RELOAD (查看表结构)
下游数据库
SELECT (查数据进行对比)
CREATE (创建 checkpoint 库和表)
DELETE (删除 checkpoint 表中的信息)
SHOW_DATABASES (查看库名)
RELOAD (查看表结构)
sync-diff-inspector 的配置总共分为三个部分:
- Global config: 通用配置,包括日志级别、划分 chunk 的大小、校验的线程数量等。
- Tables config: 配置校验哪些表,如果有的表在上下游有一定的映射关系或者有一些特殊要求,则需要对指定的表进行配置。
- Databases config: 配置上下游数据库实例。
下面是一个完整配置文件的说明:
执行如下命令:
./bin/sync_diff_inspector --config=./config.toml
该命令最终会在日志中输出一个检查报告,说明每个表的检查情况。如果数据存在不一致的情况,sync-diff-inspector 会生成 SQL 修复不一致的数据,并将这些 SQL 语句保存到 文件中。
- sync-diff-inspector 在校验数据时会消耗一定的服务器资源,需要避免在业务高峰期间校验。
- TiDB 使用的 collation 为
utf8_bin
。如果对 MySQL 和 TiDB 的数据进行对比,需要注意 MySQL 中表的 collation 设置。如果表的主键/唯一键为 varchar 类型,且 MySQL 中 collation 设置与 TiDB 不同,可能会因为排序问题导致最终校验结果不正确,需要在 sync-diff-inspector 的配置文件中增加 collation 设置。 - sync-diff-inspector 会优先使用 TiDB 的统计信息来划分 chunk,需要尽量保证统计信息精确,可以在业务空闲期手动执行
analyze table {table_name}
。 - table-rule 的规则需要特殊注意,例如设置了
schema-pattern="test1"
,,会对比 source 中的test1
库和 target 中的test2
库;如果 source 中有test2
库,该库也会和 target 中的 库进行对比。 - 生成的
fix.sql
仅作为修复数据的参考,需要确认后再执行这些 SQL 修复数据。