TiDB Data Migration 快速上手指南

    如需在生产环境中部署 DM,请参考以下文档:

    1. 使用 TiUP 部署 DM 集群
    2. 创建数据迁移任务

    在本地部署的 DM 集群组件和访问的 MySQL 和 TiDB 节点的信息如下:

    首先需要下载 DM 2.0 的 binary 或者手动编译。

    第一种方式:下载最新 DM binary 包

    第二种方式:编译最新 DM binary 包

    1. cd dm
    2. make

    部署 DM-master

    执行如下命令启动 DM-master:

    1. nohup bin/dm-master --master-addr='127.0.0.1:8261' --log-file=/tmp/dm-master.log --name="master1" >> /tmp/dm-master.log 2>&1 &

    执行如下命令启动 DM-worker:

    1. nohup bin/dm-worker --worker-addr='127.0.0.1:8262' --log-file=/tmp/dm-worker.log --join='127.0.0.1:8261' --name="worker1" >> /tmp/dm-worker.log 2>&1 &

    检查 DM 集群部署是否正常

    1. bin/dmctl --master-addr=127.0.0.1:8261 list-member

    一个正常 DM 集群的范例返回结果如下所示:

    使用 DM 之前,先准备好数据,向 MySQL-3306 写入示例数据。

    1. drop database if exists `testdm`;
    2. create database `testdm`;
    3. use `testdm`;
    4. create table t1 (id bigint, uid int, name varchar(80), info varchar(100), primary key (`id`), unique key(`uid`)) DEFAULT CHARSET=utf8mb4;
    5. create table t2 (id bigint, uid int, name varchar(80), info varchar(100), primary key (`id`), unique key(`uid`)) DEFAULT CHARSET=utf8mb4;
    6. insert into t1 (id, uid, name) values (1, 10001, 'Gabriel García Márquez'), (2, 10002, 'Cien años de soledad');
    7. insert into t2 (id, uid, name) values (3, 20001, 'José Arcadio Buendía'), (4, 20002, 'Úrsula Iguarán'), (5, 20003, 'José Arcadio');

    加载数据源 MySQL 配置

    对数据源 MySQL 访问密码进行加密

    为了安全,可配置及使用加密后的 MySQL 访问密码,以密码为 “123456” 为例:

    1. ./bin/dmctl --encrypt "123456"
    1. fCxfQ9XKCezSzuCD0Wf5dUD+LsKegSg=

    记录该加密后的密码,用于下面新建 MySQL 数据源。

    编写数据源 MySQL 配置

    把以下配置文件内容写入到 mysql-source-conf.yaml 中。

    MySQL1 的配置文件:

    1. # MySQL Configuration.
    2. source-id: "mysql-replica-01"
    3. from:
    4. host: "127.0.0.1"
    5. user: "root"
    6. password: "fCxfQ9XKCezSzuCD0Wf5dUD+LsKegSg="
    7. port: 3306

    加载数据源 MySQL 配置

    在终端中执行下面的命令,使用 dmctl 将 MySQL 的数据源配置加载到 DM 集群中:

    结果如下:

    1. {
    2. "result": true,
    3. "msg": "",
    4. {
    5. "result": true,
    6. "msg": "",
    7. "source": "mysql-replica-01",
    8. "worker": "worker1"
    9. }
    10. ]
    11. }

    在导入后,进行以下操作将 MySQL 的 testdm.t1testdm.t2 两张表迁移到 TiDB。

    1. 创建任务的配置文件 testdm-task.yaml

      1. ---
      2. name: testdm
      3. task-mode: all
      4. target-database:
      5. host: "127.0.0.1"
      6. port: 4000
      7. user: "root"
      8. password: "" # 如果密码不为空,则推荐使用经过 dmctl 加密的密文
      9. mysql-instances:
      10. - source-id: "mysql-replica-01"
      11. block-allow-list: "ba-rule1"
      12. ba-rule1:
      13. do-dbs: ["testdm"]
    2. 使用 dmctl 创建任务:

      1. ./bin/dmctl --master-addr 127.0.0.1:8261 start-task testdm-task.yaml

      结果如下:

      1. {
      2. "result": true,
      3. "msg": "",
      4. "sources": [
      5. {
      6. "result": true,
      7. "msg": "",
      8. "source": "mysql-replica-01",
      9. "worker": "worker1"
      10. }
      11. ]
      12. }

    这样就成功创建了一个将 MySQL-3306 数据迁移到 TiDB 的任务。

    查看迁移任务状态

    在创建迁移任务之后,可以用 dmtcl query-status 来查看任务的状态。

    结果如下:

    1. {
    2. "result": true,
    3. "msg": "",
    4. "tasks": [
    5. {
    6. "taskName": "testdm",
    7. "taskStatus": "Running",
    8. "sources": [
    9. "mysql-replica-01"
    10. ]
    11. }