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包括以下逻辑处理单元:
- Relay log:持久化保存从上游MySQL或MariaDB读取的binlog,并对binlog replication处理单元提供读取binlog event的功能
- Dump处理单元:从上游MySQL或MariaDB导出全量数据到本地磁盘
- Load处理单元:读取Dump处理单元的数据文件,然后加载到下游TiDB
- 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

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

被折叠的 条评论
为什么被折叠?



