数据库系列之TiDB Data Migration工具

TiDB Data Migration (DM) 是一个一体化的数据迁移工具,支持从MySQL或MariaDB到TiDB的全量和增量数据迁移。本文详细介绍了DM的架构、组件和特性,包括TableRouting、Binlog event过滤等功能,并展示了如何使用TiUP部署、运维DM集群。此外,还涵盖了DM任务管理,如数据源管理、任务状态查询、错误处理等,并给出了MySQL到TiDB数据迁移的实战步骤。

TiDB DM是一体化的数据迁移任务管理平台,本文简要介绍了DM的架构和原理,DM的使用和运维操作,并结合MySQL实例到TiDB迁移简单的使用场景进行测试验证。

在这里插入图片描述


1、TiDB Data Migration介绍

TiDB Data Migration (DM)是针对MySQL或MariaDB到TiDB的一体化数据迁移任务管理平台,DM通过解析binlog event将数据以SQL语句的形式迁移到TiDB中,可以完成全量数据迁移和增量数据复制。

1.1 DM架构

在这里插入图片描述

DM主要包括三个组件:DM-master、DM-worker和dmctl。

在这里插入图片描述

1.2 DM-worker处理单元

DM-worker负责执行具体的数据迁移任务,主要功能为注册为mysql或mariadb的slave节点,然后读取mysql或mariadb的binlog event并保存到本地为relay log,再将这些binlog数据解析为SQL语句应用到TiDB节点。DM-worker包括以下逻辑处理单元:

  1. Relay log:持久化保存从上游MySQL或MariaDB读取的binlog,并对binlog replication处理单元提供读取binlog event的功能
  2. Dump处理单元:从上游MySQL或MariaDB导出全量数据到本地磁盘
  3. Load处理单元:读取Dump处理单元的数据文件,然后加载到下游TiDB
  4. Binlog replication/sync处理单元:读取relay log处理单元的binlog event,将这些event转化为SQL语句,再将这些SQL语句应用到下游TiDB
1.3 DM迁移工具特性

1)Table Routing

Table Routing 是指将上游MySQL或MariaDB实例的某些表迁移到下游指定表的路由功能,可以用于分库分表的合并迁移。以下在分库分表合并场景中,将schema-pattern: “test_" 和 table-pattern: "t_” 的表的DML/DDL语句迁移到下游的 test.t中。

routes:
  rule-1:
    schema-pattern: "test_*"
    table-pattern: "t_*"
    target-schema: "test"
    target-table: "t"

2)Block & Allow Table Lists

根据规则过滤或者只迁移上游数据库实例某些 database/table 的所有操作。

block-allow-list:             # 如果 DM 版本 <= v2.0.0-beta.2 则使用 black-white-list。
  rule-1:
    do-dbs: ["~^test.*"]      # 以 ~ 字符开头,表示规则是正则表达式。
    ignore-dbs: ["mysql"]
    do-tables:
    - db-name: "~^test.*"
      tbl-name: "~^t.*"
    - db-name: "test"
      tbl-name: "t"
    ignore-tables:
    - db-name: "test"
      tbl-name: "log"
  • do-dbs:要迁移的库的白名单,类似于 MySQL 中的 replicate-do-db。
  • ignore-dbs:要迁移的库的黑名单,类似于 MySQL 中的 replicate-ignore-db。
  • do-tables:要迁移的表的白名单,类似于 MySQL 中的 replicate-do-table。
  • ignore-tables:要迁移的表的黑名单,类似于 MySQL 中的 replicate-ignore-table。

3)Binlog event filter

Binlog event filter可以指定只迁移或者过滤掉某些schema/table的指定类型binlog,比如 INSERT、TRUNCATE TABLE。

filters:
  rule-1:
    schema-pattern: "test_*"
    table-pattern: "t_*"
    events: ["truncate table", "drop table"]
    sql-pattern: ["^DROP\\s+PROCEDURE", "^CREATE\\s+PROCEDURE"]
    action: Ignore
  • schema-pattern/table-pattern:对匹配上的上游MySQL/MariaDB实例的表的binlog events或者DDL SQL语句通过以下规则进行过滤。
  • events:binlog events数组
  • sql-pattern:用于过滤指定的DDL SQL语句,支持正则表达式匹配

其它功能特性还包括column mapping和online DDL工具支持,但由于使用限制较多,这里不再赘述,可参考官网相关部分内容深入了解。

2、DM集群部署

TIDB DM集群的部署可以使用TiUP在线以及离线方式,也可以使用Binary安装包的方式,这里主要介绍使用TiUP在线方式部署DM集群环境。

1)安装TiUP组件

  • 执行如下命令安装TiUP工具:
[root@tango-centos01 ~]# curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
  • 重新声明全局环境变量:
