【TiDB原理与实战详解】4、DM 迁移和TiCDC数据同步~学不会? 不存在的!

2024-08-30 16:04

本文主要是介绍【TiDB原理与实战详解】4、DM 迁移和TiCDC数据同步~学不会? 不存在的!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

DM工具数据迁移

1、简介
    DM全称TiDB Data Migration , 支持兼容mysql协议的数据库(MySQL、MariaDB、Aurora MySQL),将数据(异步)迁移到TiDB中。支持全量和增量数据传输。可以过滤数据,可以将分库分表的数据合并迁移到TiDB中。

在这里插入图片描述

2、DM集群安装配置

生产最低配置(可扩容)

组件数量
DM-maste3
DM-worker3
Granfana1

在这里插入图片描述

使用一个新的机器

1、TiUP安装

wget https://tiup-mirrors.pingcap.com/install.sh 
sh install.sh 
source .bash_profile# 升级到最新版本
tiup update --self

2、安装DM并更新

tiup install dm dmctl  && tiup update  dm dmctl

3、编辑配置文件

# 生成MD配置模版
tiup dm  template >dm.yaml# 创建配置目录
mkdir /data/tidb/dm/deploy -p
mkdir /data/tidb/dm/date -p# 修改配置文件
vim  dm.yaml
global:user: "tidb"ssh_port: 22deploy_dir: "/data/tidb/dm/deploy"data_dir: "/data/tidb/dm/data"# arch: "amd64"master_servers:- host: 10.10.8.106worker_servers:- host: 10.10.8.106

4、部署启动DM

# 查看dm版本
tiup list dm-master# 指定版本安装DM集群并启动
tiup dm deploy dm-test  v5.5.0-nightly-20220107  /root/dm.yaml --user root -p  # ssh的root密码,dm-test为集群名称# 启动DM集群
tiup dm start dm-test# 查看DM集群信息
tiup  dm list# 查看dm-test集群详细信息
tiup  dm  display dm-test

5、缩容节点

tiup dm scale-in <cluster-name> -N <node-id>
3、DM 同步任务管理

在这里插入图片描述

需求:

使用10.10.8.106上的DM工具将10.10.8.50上的mysql实例的test库中的t1表同步到10.10.8.107中。

创建数据源(上游需要同步的数据库)

# 创建dm配置文件目录
mkdir -p /root/dmconf# 编辑配置文件
vim /root/dmconf/source1.yaml
# MySQL1 配置信息source-id: "mysql-replica-01"# DM-worker 是否使用全局事务标识符 (GTID) 拉取 binlog。使用前提是在上游 MySQL 已开启 GTID 模式true或false。
enable-gtid: truefrom:host: "10.10.8.50"user: "dba"password: "Passw0rd@!QAZ"port: 3306

将数据源加载到DM集群

tiup dmctl --master-addr 10.10.8.106:8261 operate-source create /root/dmconf/source3.yaml

编辑任务文件

vim /root/dmconf/task.yaml
# 任务名,多个同时运行的任务不能重名。
name: "test"
# 全量+增量 (all) 迁移模式。
task-mode: "all"
# 下游 TiDB 配置信息。
target-database:host: "10.10.8.107"port: 4000user: "dba"password: "tkamc.00"# 当前数据迁移任务需要的全部上游 MySQL 实例配置。
mysql-instances:
-# 上游实例或者复制组 ID,参考 `inventory.ini` 的 `source_id` 或者 `dm-master.toml` 的 `source-id 配置`。source-id: "mysql-replica-01"# 需要迁移的库名或表名的黑白名单的配置项名称,用于引用全局的黑白名单配置,全局配置见下面的 `block-allow-list` 的配置。block-allow-list: "global"          # 如果 DM 版本早于 v2.0.0-beta.2 则使用 black-white-list。# dump 处理单元的配置项名称,用于引用全局的 dump 处理单元配置。mydumper-config-name: "global"# 黑白名单全局配置,各实例通过配置项名引用。
block-allow-list:                     # 如果 DM 版本早于 v2.0.0-beta.2 则使用 black-white-list。global:do-tables:                        # 需要迁移的上游表的白名单。- db-name: "test"              # 需要迁移的表的库名。tbl-name: "t1"          # 需要迁移的表的名称。# dump 处理单元全局配置,各实例通过配置项名引用。
mydumpers:global:extra-args: ""

启动任务

tiup dmctl --master-addr 10.10.8.106:8261 start-task /root/dmconf/task.yaml

查询任务

tiup dmctl --master-addr 10.10.8.106:8261 query-status

停止任务

tiup dmctl --master-addr 10.10.8.106:8261 stop-task test

