DM是一体化的迁移任务管理工具, 支持从与MySQL协议兼容的数据库到TiDB数据库的迁移,支持全量载入和增量的数据传输,同时可以进行表和操作的过滤,并且可以进行分库分表的合并迁移;

DM架构

dmctl: 用来控制DM集群的命令工具;

  • 用户通过dmctl进行创建、更新、删除任务;
  • 查看迁移任务的工作状态;
  • 处理迁移任务过程中发生的错误

DM-master负责管理和调度数据迁移任务的各项操作;

  • 保存整个DM的拓扑信息
  • 负责DM高可用
  • 监控各个节点的运行状态
  • 协调整个迁移任务

DM-worker负责执行具体的数据迁移任务;

  • 负责读取mysql里面的数据;
  • 负责读取BINLOG,保存到本地,进行编排;
  • 将编排后的BINLOG 发送给TiDB Cluster
  • 一个DM-worker只能对应一个MySQL源端
  • 多余的DM-worker将会保持空闲状态;

适用场景:

  1. 从兼容MySQL的数据库迁移同步数据;
  2. 源库和目标库异构表的迁移
  3. 分库分表的合并迁移;

部署

安装: tiup install dm

升级: tiup update --self  && tiup update dm

生成初始化配置文件: tiup dm template

tiup dm deploy ${name} ${version} ./topology.yaml --user root [-p]

tiup list dm-master    查看可部署的DM版本
部署成功后提示: deployed successfully

iup dm deploy dm_default 5.3.0 ./topology.yaml --user root
Starting component `dm`: /root/.tiup/components/dm/v1.7.0/tiup-dm deploy dm_default 5.3.0 ./topology.yaml --user root
...
Cluster `dm_default` deployed successfully, you can start it with command: `tiup dm start dm_default`

查看部署的DM: tiup dm list

tiup dm list
Starting component `dm`: /root/.tiup/components/dm/v1.7.0/tiup-dm list
Name        User  Version  Path                                        PrivateKey
----        ----  -------  ----                                        ----------
dm_default  root  v5.3.0   /root/.tiup/storage/dm/clusters/dm_default  /root/.tiup/storage/dm/clusters/dm_default/ssh/id_rsa

查看集群信息:tiup dm display dm_default

启动集群:  tiup dm start dm_default

  • MySQL源必须开启BINLOG
  • Table Block& Allow Lists: 可以对库表进行过滤;
  • BINLOG EVENT FILTER:  对具体的操作进行过滤,如 INSERT/DELETE/UPDATE/DROP/TRUNCATE 等;
  • Table Routing: 表路由,可以同步源和目标不同表名; 可以做分库分表同步到单表;
  • TiDB: 将BINLOG转化为TiDB可执行的语句,并行执行;

DM配置文件

# The topology template is used deploy a minimal DM cluster, which suitable
# for scenarios with only three machinescontains. The minimal cluster contains
# - 3 master nodes
# - 3 worker nodes
# You can change the hosts according your environment
---
global:user: "root"ssh_port: 22deploy_dir: "/export/servers/tidb/dm/deploy"data_dir: "/export/servers/tidb/dm/data"# arch: "amd64"master_servers:- host: XX.XX.XX.XXworker_servers:- host: XX.XX.XX.XXmonitoring_servers:- host: XX.XX.XX.XXgrafana_servers:- host: XX.XX.XX.XXalertmanager_servers:- host: XX.XX.XX.XX

数据源配置

source-id: "mysql-replica-01"
#是否开启GTID
enable-gtid: false# 是否开启 relay log
enable-relay: false
relay-binlog-name: '' #拉去上游的起始文件名
relay-binlog-gtid: '' #拉取上游BINLOG的起始GTIDfrom:host: "x.x.x.x"port: portuser: "username"password: "password"

目标库配置

# 目标库配置
# 任务名, 多个同时运行的任务不能重名
name: "test"
# 全量+增量: all 迁移模式
task-mode: "all"
# 下游TiDB配置信息
target-database: host: "X.X.X.X"port: portuser: "user"password: "password"

过滤规则配置

