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

news2024/11/17 15:51:22

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: 22
  deploy_dir: "/data/tidb/dm/deploy"
  data_dir: "/data/tidb/dm/data"
  # arch: "amd64"

master_servers:
  - host: 10.10.8.106

worker_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: true

from:
  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: 4000
  user: "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.143
    gc-ttl: 86400
    data_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:2379

checkpoint 即为 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2087921.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JVM原理】类加载机制

文章目录 一、JVM组成二、类的生命周期2-1 加载 (Loading)2-2 连接 (Linking)2-3 初始化 (Initialization)2-4 使用 (Using)2-5 卸载 (Unloading) 三、类加载器3-1 类加载器的作用3-2 类加载器的种类3-3 类加载机制双亲委派机制&#xff08;Parent Delegation Model&#xff09…

分享林曦老师的苏东坡入门阅读清单

大家暑假过得还愉快嘛假期前暄桐的课程刚好进行到六阶“见道明心的笔墨”书法部分《赤壁赋》的学习&#xff0c;也为暑假提供些新的乐趣&#xff0c;林曦老师十分贴心地送给大家一份苏东坡阅读入门清单&#xff0c;每本书有不同的侧重点。祝大家读书开心&#xff0c;有满满的收…

某张卡NR only下可以驻网 AUTO模式下在2G/3G工作

结论:需要终端设置为data centric&#xff0c;或ps only。 从日志看&#xff0c;5G下的注册收到REGISTRATION ACCEPT。但是没有携带ims support。 正常网络&#xff1a; ims_Vops_3GPP 1 (0x1) nwk_feature_supp_inc 1 (0x1)nwk_feature_supportedlength 2 (0x2)mpsi 0 (0…

JVM中篇:字节码与类的加载篇-03-类的加载过程(类的生命周期)详解

笔记来源&#xff1a;尚硅谷 JVM 全套教程&#xff0c;百万播放&#xff0c;全网巅峰&#xff08;宋红康详解 java 虚拟机&#xff09; 文章目录 1. 概述大厂面试题 2. 过程一&#xff1a;Loading&#xff08;加载&#xff09;阶段2.1. 加载完成的操作2.2. 二进制流的获取方式2…

设置文本的颜色

AndroidManifest.xml <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"><applicationandroid:allowBackup"true"android:icon"mipmap/ic_launcher…

如何使用查询路由构建更先进的 RAG

前言 目前大部分RAG的实践方案都是通过检索模型从外部数据库中获取与输入相关的文档或信息&#xff1b;然后&#xff0c;将这些信息与输入结合&#xff0c;输入到生成模型中进行文本生成。这种方案往往会有一个问题就是所有的数据都存储在一起&#xff0c;但这往往是没法在生产…

PCB寄生电容的影响,计算方法和消除措施

什么是PCB寄生电容&#xff1f; 寄生电容是存在于由绝缘体隔开的两个导电结构之间的虚拟电容&#xff0c;是PCB布局中的一种效应&#xff0c;其传播的信号表现为电容&#xff0c;但并不是真正意义上的电容。 寄生电容有什么影响&#xff1f; 在高速或高频电路板中&#xff0c…

Java云端联动触手可及高端台球助教教练多端系统小程序源码

&#x1f3b1;云端联动&#xff0c;触手可及&#xff01;高端台球助教教练多端系统&#xff0c;你的私人球技加速器&#x1f680; &#x1f308; 开篇&#xff1a;遇见台球新纪元 在这个科技日新月异的时代&#xff0c;台球这项优雅的运动也迎来了它的智能升级&#xff01;&am…

【机器学习】支持向量机(SVM)的基本概念、如何选择向量机(SVM)的参数以及在python中使用向量机的实例

引言 支持向量机&#xff08;SVM&#xff09;是一种在机器学习中广泛应用的二分类模型。它的核心思想是寻找一个最优的超平面&#xff0c;将不同类别的样本分隔开来。这个过程涉及到最大化间隔&#xff0c;即找到那些最接近分隔超平面的样本点&#xff0c;这些点被称为支持向量…