TiCDC 数据同步工具

1、简介

TiCDC是一个通过拉取TiKV日志实现的TiDB增量同步工具,具有还原数据到与上游任意 TSO 一致状态的能力,同时提供开放数据协议,支持其他系统订阅数据变更。TiCDC 运行时是无状态的,借助 PD 内部的 etcd 实现高可用。TiCDC 集群支持创建多个同步任务,向多个不同的下游进行数据同步,TiCDC的数据源必须是TiDB。

  • 数据高可用:TiCDC 从 TiKV 获取变更日志,意味着只要 TiKV 具备高可用就能保证数据的高可用,遇到 TiCDC 全部异常关闭的极端情况,后续启动还能正常获取数据。
  • 水平扩展:支持组建多 TiCDC 节点集群,将同步任务均匀地调度到不同节点上,面对海量数据时,可以通过添加节点解决同步压力过大的问题。
  • 自动故障转移:当集群中的一个 TiCDC 节点意外退出时,该节点上的同步任务会自动调度到其余的 TiCDC 节点上。
  • 支持多种下游系统和输出多种格式:目前已经支持兼容 MySQL 协议的数据库、Kafka 和 Pulsar 分布式流处理系统,支持输出的格式有 Apache Avro,Maxwell 和 Canal
1、属于增量同步,不会同步以前的数据,只同步开启同步后的数据。
2、只能同步带主键自增的表,想同步所有需要配置参数。
3、如果源端有库名而被同步端无库名或表名,需要在被同步端创建库名或表名。
2、部署TiCDC

编写配置文件(官方建议最少两台服务器)

vim scale-out.yaml 
cdc_servers:- host: 10.10.8.143gc-ttl: 86400data_dir: /data/deploy/install/data/cdc-8300

运行扩容命令

tiup cluster scale-out test scale-out.yaml  # test为集群名

查看集群状态

tiup cluster display test

缩容节点

tiup cluster scale-in test --node 10.10.8.143:8300 # 删除
tiup cluster display test

升级到5.2.2

tiup update --self && \
tiup update --all && \
tiup cluster upgrade test v5.2.2

修改配置并生效

tiup cluster edit-config test # 进入编辑界面编辑server_configs:里的cdc 编辑完成后保存
# 修改完毕后执行 tiup cluster reload -R cdc 命令重新加载配置。
3、使用TiCDC

查询TiCDC信息

tiup ctl:v5.3.0 cdc capture list  --pd=http://10.10.8.107:2379
[{"id": "8f847f99-d56f-44a0-b28a-d9ed81c30f64","is-owner": true,"address": "10.10.8.143:8300"}
]
id: 服务进程的 ID。
is-owner: 表示该服务进程是否为 owner 节点。
address: 该服务进程对外提供接口的地址。

配置mysql时区兼容

find /  -name 'mysql_tzinfo_to_sql' # 查找文件路径
/usr/bin/mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql -p # 导入到数据库

创建同步任务

tiup ctl:v5.3.0 cdc changefeed create --pd=http://10.10.8.107:2379 --sink-uri="mysql://dba:Passw0rd@10.10.8.143:3306/" --changefeed-id="simple-replication-task" --sort-engine="unified"

查询同步任务列表

tiup ctl:v5.3.0 cdc changefeed list  --pd=http://10.10.8.107:2379checkpoint 即为 TiCDC 已经将该时间点前的数据同步到了下游。
state 为该同步任务的状态:
normal: 正常同步
stopped: 停止同步(手动暂停)
error: 停止同步(出错)
removed: 已删除任务(只在指定 --all 选项时才会显示该状态的任务。未指定时,可通过 query 查询该状态的任务)
finished: 任务已经同步到指定 target-ts,处于已完成状态(只在指定 --all 选项时才会显示该状态的任务。未指定时,可通过 query 查询该状态的任务)。

查看指定任务的详细信息

tiup ctl:v5.3.0 cdc changefeed query --pd=http://10.10.8.107:2379  --changefeed-id="simple-replication-task" 

暂停指定任务

tiup ctl:v5.3.0 cdc changefeed pause --pd=http://10.10.8.107:2379  --changefeed-id="simple-replication-task" 

继续暂停的任务

tiup ctl:v5.3.0 cdc changefeed resume   --pd=http://10.10.8.107:2379  --changefeed-id="simple-replication-task"

删除指定任务

tiup ctl:v5.3.0 cdc changefeed remove --pd=http://10.10.8.107:2379  --changefeed-id="simple-replication-task" 
4、环形同步(实验特性)

