写点什么

体验 TiDB v6.0.0 之 TiCDC

  • 2022 年 7 月 11 日
  • 本文字数:2348 字

    阅读完需:约 8 分钟

作者: 边城元元原文来源:https://tidb.net/blog/54af3eb4

体验 TiDB v6.0.0 之 TiCDC

一、背景

TiDBv6.0.0 发布具有特殊的意义,顺便体验一把 TiCDC。


接上篇从 Mysql3306 通过 DM 迁移数据到 TiDB 集群中 test_dm_all 数据库(全量 + 增量数据同步),本次体验是从 TiDB 集群的 test_dm_all 数据库通过 TiCDC 同步到 Mysql 主从集群。

二、基本知识

TiCDC 是一款 TiDB 增量数据同步工具,通过拉取上游 TiKV 的数据变更日志,TiCDC 可以将数据解析为有序的行级变更数据输出到下游。

2.1 TiCDC 适用场景:

  • 数据库灾备:TiCDC 可以用于同构数据库之间的灾备场景,能够在灾难发生时保证主备集群数据的最终一致性,目前该场景仅支持 TiDB 作为主备集群。

  • 数据集成:TiCDC 提供 TiCDC Canal-JSON Protocol,支持其他系统订阅数据变更,能够为监控、缓存、全文索引、数据分析、异构数据库的主从复制等场景提供数据源。

2.2 组件

  • TiKV CDC 组件:只输出 key-value (KV) change log。

  • 内部逻辑拼装 KV change log。

  • 提供输出 KV change log 的接口,发送数据包括实时 change log 和增量扫的 change log。

  • TiCDC 集群 多个 capture 组成一个 TiCDC 集群,负责 KV change log 的同步。

  • 每个 capture 负责拉取一部分 KV change log。

  • 对拉取的一个或多个 KV change log 进行排序。

  • 向下游还原事务或按照 TiCDC Open Protocol 进行输出。


三、环境准备


本示例演示 TiDB-(TiCDC)->Mysql 集群

3.1 TiDB 中的 test_dm_all 数据

3.2 Mysql 3307(主库),Mysql 3308(从库)

1、win 下 配置好主库 (mysql3307) my3307.ini 2、复制 mysql3307 目录 为 mysql3308 3、修改 mysql3308 的 my3308.ini

3.2.1 Mysql 配置文件

my3307.ini


#binloglog-bin=mysql-binbinlog-format=ROWserver_id=2binlog_ignore_db=mysqlbinlog_do_db=test_dm_all
复制代码


mysql3308.ini


server_id=3read_only=1replicate-do-db=test_dm_all
复制代码

四、TiCDC 实验

4.1 扩容 TiCDC 节点

4.1.1 编写 scale-out.yaml 文件

cdc_servers:  - host: 10.0.2.15    port: 8300    gc-ttl: 86400    #data_dir: /data/deploy/install/data/cdc-8300
复制代码

4.1.2 执行扩容命令

# 此处使用local_install.sh没有安装# 采用的方式是下载使用tiup  # curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh# 在线安装 ticdctiup cluster scale-out cluster111 scale-out.yaml#离线安装 参考 这种方式通过tiup cluster display 看不到cdc集群的信息cp /usr/local0/webserver/tidb/tidb-community-server-v6.0.0-linux-amd64/cdc /root/.tiup/bin/cdc server --pd=http://10.0.2.15:2379 --log-file=/tidb-data111/ticdc_8301.log --addr=0.0.0.0:8301 --advertise-addr=127.0.0.1:8301 --data-dir=/tidb-data111/cdc-8301 &cdc server --pd=http://10.0.2.15:2379 --log-file=/tidb-data111/ticdc_8302.log --addr=10.0.2.15:8302 --advertise-addr=10.0.2.15:8302 --data-dir=/tidb-data111/cdc-8302 &
复制代码


4.1.3 验证 TiCDC 集群

  cdc cli capture list --pd=http://10.0.2.15:2379   # 因为有8301,8302 两个节点使用的是cdc server方式启动的。
复制代码


4.2 添加任务

4.2.1 启动 mysql3307,mysq3308

mysql3307 执行下面的 sql:


show master status;
复制代码


mysql3308 执行下面 sql:


show slave status;stop slave;CHANGE MASTER TO master_host = '127.0.0.1',     master_user = 'root',     master_password = '23456',     master_log_file = 'mysql-bin.000001',     master_port=3307,     master_log_pos = 154;start slave;
复制代码


mysql3307 到 msql3308 的主从同步测试正常。

4.2.2 创建 TiCDC 任务

cdc cli changefeed create --pd=http://10.0.2.15:2379 --sink-uri="mysql://root:mysql123456@192.168.43.191:3307/?" --changefeed-id="replication-task-1" --sort-engine="unified"# Error: [CDC:ErrMySQLConnectionError]fail to open MySQL connection: Error 1298: Unknown or incorrect time zone: 'UTC'# 这是因为下游 MySQL 没有加载时区,可以通过 mysql_tzinfo_to_sql 命令加载时区,加载后就可以正常创建任务或同步任务。
复制代码



# 查看任务 cdc cli changefeed list --pd=http://10.0.2.15:2379  cdc cli changefeed query --pd=http://10.0.2.15:2379 --changefeed-id=replication-task-1
复制代码

4.2.3 验证 TiDB 数据变更是否同步到下游



4.2.4 追加已经数据表


图上的 1、是在 ticdc 任务开始后,新插入了数据到 m_user 表中,之后再 mysql3307 中追加 m_user 表结构,自动从任务开始后补数据;


图上的 2 和 3,表示原始上游有数据,任务开始后没有做数据变更,在 mysql3307 中追加 m_user_new 也不会补数据。

4.2.5 使用总结

1、下游要建立对等的数据结构


2、TICDC 任务开启后 上游的表在下游不存在,则不同步


3、如果下游追加了表结构则从任务开始时补数据


4、任务开启后的写操作会同步到下游


5、如果下游存在多写入点,会出现数据不一致的情况

五、Clinic 诊断 TiCDC

clinic 没有单独的类似 collectdm 的组件,


tiup diag collect cluster111tiup diag pacakge  /usr/local0/webserver/tidb/tidb-community-server-v6.0.0-linux-amd64/diag-fSC9vxdLWMktiup diag upload  /usr/local0/webserver/tidb/tidb-community-server-v6.0.0-linux-amd64/diag-fSC9vxdLWMk.diag
复制代码



注意:使用 cdc server 方式启动的节点的信息收集不到。

六、总结

本篇文章简单示例了 TiDB 通过 TiCDC 同步数据到下游。TiCDC 的强大之处 TiCDC 开放数据协议,根据 TiCDC 开放数据协议可以同步到下游多种数据媒介。


TiCDC 集群会象 DM 一样也会有对应的 WebUI 可视化界面,很期待 TiCDC 的 WebUI。


谢谢 PingCap,感谢 TiDB 社区!


发布于: 刚刚阅读数: 2
用户头像

TiDB 社区官网:https://tidb.net/ 2021.12.15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
体验TiDB v6.0.0 之TiCDC_实践案例_TiDB 社区干货传送门_InfoQ写作社区