[root@tango-centos01 ~]# source .bash_profile
  • 确认TiUP工具是否安装:
[root@tango-centos01 ~]# which tiup
/root/.tiup/bin/tiup
  • 安装TiUP DM组件
[root@tango-centos01 ~]# tiup install dm
  • 如果已经安装,则更新TiUP DM组件至最新版本:
tiup update --self && tiup update dm

预期输出 Update successfully! 字样。

2)编辑初始化配置文件

新建一个配置文件 topology.yaml,部署3个DM-master、3个DM-worker与1个监控组件:

---
global:
  user: "tidb"
  ssh_port: 22
  deploy_dir: "/usr/local/tidb/dm/deploy"
  data_dir: "/usr/local/tidb/dm/data"
  # arch: "amd64"

master_servers:
  - host: 192.168.112.101
  - host: 192.168.112.102
  - host: 192.168.112.103

worker_servers:
  - host: 192.168.112.101
  - host: 192.168.112.102
  - host: 192.168.112.103

monitoring_servers:
  - host: 192.168.112.101

grafana_servers:
  - host: 192.168.112.101

alertmanager_servers:
  - host: 192.168.112.101
  • 如果不需要确保DM集群高可用,则可只部署1个DM-master节点,且部署的DM-worker节点数量不少于上游待迁移的MySQL/MariaDB实例数。
  • 如果需要确保DM集群高可用,则推荐部署3个DM-master节点,且部署的 DM-worker 节点数量大于上游待迁移的MySQL/MariaDB实例数。

3)执行部署命令

[root@tango-centos01 ~]# tiup dm deploy dm-test v2.0.1 ./topology.yaml --user root -p
Starting component `dm`: /root/.tiup/components/dm/v1.3.2/tiup-dm deploy dm-test v2.0.1 ./topology.yaml --user root -p
Please confirm your topology:
Cluster type:    dm
Cluster name:    dm-test
Cluster version: v2.0.1
Type          Host             Ports      OS/Arch       Directories
----          ----             -----      -------       -----------
dm-master     192.168.112.101  8261/8291  linux/x86_64  /usr/local/tidb/dm/deploy/dm-master-8261,/usr/local/tidb/dm/data/dm-master-8261
dm-master     192.168.112.102  8261/8291  linux/x86_64  /usr/local/tidb/dm/deploy/dm-master-8261,/usr/local/tidb/dm/data/dm-master-8261
dm-master     192.168.112.103  8261/8291  linux/x86_64  /usr/local/tidb/dm/deploy/dm-master-8261,/usr/local/tidb/dm/data/dm-master-8261
dm-worker     192.168.112.101  8262       linux/x86_64  /usr/local/tidb/dm/deploy/dm-worker-8262,/usr/local/tidb/dm/data/dm-worker-8262
dm-worker     192.168.112.102  8262       linux/x86_64  /usr/local/tidb/dm/deploy/dm-worker-8262,/usr/local/tidb/dm/data/dm-worker-8262
dm-worker     192.168.112.103  8262       linux/x86_64  /usr/local/tidb/dm/deploy/dm-worker-8262,/usr/local/tidb/dm/data/dm-worker-8262
prometheus    192.168.112.101  9090       linux/x86_64  /usr/local/tidb/dm/deploy/prometheus-9090,/usr/local/tidb/dm/data/prometheus-9090
grafana       192.168.112.101  3000       linux/x86_64  /usr/local/tidb/dm/deploy/grafana-3000
alertmanager  192.168.112.101  9093/9094  linux/x86_64  /usr/local/tidb/dm/deploy/alertmanager-9093,/usr/local/tidb/dm/data/alertmanager-9093
Attention:
    1. If the topology is not what you expected, check your yaml file.
    2. Please confirm there is no port/directory conflicts in same host.
Do you want to continue? [y/N]:  y
  • 通过TiUP DM部署的集群名称为dm-test。
  • 部署版本为${version},可以通过执行tiup list dm-master来查看TiUP支持的最新版本。
  • 初始化配置文件为topology.yaml。
  • –user root:通过root用户登录到目标主机完成集群部署,该用户需要有ssh到目标机器的权限,并且在目标机器有sudo权限。也可以用其他有ssh和sudo权限的用户完成部署。
  • -p:交互式输入该用户的密码

预期日志结尾输出会有“Deployed cluster dm-test successfully”关键词,表示部署成功。

4)查看TiUP管理的集群情况

tiup dm list

TiUP支持管理多个DM集群,该命令会输出当前通过TiUP DM管理的所有集群信息,包括集群名称、部署用户、版本、密钥信息等:

[root@tango-centos01 ~]# tiup dm list
Starting component `dm`: /root/.tiup/components/dm/v1.3.2/tiup-dm list
Name     U
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值