mysql-instance:- source-id: "mysql-replica-01"     # 从source-id = mysql-replica-01 的数据源迁移数据block-allow-list: "bw-rule-1"        # 黑白名单配置名称,过滤指定的库表filter-rules: ["filter-rule-1"]  # 过滤数据源特定操作的规则, 可以配置多个过滤规则route-rules: ["route-rule-1", "route-rule-2"]  #数据源表迁移到目标TiDB表的路由规则, 可以定义多个规则- source-id: "mysql-replica-02"      # 从source-id = my-replica-02 的数据源迁移数据block-allow-list: "bw-rule-2"       # 黑白名单配置名称filter-rules: ["filter-rule-2"] # 过滤数据源特定操作的规则, 可以配置多个过滤规则     # 黑白名单配置:
block-allow-list:               #定义数据源迁移表的过滤规则, 可以定义多个规则。 如果DM版本早于v2.0.0-beta.2 则使用
block-white-listbw-rule-1:                  # 规则名称do-dbs: ["user"]        # 迁移哪些库ignore-dbs: ["test"]   # 忽略哪些库do-tables:               # 迁移哪些表- db-name: "user"      # 迁移user库中的t1表tbl-name:  "t1"# Binlog event filter,操作过滤
filters:                        # 上游数据库实例匹配的表的binlog event filter规则集filter-rule-1:              # 配置名称schema-pattern: "test"      # 库名匹配规则, 支持通配符 "*" 和 "?"table-pattern: "sbtest"       # 表名匹配规则, 支持通配符 "*" 和 "?"events: ["insert"]            # 匹配哪些event类型action: Ignore             # 对符合匹配规则的 binlog 迁移(Do)还是忽略(Ignore)filter-rule-2:schema-pattern: "test"events: ["truncate table"]action: Ignore# 路由规则
routes:                             # 上游和下游之间的路由 table routing 规则集route-rule-1:                 # 配置名称schema-pattern: "test"      # 库名匹配规则,支持通配符table-pattern:     "sbtest1" # 表名匹配规则,支持通配符target-schema: "test"        # 目标库名target-table: "sbtest2"     # 目标表名# 分库分表合并迁移
routes:sale-route-rule:schema-pattern: "sales"table-pattern: "order*"target-schema: "sales"target-table: "order"

常用命令


# 检查任务
tiup dmctl --master-addr 172.18.136.172:8261  check-task ./task.yaml# 开始任务
tiup dmctl --master-addr 172.18.136.172:8261  start-task ./task.yaml# 暂停任务
tiup dmctl --master-addr 172.18.136.172:8261  pause-task ./task.yaml# 恢复任务
tiup dmctl --master-addr 172.18.136.172:8261  resume-task ./task.yaml# 查看任务
tiup dmctl --master-addr 172.18.136.172:8261  query-task ./task.yaml# 停止任务
tiup dmctl --master-addr 172.18.136.172:8261  stop-task ./task.yaml

性能优化

  • 全量导出

    • rows                # 每次导出的chunk 行数;
    • chunk-filesize        #  默认64M
    • threads             # 并发线程数
  • 全量导入
    • pool-size            # TiDB并发导入的线程数,默认16;
  • 增量复制
    • worker-count        # 默认16, DM worker线程数
    • batch                # 下游数据库,每个事物包含的行数;默认100

常见问题

1,处理不兼容的DDL
tiup dmctl --master-addr ip:8261 handle-error test skip

2, 自增主键冲突问题; DM对分库分表合并迁移场景可能出现主键冲突的情况;
    a, 去掉自增主键的主键属性
    b,  使用联合主键

使用限制

  • 数据源版本

    • MySQL Version  > 5.5
    • MariaDB Version >= 10.1.2
  • DDL预发兼容性
    • 目前TiDB部分兼容MySQL DDL;
  • 分库分表
    • 主键冲突问题;
  • 同步MySQL的实例变更;
    • 发生主从切换,导致BINLOG不一致; 需要手动切换;

