从MySQL同步数据到TiDB

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从MySQL同步数据到TiDB相关的知识,希望对你有一定的参考价值。

参考技术A

vim dm-topology.yaml

根据 不同场景 ,编辑任务配置文件 vim task.yaml ,点击查看 详细配置

1. 出现错误时,需查询任务 query-status 具体信息

2. 其任务 stage 状态为 Paused

3. 解决问题后,可以通过 resume-task 命令进行恢复

TIDB - 使用 TICDC 将数据同步至下游 Mysql 中

一、TICDC

TiCDC 是一款通过拉取 TiKV 变更日志实现的 TiDB 增量数据同步工具,具有将数据还原到与上游任意 TSO 一致状态的能力,同时提供开放数据协议 (TiCDC Open Protocol),支持其他系统订阅数据变更。

和前面学习的Tidb binlog 不同,binlog 是直接取的tidb-server 的日志信息,而TiCDC则是取的 Tikv 的,相比性能更优,但TiCDC 只有数据修改时会触发同步,不包括ddl,所以说使用TICDC,必须保证两端的数据结构一致。

TiCDC 的架构

TiCDC 运行时是一种无状态节点,通过 PD 内部的 etcd 实现高可用。TiCDC 集群支持创建多个同步任务,向多个不同的下游进行数据同步。

二、TICDC 的使用

在使用CDC前,先看下目前的集群架构,不了解的TIDB集群架构的,可以看下本专栏的TIDB系列文章。

tiup cluster display tidb-test


现在我们使用扩容的方式,扩容出一台TICDC:

vi scale-out.yaml

写入以下内容:

cdc_servers:
  - host: 192.168.40.161
    port: 8300

开始扩容:

tiup cluster scale-out tidb-test scale-out.yaml -uroot -p


已经扩容成功,再来看下集群信息:

CDC就已经装好了,下面我们可以通过ctl 工具查看下CDC的部署信息,如果没有ctl工具的话,会自动安装:

tiup ctl:v5.0.0 cdc capture list --pd=http://192.168.40.160:2379


is-owner 为 true 代表当 TiCDC 节点为 owner 节点。

创建同步任务:

tiup cdc cli changefeed create --pd=http://192.168.40.160:2379 --sink-uri="mysql://root:root123@192.168.40.1:3307/" --changefeed-id="replication-task-1" --sort-engine="unified"

如果没有工具的话会下载,如果不想下载,可以去安装CDC的主机上,进入CDC的安装目录的bin下,就有cdc的执行脚本:

直接使用脚本创建任务:

./cdc cli changefeed create --pd=http://192.168.40.160:2379 --sink-uri="mysql://root:root123@192.168.40.1:3307/" --changefeed-id="replication-task-1" --sort-engine="unified"

–sink-uri=“mysql://root:root123@192.168.40.1:3307/” : 目标库(下游)MySQL 数据库的信息
–changefeed-id=“replication-task-1” 数据同步任务 ID
–sort-engine=“unified” :不定义引擎。

出现上面日志,则代表任务创建成功。
使用下面指令可以查看同步任务:

./cdc cli changefeed list --pd=http://192.168.40.160:2379


“state”: “normal” : 表示任务状态正常。
“tso”: 429574071882350593 : 表示同步任务的时间戳信息。
“checkpoint”: “2021-12-05 17:03:57.393” :表示同步任务的时间。

查询任务的详细信息:

./cdc cli changefeed query --pd=http://192.168.40.160:2379 --changefeed-id=replication-task-1

三、测试同步任务

TIDB 和 Mysql中都有testdb 数据库,和user 表:


首先在Tidb中插入一条数据:

insert into user(name,age) value('bxc','25');

然后在mysql 中查询信息:


喜欢的小伙伴可以关注我的个人微信公众号,获取更多学习资料!

以上是关于从MySQL同步数据到TiDB的主要内容,如果未能解决你的问题,请参考以下文章

TIDB - 使用 TICDC 将数据同步至下游 Mysql 中

Flink 最佳实践之使用 Canal 同步 MySQL 数据至 TiDB

Flink 最佳实践之使用 Canal 同步 MySQL 数据至 TiDB

Flink 最佳实践之使用 Canal 同步 MySQL 数据至 TiDB

Flink 最佳实践之使用 Canal 同步 MySQL 数据至 TiDB

单挑kettle/datax,实测免费数据同步工具Tapdata Cloud如何实时同步SQLServer,Oracle,MySQL,PG,MongoDB,达梦,TiDB,ES等异构数据库