3秒AI写真出图,Stable Diffusion2024升级版+使用教程来了!(无需安装,解压即用

前言 要说今年摄影圈最大的新秀 那妥妥的就Stable Diffusion 比如下面的写真照片 你敢信这是SD绘画生成的&#xff1f; 本次教程将使用AI绘画工具 Stable Diffusion 进行讲解&#xff0c;如还未安装SD的小伙伴可以扫描免费获取哦~ 就在刚刚它又全面升级了 新版无需安装&a…

插入移动硬盘后【提示需要格式化】,如何修复?

遇到格式化问题&#xff0c;又想要找回数据&#xff0c;怎么办&#xff1f; 我们只需要一个数据恢复软件就能解决所有数据丢失问题 1、转转大师数据恢复 点击直达链接>>https://www.huifuzhinan.com 恢复数据类型超全面的一个软件&#xff0c;包括但不限于以下几种&…

Python开发者必备利器之Gooey使用详解

概要 在Python开发中,命令行程序是一种常见的方式来与用户交互,但有时候用户更喜欢使用图形界面来操作程序。 为了实现这一转变,我们可以使用非标准模块Gooey,它可以帮助我们将命令行程序快速转换为具有图形用户界面(GUI)的应用程序。 本文将介绍Gooey的基本概念、使用…

矩阵分析 学习笔记2 线性子空间 线性映射

子空间是啥&#xff1a; 平凡子空间&#xff1a;{0}&#xff08;只有一个0元素&#xff09;和V&#xff08;原本的子空间&#xff09; 向量组生成的子空间&#xff1a; 比如说&#xff0c;我们的三维空间就是由三个标准基组成的向量组“张”成的空间&#xff0c;而标准基组成的…

基于Pytorch框架的深度学习DeepLabv3+网络头发语义分割系统源码

第一步&#xff1a;准备数据 头发分割数据&#xff0c;总共有1050张图片&#xff0c;里面的像素值为0和1&#xff0c;所以看起来全部是黑的&#xff0c;不影响使用 第二步&#xff1a;搭建模型 DeepLabV3的网络结构如下图所示&#xff0c;主要为Encoder-Decoder结构。其中&am…

深度学习基础--模型拟合

模型拟合 损失与网络参数有关&#xff0c;本章着重于探讨如何确定能使损失最小化的参数值。这个过程称为网络参数的学习&#xff0c;或更通俗地说&#xff0c;是模型的训练或拟合。该过程首先是选取一组初始参数值&#xff0c;随后重复执行两个步骤&#xff1a; (i) 计算损失…

张驰咨询:新界泵业六西格玛设计DFSS项目出成果

近日&#xff0c;新界泵业六西格玛设计项目通过专家评审&#xff0c;新界泵业石总等领导、六西格玛设计项目组成员、张驰咨询首席顾问张驰、首席六西格设计顾问赵老师共同出席项目评审会。 &#xff08;顾问老师致辞&#xff09; 本期项目涉及多款新产品开发&#xff0c;本期…

Java新手零基础教程!Java 异常详解.^◡^.

Java 异常 Java教程 - Java异常 异常是在运行时在代码序列中出现的异常状况。例如&#xff0c;读取一个不存在的文件。 Java异常是描述异常条件的对象发生在一段代码中。 关键词 Java异常处理通过五个关键字管理: try&#xff0c;catch&#xff0c;throw&#xff0c;throws…

优思学院|质量工程师常用英语【客户投诉篇】

作为质量工程师&#xff0c;你是否曾因国外客户的投诉而不知如何用英语回应&#xff0c;感到困扰&#xff1f; 质量工程师常常面对各种挑战。即使你解决问题的能力很强&#xff0c;但由于不熟悉使用英语&#xff0c;可能会影响客户对你的印象和信任。 接下来&#xff0c;让我…

C#面试题系列--动态更新

C#面试题系列 排版排了半天&#xff0c;也是不好看&#xff0c;那就不排版了&#xff0c;尽量由易到难 高级一些 什么是MVC模式C#中特性是什么&#xff1f;如何使用&#xff1f;C#中什么是反射?C#中的委托是什么 事件是不是一种委托C# 不安全代码C# 隐式类型 varC# linqC# 匿名…

在centos中安装 --nmon性能系统监控工具

参考资料 CentOS安装nmon-CSDN博客 Jmeter(十九)&#xff1a;nmon性能系统监控工具_jmeter nmon(1)_jmeter nmon性能系统监控工具详解-CSDN博客 Linux性能监控命令_nmon 安装与使用_nmon安装方法linux-CSDN博客 资源监控工具nmon安装及使用 – TestGo 下载启宏插件 https…