TiDB Data Migration (DM)介绍相关推荐

  1. oracle中affirm,2.Oracle Data Guard 参数介绍

    Oracle Data Guard 参数介绍 Data Guard作为Oracle提供的一个高可用及灾备解决方案,理解并可以实施它对于DBA来说是非常重要套的技能 上节介绍了有关Data Guard的 ...

  2. 10.8 UiPath 数据筛选Filter Data Table的介绍和使用(Excel数据写入另一个Excel中)

    UiPath数据筛选Filter Data Table的介绍和使用 一.数据筛选(Filter Data Table)的介绍 二.Filter Data Table在UiPath中的使用 ) 一.数据 ...

  3. 5.4UiPath数据抓取Data Scraping的介绍和使用

    UiPath数据抓取Data Scraping的介绍和使用 一.数据抓取(Data Scraping)的介绍 二.Data Scraping在UiPath中的使用 1.打开设计器,在设计库中新建一个S ...

  4. 云数据迁移(Cloud Data Migration,CDM)

    云数据迁移(Cloud Data Migration,CDM) 云数据迁移(Cloud Data Migration,CDM)提供同构/异构数据源之间批量数据迁移服务,帮助客户实现数据自由流动.支持客 ...

  5. MySql 使用 EF Core 2.0 CodeFirst、DbFirst、数据库迁移(Migration)介绍及示例

    dotnet core 2.0 发布已经好几天了,期间也把原来 dotnet core 1.1 的 MVC 项目升级到了 2.0,升级过程还是比较顺利的,变动也不是太多.升级的过程中也少不了 Enti ...

  6. migration mysql_MySql 使用 EF Core 2.0 CodeFirst、DbFirst、数据库迁移(Migration)介绍及示例...

    dotnet core 2.0 发布已经好几天了,期间也把原来 dotnet core 1.1 的 MVC 项目升级到了 2.0,升级过程还是比较顺利的,变动也不是太多.升级的过程中也少不了 Enti ...

  7. Linguistic Data Consortium (LDC) 介绍

    1,介绍 Linguistic Data Consortium (LDC) --语言数据协会是由大学,公司和政府研究实验室组成的开放协会.它创建,收集和分发语音和文本数据库.词典以及其他用于语言学研究 ...

  8. nrf5 SDK中 FDS(Flash Data Storage)介绍

    本文档 基于SDK13.1 Fds(Flash Data Storage)模块是sdk中提供的操作flash的模块. 前面介绍过fs(Flash Storage)模块,这个模块也是sdk中提供的操作f ...

  9. Data URI详细介绍

    一.URI介绍 URI(统一资源标识符) 是 uniform resource identifier的缩写,它定义了接受内容的协议以及附带的相关内容,如果附带的相关内容是一个地址,那么此时的 URI ...

  10. Android Data Binding 详细介绍与使用

    构建环境 首先,确保能使用Data Binding,需要下载最新的 Support repository.否则可能报错,如图: 在模块的build.gradle文件中添加dataBinding配置 a ...

最新文章

  1. JAVA数据库应用的一个小例子
  2. 又见yx — 说说IT公司的团队头儿
  3. python常用单词汇总_在.txt文件中找到最常用单词的Python程序必须打印word及其连接...
  4. NYOJ737 石子合并(一)区间动态规划
  5. c语言函数 t啥意思,C语言函数大全(t开头)
  6. day38-数据库应用软件
  7. Java程序员一些常用的日志和其他Linux命令(自用)
  8. Text Processing in Python
  9. 设计模式--单例模式--Java实现
  10. Windows 下的文件被占用问题解决
  11. 天涯明月刀开发_天涯明月刀手游公测上线,斗鱼暗地操作,打造第二个PDD
  12. 开源开放 | OpenKG 更新发布新冠概念、防控和流行病等多个知识图谱
  13. VB 切换到指定的应用程序上
  14. 网络通过mac定位机器_如何设置Mac以充当网络时间机器驱动器
  15. outlook ios日历_如何从Outlook 2013中的日历中删除假期
  16. 北京个人所得税计算方法
  17. matlab加停顿,求高手解释下这段程序,实在是搞不懂了,要死的节奏了。。。。...
  18. 云服务器密码登录异常的解决办法
  19. 标签管理--操作标签
  20. 使目标朝向摄像机,随着摄像机转动

热门文章

  1. 存储文件用 云服务器推荐推荐,云存储服务器推荐
  2. 《腾讯传》三、马化腾与“幸运女神”那些令人脸红的事
  3. Could not load codec 'Lucene54'. Did you forget to add lucene-backward-codecs.jar?
  4. 从1加到100,1到100求和 Python代码实现方法
  5. 人工智能导论期末复习重点
  6. python事件是什么意思_python 回调函数是什么意思
  7. 惠普服务器win10安装系统教程,惠普电脑如何重装系统教程 win10专业版系统安装教程...
  8. 使用esp32-s2模拟实现usb多点触摸
  9. html家庭家谱网页,怎样编写自己小家庭的家谱
  10. LX4056耐高压线性锂电池充电IC(耐压30V,带OVP,带NTC)