TiDB Data Migration (DM)介绍
DM是一体化的迁移任务管理工具, 支持从与MySQL协议兼容的数据库到TiDB数据库的迁移,支持全量载入和增量的数据传输,同时可以进行表和操作的过滤,并且可以进行分库分表的合并迁移;
DM架构
dmctl: 用来控制DM集群的命令工具;
- 用户通过dmctl进行创建、更新、删除任务;
- 查看迁移任务的工作状态;
- 处理迁移任务过程中发生的错误
DM-master负责管理和调度数据迁移任务的各项操作;
- 保存整个DM的拓扑信息
- 负责DM高可用
- 监控各个节点的运行状态
- 协调整个迁移任务
DM-worker负责执行具体的数据迁移任务;
- 负责读取mysql里面的数据;
- 负责读取BINLOG,保存到本地,进行编排;
- 将编排后的BINLOG 发送给TiDB Cluster
- 一个DM-worker只能对应一个MySQL源端
- 多余的DM-worker将会保持空闲状态;
适用场景:
- 从兼容MySQL的数据库迁移同步数据;
- 源库和目标库异构表的迁移
- 分库分表的合并迁移;
部署
安装: 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)介绍相关推荐
- oracle中affirm,2.Oracle Data Guard 参数介绍
Oracle Data Guard 参数介绍 Data Guard作为Oracle提供的一个高可用及灾备解决方案,理解并可以实施它对于DBA来说是非常重要套的技能 上节介绍了有关Data Guard的 ...
- 10.8 UiPath 数据筛选Filter Data Table的介绍和使用(Excel数据写入另一个Excel中)
UiPath数据筛选Filter Data Table的介绍和使用 一.数据筛选(Filter Data Table)的介绍 二.Filter Data Table在UiPath中的使用 ) 一.数据 ...
- 5.4UiPath数据抓取Data Scraping的介绍和使用
UiPath数据抓取Data Scraping的介绍和使用 一.数据抓取(Data Scraping)的介绍 二.Data Scraping在UiPath中的使用 1.打开设计器,在设计库中新建一个S ...
- 云数据迁移(Cloud Data Migration,CDM)
云数据迁移(Cloud Data Migration,CDM) 云数据迁移(Cloud Data Migration,CDM)提供同构/异构数据源之间批量数据迁移服务,帮助客户实现数据自由流动.支持客 ...
- MySql 使用 EF Core 2.0 CodeFirst、DbFirst、数据库迁移(Migration)介绍及示例
dotnet core 2.0 发布已经好几天了,期间也把原来 dotnet core 1.1 的 MVC 项目升级到了 2.0,升级过程还是比较顺利的,变动也不是太多.升级的过程中也少不了 Enti ...
- migration mysql_MySql 使用 EF Core 2.0 CodeFirst、DbFirst、数据库迁移(Migration)介绍及示例...
dotnet core 2.0 发布已经好几天了,期间也把原来 dotnet core 1.1 的 MVC 项目升级到了 2.0,升级过程还是比较顺利的,变动也不是太多.升级的过程中也少不了 Enti ...
- Linguistic Data Consortium (LDC) 介绍
1,介绍 Linguistic Data Consortium (LDC) --语言数据协会是由大学,公司和政府研究实验室组成的开放协会.它创建,收集和分发语音和文本数据库.词典以及其他用于语言学研究 ...
- nrf5 SDK中 FDS(Flash Data Storage)介绍
本文档 基于SDK13.1 Fds(Flash Data Storage)模块是sdk中提供的操作flash的模块. 前面介绍过fs(Flash Storage)模块,这个模块也是sdk中提供的操作f ...
- Data URI详细介绍
一.URI介绍 URI(统一资源标识符) 是 uniform resource identifier的缩写,它定义了接受内容的协议以及附带的相关内容,如果附带的相关内容是一个地址,那么此时的 URI ...
- Android Data Binding 详细介绍与使用
构建环境 首先,确保能使用Data Binding,需要下载最新的 Support repository.否则可能报错,如图: 在模块的build.gradle文件中添加dataBinding配置 a ...
最新文章
- JAVA数据库应用的一个小例子
- 又见yx — 说说IT公司的团队头儿
- python常用单词汇总_在.txt文件中找到最常用单词的Python程序必须打印word及其连接...
- NYOJ737 石子合并(一)区间动态规划
- c语言函数 t啥意思,C语言函数大全(t开头)
- day38-数据库应用软件
- Java程序员一些常用的日志和其他Linux命令(自用)
- Text Processing in Python
- 设计模式--单例模式--Java实现
- Windows 下的文件被占用问题解决
- 天涯明月刀开发_天涯明月刀手游公测上线,斗鱼暗地操作,打造第二个PDD
- 开源开放 | OpenKG 更新发布新冠概念、防控和流行病等多个知识图谱
- VB 切换到指定的应用程序上
- 网络通过mac定位机器_如何设置Mac以充当网络时间机器驱动器
- outlook ios日历_如何从Outlook 2013中的日历中删除假期
- 北京个人所得税计算方法
- matlab加停顿,求高手解释下这段程序,实在是搞不懂了,要死的节奏了。。。。...
- 云服务器密码登录异常的解决办法
- 标签管理--操作标签
- 使目标朝向摄像机,随着摄像机转动
热门文章
- 存储文件用 云服务器推荐推荐,云存储服务器推荐
- 《腾讯传》三、马化腾与“幸运女神”那些令人脸红的事
- Could not load codec 'Lucene54'. Did you forget to add lucene-backward-codecs.jar?
- 从1加到100,1到100求和 Python代码实现方法
- 人工智能导论期末复习重点
- python事件是什么意思_python 回调函数是什么意思
- 惠普服务器win10安装系统教程,惠普电脑如何重装系统教程 win10专业版系统安装教程...
- 使用esp32-s2模拟实现usb多点触摸
- html家庭家谱网页,怎样编写自己小家庭的家谱
- LX4056耐高压线性锂电池充电IC(耐压30V,带OVP,带NTC)