# DM 的原理

__*DM 原理*__
__*DM 特点*__

+ 支持 DML & DDL 同步复制
+ 支持合库合表同步复制
+ 内置过滤器
+ 集中管理
+ 高可用

![right](./student-guide/diagram/DMPI_aa_001_20220623.png)
-------------------------------------------------------------
DM 的原理与架构
TiDB Data Migration (DM) 是一款便捷的数据迁移工具,支持从与 MySQL 协议兼容的数据库（MySQL、MariaDB、Aurora MySQL）到 TiDB 的全量数据迁移和增量数据同步。使用 DM 工具有利于简化数据迁移过程,降低数据迁移运维成本。

特性
*与 TiDB 同样保持 MySQL 兼容性。高度兼容 MySQL 5.7 协议、MySQL 5.7 常用的功能及语法。
*支持 DML & DDL 事件同步。支持解析和同步 binlog 中的 DML 和 DDL 事件。
*支持合库合表同步模式。可以方便的将上游各个分片 MySQL 实例的各个分表数据,合并同步到下游 TiDB 的一张表。支持自定义编写同步规则以方便各种可能的同步需求,且具备自动识别和处理上游分片 MySQL 的 DDL 变更,大幅简化运维成本。
*内置多种过滤器以灵活适应不同场景。支持以预定义事件类型、正则表达式、SQL 表达式等多种方式在数据同步过程中对 MySQL binlog 事件进行过滤。
*集中管理。DM 支持上千个节点的集群规模,可同时运行并集中管理大量数据迁移同步任务。
*对第三方 Online Schema Change 工具变更过程的同步优化。在 MySQL 生态中,gh-ost 与 pt-osc 等工具被广泛使用,DM 对其变更过程进行了特殊的优化,以避免对不必要的中间数据进行迁移。详细信息可参考 online-ddl。
*高可用。支持迁移任务在不同节点自由调度,少量工作节点宕机并不会影响进行中的任务。

DM-master
DM-master 负责管理和调度数据迁移任务的各项操作。
- 保存 DM 集群的拓扑信息
- 监控 DM-worker 进程的运行状态
- 监控数据迁移任务的运行状态
- 提供数据迁移任务管理的统一入口
- 协调分库分表场景下各个实例分表的 DDL 迁移
DM-worker
DM-worker 负责执行具体的数据迁移任务。
- 将 binlog 数据持久化保存在本地
- 保存数据迁移子任务的配置信息
- 编排数据迁移子任务的运行
监控数据迁移子任务的运行状态

有关于 DM-worker 的更多介绍,详见 https://docs.pingcap.com/zh/tidb-data-migration/dev/dm-worker-intro。
dmctl
dmctl 是用来控制 DM 集群的命令行工具。
- 创建、更新或删除数据迁移任务
- 查看数据迁移任务状态
- 处理数据迁移任务错误
- 校验数据迁移任务配置的正确性
有关于 dmctl 的使用介绍,详见 https://docs.pingcap.com/zh/tidb-data-migration/dev/dmctl-introduction。