You are viewing the archived documentation of TiDB, which no longer receives updates.

View latest LTS version docs

Using Migrate Data from Multiple Data Sources to TiDB

This document shows how to use Data Migration (DM) in a simple data migration scenario where the data of three data source MySQL instances needs to be migrated to a downstream TiDB cluster (no sharding data).

Data source instances

Assume that the data sources are as follows:

  • Instance 1

    SchemaTables
    userinformation, log
    storestore_bj, store_tj
    logmessages
  • Instance 2

    SchemaTables
    userinformation, log
    storestore_sh, store_sz
    logmessages
  • Instance 3

    SchemaTables
    userinformation, log
    storestore_gz, store_sz
    logmessages

Migration requirements

  1. Do not merge the user schema.
    1. Migrate the user schema of instance 1 to the user_north of TiDB.
    2. Migrate the user schema of instance 2 to the user_east of TiDB.
    3. Migrate the user schema of instance 3 to the user_south of TiDB.
    4. Never delete the table log.
  2. Migrate the upstream store schema to the downstream store schema without merging tables.
    1. store_sz exists in both instances 2 and 3, which is migrated to store_suzhou and store_shenzhen respectively.
    2. Never delete store.
  3. The log schema needs to be filtered out.

Downstream instances

Assume that the schemas migrated to the downstream are as follows:

SchemaTables
user_northinformation, log
user_eastinformation, log
user_southinformation, log
storestore_bj, store_tj, store_sh, store_suzhou, store_gz, store_shenzhen

Migration solution

  • To satisfy migration Requirements #1-i, #1-ii and #1-iii, configure the table routing rules as follows:

    routes: ... instance-1-user-rule: schema-pattern: "user" target-schema: "user_north" instance-2-user-rule: schema-pattern: "user" target-schema: "user_east" instance-3-user-rule: schema-pattern: "user" target-schema: "user_south"
  • To satisfy the migration Requirement #2-i, configure the table routing rules as follows:

    routes: ... instance-2-store-rule: schema-pattern: "store" table-pattern: "store_sz" target-schema: "store" target-table: "store_suzhou" instance-3-store-rule: schema-pattern: "store" table-pattern: "store_sz" target-schema: "store" target-table: "store_shenzhen"
  • To satisfy the migration Requirement #1-iv, configure the binlog filtering rules as follows:

    filters: ... log-filter-rule: schema-pattern: "user" table-pattern: "log" events: ["truncate table", "drop table", "delete"] action: Ignore user-filter-rule: schema-pattern: "user" events: ["drop database"] action: Ignore
  • To satisfy the migration Requirement #2-ii, configure the binlog filtering rule as follows:

    filters: ... store-filter-rule: schema-pattern: "store" events: ["drop database", "truncate table", "drop table", "delete"] action: Ignore
  • To satisfy the migration Requirement #3, configure the block and allow lists as follows:

    block-allow-list: # Use black-white-list if the DM version is earlier than or equal to v2.0.0-beta.2. log-ignored: ignore-dbs: ["log"]

Migration task configuration

The complete migration task configuration is shown below. For more details, see data migration task configuration guide.

name: "one-tidb-secondary" task-mode: all meta-schema: "dm_meta" target-database: host: "192.168.0.1" port: 4000 user: "root" password: "" mysql-instances: - source-id: "instance-1" route-rules: ["instance-1-user-rule"] filter-rules: ["log-filter-rule", "user-filter-rule", "store-filter-rule"] block-allow-list: "log-ignored" # Use black-white-list if the DM version is earlier than or equal to v2.0.0-beta.2. mydumper-config-name: "global" loader-config-name: "global" syncer-config-name: "global" - source-id: "instance-2" route-rules: ["instance-2-user-rule", instance-2-store-rule] filter-rules: ["log-filter-rule", "user-filter-rule", "store-filter-rule"] block-allow-list: "log-ignored" # Use black-white-list if the DM version is earlier than or equal to v2.0.0-beta.2. mydumper-config-name: "global" loader-config-name: "global" syncer-config-name: "global" - source-id: "instance-3" route-rules: ["instance-3-user-rule", instance-3-store-rule] filter-rules: ["log-filter-rule", "user-filter-rule", "store-filter-rule"] block-allow-list: "log-ignored" # Use black-white-list if the DM version is earlier than or equal to v2.0.0-beta.2. mydumper-config-name: "global" loader-config-name: "global" syncer-config-name: "global" # other common configs shared by all instances routes: instance-1-user-rule: schema-pattern: "user" target-schema: "user_north" instance-2-user-rule: schema-pattern: "user" target-schema: "user_east" instance-3-user-rule: schema-pattern: "user" target-schema: "user_south" instance-2-store-rule: schema-pattern: "store" table-pattern: "store_sz" target-schema: "store" target-table: "store_suzhou" instance-3-store-rule: schema-pattern: "store" table-pattern: "store_sz" target-schema: "store" target-table: "store_shenzhen" filters: log-filter-rule: schema-pattern: "user" table-pattern: "log" events: ["truncate table", "drop table", "delete"] action: Ignore user-filter-rule: schema-pattern: "user" events: ["drop database"] action: Ignore store-filter-rule: schema-pattern: "store" events: ["drop database", "truncate table", "drop table", "delete"] action: Ignore block-allow-list: # Use black-white-list if the DM version is earlier than or equal to v2.0.0-beta.2. log-ignored: ignore-dbs: ["log"] mydumpers: global: threads: 4 chunk-filesize: 64 loaders: global: pool-size: 16 dir: "./dumped_data" syncers: global: worker-count: 16 batch: 100 max-retry: 100