分库分表场景下的数据校验

sync-diff-inspector 支持对分库分表场景进行数据校验。例如有两个 MySQL 实例,使用同步工具 DM 同步到一个 TiDB 中,场景如图所示:

shard-table-sync

则需要为 table-0table-config 中进行特殊配置,设置 is-sharding=true,并且在 table-config.source-tables 中配置上游表信息。完整的示例配置如下:

  1. # Diff Configuration.
  2. ######################### Global config #########################
  3. # 日志级别,可以设置为 info、debug
  4. log-level = "info"
  5. # sync-diff-inspector 根据主键/唯一键/索引将数据划分为多个 chunk,
  6. # 对每一个 chunk 的数据进行对比。使用 chunk-size 设置 chunk 的大小
  7. chunk-size = 1000
  8. # 检查数据的线程数量
  9. check-thread-count = 4
  10. # 抽样检查的比例,如果设置为 100 则检查全部数据
  11. sample-percent = 100
  12. # 通过计算 chunk 的 checksum 来对比数据,如果不开启则逐行对比数据
  13. use-checksum = true
  14. # 如果设置为 true 则只会通过计算 checksum 来校验数据,如果上下游的 checksum 不一致也不会查出数据再进行校验
  15. only-use-checksum = false
  16. # 是否使用上次校验的 checkpoint,如果开启,则只校验上次未校验以及校验失败的 chunk
  17. use-checkpoint = true
  18. # 不对比数据
  19. ignore-data-check = false
  20. # 不对比表结构
  21. ignore-struct-check = false
  22. # 保存用于修复数据的 sql 的文件名称
  23. fix-sql-file = "fix.sql"
  24. ######################### Tables config #########################
  25. # 配置需要对比的目标数据库中的表
  26. [[check-tables]]
  27. # 库的名称
  28. schema = "test"
  29. # 需要检查的表的名称
  30. tables = ["table-0"]
  31. # 配置该表对应的分表的相关配置
  32. [[table-config]]
  33. # 目标库的名称
  34. schema = "test"
  35. # 目标库中表的名称
  36. table = "table-0"
  37. # 为分库分表场景下数据的对比,设置为 true
  38. is-sharding = true
  39. # 源数据表的配置
  40. [[table-config.source-tables]]
  41. # 源数据库实例的 id
  42. instance-id = "MySQL-1"
  43. schema = "test"
  44. table = "table-1"
  45. [[table-config.source-tables]]
  46. # 源数据库实例的 id
  47. instance-id = "MySQL-1"
  48. schema = "test"
  49. table = "table-2"
  50. [[table-config.source-tables]]
  51. # 源数据库实例的 id
  52. instance-id = "MySQL-2"
  53. schema = "test"
  54. table = "table-3"
  55. ######################### Databases config #########################
  56. # 源数据库实例的配置
  57. [[source-db]]
  58. host = "127.0.0.1"
  59. port = 3306
  60. user = "root"
  61. password = "123456"
  62. instance-id = "MySQL-1"
  63. # 源数据库实例的配置
  64. [[source-db]]
  65. host = "127.0.0.2"
  66. port = 3306
  67. user = "root"
  68. password = "123456"
  69. instance-id = "MySQL-2"
  70. # 目标数据库实例的配置
  71. [target-db]
  72. host = "127.0.0.3"
  73. port = 4000
  74. user = "root"
  75. password = "123456"
  76. instance-id = "target-1"