写点什么

TiDB 实例间数据同步之 TiCDC 实践

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

    阅读完需:约 5 分钟

作者: huran_tidb 原文来源:https://tidb.net/blog/4e1bfc88


随着公司业务发展,业务数据与日俱增,数据库的存储容量以及可扩展性都面临挑战,TiDB 产品的引入可以帮助业务解决海量数据存储以及横向扩容的问题,但是由于公司业务具备一定的复杂性,核心的业务系统需要为下游提供相应的业务数据,这便会增加核心业务系统的数据库请求压力,为了解决这一问题,需要将核心业务的 TiDB 实例数据同步至另外一个 TiDB 业务实例以供下游进行访问和部分报表数据的输出。


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


TiCDC 的系统架构如下图所示:



TiCDC 可以支持将增量数据同步至下游的 TiDB 实例,但是需要先对要同步的数据进行初始化,针对需要初始化的数据量级采取不同的方式进行数据同步操作,具体实现如下:


  1. 轻量级数据同步


实现方式:dumpling+lightning+ticdc


方案优点: 不需要额外存储资源,操作方便


具体步骤如下:


  1. 如果 tikv_gc_life_time 值设置较小,先调整该值,此次操作将其调整为 8h

  2. 执行 dumpling 对源端 tidb 实例需要同步的表进行初始数据导出,具体命令如下:


./dumpling -u dbadmin -p’abcd1234’ -P 4000 -h 10.xx.xx.xxx –filetype sql -t 8 -o /data/backup/test_20210708 -r 200000 -F 256MiB -T test.test01,test.test02


  1. 执行 lightning 进行数据导入,配置文件和操作命令如下:


编辑配置文件 (遵照官方文档),vi tidb-lightning.toml



nohup ./tidb-lightning -config tidb-lightning.toml > nohup.out &


  1. 查看 dumpling 时对应的 ts 信息



  1. 创建 ticdc 的任务,指定导出数据时候的 ts


./cdc cli changefeed create –pd=http://10.xx.xx.xxx:2379 –sink-uri=“tidb://dbadmin:abcd1234\@10.xxx.xxx.xxx:4000/?max-txn-row=500” –changefeed-id=“simple-replication-task” –sort-engine=“unified” –start-ts=“426171672655036419” –config=changefeed_tidb.toml


  1. 查看任务状态是否正常,命令如下:


/data/cdc-8300/bin/cdc cli changefeed query -s –pd=http://10.xx.xx.xxx:2379 –changefeed-id=simple-replication-task



  1. 重量级数据同步


实现方式:br+ticdc


方案优点: 数据量大时初始数据较快,操作简单


具体步骤如下:


1) 如果 tikv_gc_life_time 值设置较小,先调整该值,此次操作将其调整为 8h


2) 先在源端创建测试表,并插入数据



3) 执行 br 公户对源端 tidb 实例对应的数据库进行备份 (需要备份至 NFS),具体命令如下:


br backup db –pd “10.xx.xx.xxx:2379” –db document –storage “local:///nas/br-test-backup” –ratelimit 120 –log-file backuptable.log


4) 以还原备份中表 test01 为例,在目标端 tidb 实例进行还原 (从 NFS 上还原)


bin/br restore table –db document –table test01 -s local:///nas/br-test-backup –pd 10.xx.xxx.xxx:2379 –log-file restore-nfs.log


5) 查看 br 时对应的 ts 信息,存在 br 的 backuptable.log 日志里



6) 创建 ticdc 的任务,指定导出数据时候的 ts


cdc cli changefeed create –pd=http://10.xx.xx.xxx:2379 –sink-uri=“tidb://dbadmin:abcd1234\@10.xx.xx.xx:4000/?worker-count=16&max-txn-row=5000” –start-ts=426420211581976577 –changefeed-id=“simple-replication-task” –sort-engine=“unified” –config changefeed.toml


7) 数据同步验证,在源端插入一条数据



8) 在目标的 tidb 实例中查询



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

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

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

评论

发布
暂无评论
TiDB实例间数据同步之TiCDC实践_实践案例_TiDB 社区干货传送门_InfoQ写作社区