Data Migration 多数据源汇总迁移到 TiDB

    假设数据源结构为:

    • 实例 1
    • 实例 2
    • 实例 3
    1. 不合并 库。

      1. 将实例 1 中的 user 库迁移到下游 TiDB 的 user_north 库中。

      2. 将实例 2 中的 user 库迁移到下游 TiDB 的 user_east 库中。

      3. 将实例 3 中的 user 库迁移到下游 TiDB 的 user_south 库中。

    2. 将数据源 store 库迁移到下游 store 库中,且迁移过程中不合并表。

      1. 实例 2 和实例 3 中都存在 store_sz 表,且这两个 store_sz 表分别被迁移到下游的 store_suzhou 表和 store_shenzhen 表中。

      2. 任何情况下都不删除 store 库的任何数据。

    3. log 库需要被过滤掉。

    假设下游结构为:

    • 为了满足迁移要求中第二点的第一条要求,需要配置以下 :

      1. routes:
      2. ...
      3. instance-2-store-rule:
      4. schema-pattern: "store"
      5. table-pattern: "store_sz"
      6. target-schema: "store"
      7. target-table: "store_suzhou"
      8. instance-3-store-rule:
      9. schema-pattern: "store"
      10. table-pattern: "store_sz"
      11. target-schema: "store"
      12. target-table: "store_shenzhen"
    • 为了满足迁移要求中第一点的第四条要求,需要配置以下 :

    • 为了满足迁移要求中第二点的第二条要求,需要配置以下 :

      1. filters:
      2. store-filter-rule: # 过滤掉删除 store 库,以及 store 库下面任何表的所有删除操作
      3. schema-pattern: "store"
      4. events: ["drop database", "truncate table", "drop table", "delete"]
      5. action: Ignore

    以下是完整的迁移任务配置,更多详情请参阅 数据迁移任务配置向导

    1. name: "one-tidb-slave"
    2. task-mode: all # 进行全量数据迁移 + 增量数据迁移
    3. meta-schema: "dm_meta"
    4. target-database:
    5. host: "192.168.0.1"
    6. port: 4000
    7. user: "root"
    8. password: ""
    9. mysql-instances:
    10. -
    11. source-id: "instance-1" # 数据源对象 ID,可以从数据源配置中获取
    12. route-rules: ["instance-1-user-rule"] # 应用于该数据源的 table route 规则
    13. filter-rules: ["log-filter-rule", "user-filter-rule" , "store-filter-rule"] # 应用于该数据源的 binlog event filter 规则
    14. block-allow-list: "log-ignored" # 应用于该数据源的 Block & Allow Lists 规则
    15. -
    16. source-id: "instance-2"
    17. route-rules: ["instance-2-user-rule", instance-2-store-rule]
    18. filter-rules: ["log-filter-rule", "user-filter-rule" , "store-filter-rule"]
    19. block-allow-list: "log-ignored"
    20. -
    21. source-id: "instance-3"
    22. route-rules: ["instance-3-user-rule", instance-3-store-rule]
    23. filter-rules: ["log-filter-rule", "user-filter-rule" , "store-filter-rule"]
    24. block-allow-list: "log-ignored"
    25. instance-1-user-rule:
    26. schema-pattern: "user"
    27. target-schema: "user_north"
    28. instance-2-user-rule:
    29. schema-pattern: "user"
    30. target-schema: "user_east"
    31. instance-3-user-rule:
    32. schema-pattern: "user"
    33. target-schema: "user_south"
    34. instance-2-store-rule:
    35. schema-pattern: "store"
    36. table-pattern: "store_sz"
    37. target-schema: "store"
    38. target-table: "store_suzhou"
    39. instance-3-store-rule:
    40. schema-pattern: "store"
    41. table-pattern: "store_sz"
    42. target-schema: "store"
    43. target-table: "store_shenzhen"
    44. filters:
    45. log-filter-rule:
    46. schema-pattern: "user"
    47. table-pattern: "log"
    48. events: ["truncate table", "drop table", "delete"]
    49. action: Ignore
    50. user-filter-rule:
    51. schema-pattern: "user"
    52. events: ["drop database"]
    53. action: Ignore
    54. store-filter-rule:
    55. schema-pattern: "store"
    56. action: Ignore