环形同步功能支持在多个独立的 TiDB 集群间同步数据。比如有三个 TiDB 集群 A、B 和 C,它们都有一个数据表 test.user_data,并且各自对它有数据写入。环形同步功能可以将 A、B 和 C 对 test.user_data 的写入同步其它集群上,使三个集群上的 test.user_data 达到最终一致。

5、同步没有有效索引的表

从 v4.0.8 开始,TiCDC 支持通过修改任务配置来同步没有有效索引的表。若要开启该特性,需要在 changefeed 配置文件的根级别进行如下指定:

vim  changefeed.toml  # 需要指定配置文件启动任务
enable-old-value = true
force-replicate = true
6、使用同步任务配置文件

示例配置

vim  changefeed.toml
# 指定配置文件中涉及的库名、表名是否为大小写敏感
# 该配置会同时影响 filter 和 sink 相关配置,默认为 true
case-sensitive = true# 是否输出 old value,从 v4.0.5 开始支持,从 v5.0 开始默认为 true
enable-old-value = true# 复制没有主键自增的表
force-replicate = true# 过滤参数配置
[filter]
# 忽略指定 start_ts 的事务
ignore-txn-start-ts = [1, 2]# 过滤器规则
# 过滤规则语法:https://docs.pingcap.com/zh/tidb/stable/table-filter#表库过滤语法
rules = ['*.*', '!test.*'][mounter]
# mounter 线程数,用于解码 TiKV 输出的数据
worker-num = 16[sink]
# 对于 MQ 类的 Sink,可以通过 dispatchers 配置 event 分发器
# 支持 default、ts、rowid、table 四种分发器,分发规则如下:
# - default:有多个唯一索引(包括主键)时按照 table 模式分发;只有一个唯一索引(或主键)按照 rowid 模式分发;如果开启了 old value 特性,按照 table 分发
# - ts:以行变更的 commitTs 做 Hash 计算并进行 event 分发
# - rowid:以表的主键或者唯一索引列名和列值做 Hash 计算并进行 event 分发
# - table:以表的 schema 名和 table 名做 Hash 计算并进行 event 分发
# matcher 的匹配语法和过滤器规则语法相同
dispatchers = [{matcher = ['test1.*', 'test2.*'], dispatcher = "ts"},{matcher = ['test3.*', 'test4.*'], dispatcher = "rowid"},
]
# 对于 MQ 类的 Sink,可以指定消息的协议格式
# 目前支持 default、canal、avro 和 maxwell 四种协议。default 为 TiCDC Open Protocol
protocol = "default"[cyclic-replication]
# 是否开启环形同步
enable = false
# 当前 TiCDC 的复制 ID
replica-id = 1
# 需要过滤掉的同步 ID
filter-replica-ids = [2,3]
# 是否同步 DDL
sync-ddl = true

编写配置文件

vim  changefeed.toml
# 指定配置文件中涉及的库名、表名是否为大小写敏感
# 该配置会同时影响 filter 和 sink 相关配置,默认为 true
case-sensitive = true# 是否输出 old value,从 v4.0.5 开始支持,从 v5.0 开始默认为 true
enable-old-value = true# 复制没有主键自增的表
force-replicate = true# 过滤参数配置
[filter]
# 忽略指定 start_ts 的事务
ignore-txn-start-ts = [1, 2]# 过滤器规则
# 过滤规则语法:https://docs.pingcap.com/zh/tidb/stable/table-filter#表库过滤语法
rules = ['*.*', '!test.*'][mounter]
# mounter 线程数,用于解码 TiKV 输出的数据
worker-num = 32[cyclic-replication]
# 是否开启环形同步
enable = false
# 当前 TiCDC 的复制 ID
replica-id = 1
# 需要过滤掉的同步 ID
filter-replica-ids = [2,3]
# 是否同步 DDL
sync-ddl = true

指定配置文件开启任务

tiup ctl:v5.3.0 cdc changefeed create --pd=http://10.10.8.107:2379 --sink-uri="mysql://dba:Passw0rd@10.10.8.143:3306/" --changefeed-id="mysql-test1" --sort-engine="unified"  --config changefeed.toml

查看任务列表

tiup ctl:v5.3.0 cdc changefeed list  --pd=http://10.10.8.107:2379

其他操作同上

7、子任务管理

查询所有子任务信息

tiup ctl:v5.3.0 cdc processor list  --pd=http://10.10.8.107:2379

指定capture-id查询

tiup ctl:v5.3.0 cdc  processor query --pd=http://10.10.8.107:2379   --changefeed-id=mysql-test1   --capture-id=8f847f99-d56f-44a0-b28a-d9ed81c30f64

这篇关于【TiDB原理与实战详解】4、DM 迁移和TiCDC数据同步~学不会? 不存在的!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1121278

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置