sync-diff-inspector 用户文档

    主要功能:

    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: 配置上下游数据库实例。

    下面是一个完整配置文件的说明:

    执行如下命令:

    1. ./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 修复数据。