TIDB-cdc的初步使用

一、背景

目前想用tidb支撑一个主要的业务,为了安全,需要在后面接一个mysql用来备份,闪回及关键时刻切回的操作

二、操作流程

1.安装ticdc

这一步可以通过部署部署集群的时候安装,也可以后期扩容,这一步比较简单

2.tidb端的操作

因为同步没法找到一个准确的时间点,且主库又无法停业务,所以需要提前复制一部分
2.1 查看tidb的gc配置

# ticdc的start-ts 的值需要大于 TiDB 集群当前的 tikv_gc_safe_point
mysql> select VARIABLE_NAME, VARIABLE_VALUE from mysql.tidb where VARIABLE_NAME like "tikv_gc%";
+--------------------------+------------------------------------------------------------------------------------------------------------------------+
| VARIABLE_NAME            | VARIABLE_VALUE                                                                                                         |
+--------------------------+------------------------------------------------------------------------------------------------------------------------+
| tikv_gc_leader_uuid      | abc3basdas                                                                                                       |
| tikv_gc_leader_desc      | host:123.123, pid:19191, start at 2021-09-10 02:25:35.75321834 +0000 UTC m=+1.129627037 |
| tikv_gc_leader_lease     | 20210914-06:11:35 +0000                                                                                                |
| tikv_gc_enable           | true                                                                                                                   |
| tikv_gc_run_interval     | 10m0s                                                                                                                  |
| tikv_gc_life_time        | 10m0s                                                                                                                  |
| tikv_gc_last_run_time    | 20210914-06:08:35 +0000                                                                                                |
| tikv_gc_safe_point       | 20210914-05:58:35 +0000                                                                                                |
| tikv_gc_auto_concurrency | true                                                                                                                   |
| tikv_gc_mode             | distributed                                                                                                            |
+--------------------------+------------------------------------------------------------------------------------------------------------------------+

2.2 调整gc配置

# 预留足够的时间给cdc同步
update mysql.tidb set VARIABLE_VALUE="24h" where VARIABLE_NAME="tikv_gc_life_time";

2.3 同步数据到下游

3.cdc配置与启动

3.1 创建同步任务

tiup ctl:v4.0.13 cdc changefeed create --pd=http://pd_ip:pd_port --sink-uri="mysql://root:123456@127.0.0.1:3306/" --changefeed-id="simple-replication-task" --start-ts=395181938313123110 --sort-engine="unified" --config=./cdc.conf
# 这里我把start-ts改为一个很小的tso,这样报错里就会给出当前保存点的tso,然后我们把这个tso填写到start-ts上,目前不知道怎么讲时间转换成tso,只能用这种方法了

# --changefeed-id:同步任务的 ID,格式需要符合正则表达式 ^[a-zA-Z0-9]+(\-[a-zA-Z0-9]+)*$。如果不指定该 ID,TiCDC 会自动生成一个 UUID(version 4 格式)作为 ID

# --sink-uri:同步任务下游的地址,需要按照以下格式进行配置,目前 scheme 支持 mysql/tidb/kafka/pulsar

# --start-ts:指定 changefeed 的开始 TSO。TiCDC 集群将从这个 TSO 开始拉取数据。默认为当前时间。

# --target-ts:指定 changefeed 的目标 TSO。TiCDC 集群拉取数据直到这个 TSO 停止。默认为空,即 TiCDC 不会自动停止。

# --sort-engine:指定 changefeed 使用的排序引擎。因 TiDB 和 TiKV 使用分布式架构,TiCDC 需要对数据变更记录进行排序后才能输出。该项支持 unified(默认)/memory/file:

# unified:优先使用内存排序,内存不足时则自动使用硬盘暂存数据。该选项默认开启。
# memory:在内存中进行排序。 不建议使用,同步大量数据时易引发 OOM。
# file:完全使用磁盘暂存数据。已经弃用,不建议在任何情况使用。

# --sort-dir: 指定排序引擎使用的临时文件目录。不建议在 cdc cli changefeed create 中使用该选项,建议在 cdc server 命令中使用该选项来设置临时文件目录。该配置项的默认值为 /tmp/cdc_sort。在开启 Unified Sorter 的情况下,如果服务器的该目录不可写或可用空间不足,请手动指定 sort-dir。如果 sort-dir 对应的目录不可写入,changefeed 将会自动停止。

# --config:指定 changefeed 配置文件

3.2 查看同步列表

tiup ctl:v4.0.13 cdc changefeed list --pd=http://pd_ip:pd_port

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

3.3 查看特定同步任务

tiup ctl:v4.0.13 cdc changefeed query -s --pd=http://pd_ip:pd_port --changefeed-id=simple-replication-task

# --simple 或 -s 参数会简化输出
# state 代表当前 changefeed 的同步状态,各个状态必须和 changefeed list 中的状态相同。
# tso 代表当前 changefeed 中已经成功写入下游的最大事务 TSO。
# checkpoint 代表当前 changefeed 中已经成功写入下游的最大事务 TSO 对应的时间。
# error 记录当前 changefeed 是否有错误发生。

# 非简化输出解释如下:
# info 代表查询 changefeed 的同步配置。
# status 代表查询 changefeed 的同步状态信息。
# 	resolved-ts 代表当前 changefeed 中已经成功从 TiKV 发送到 TiCDC 的最大事务 TS。
# 	checkpoint-ts 代表当前 changefeed 中已经成功写入下游的最大事务 TS。
# 	admin-job-type 代表一个 changefeed 的状态:
#		0: 状态正常。
# 		1: 任务暂停,停止任务后所有同步 processor 会结束退出,同步任务的配置和同步状态都会保留,可以从 checkpoint-ts 恢复任务。
# 		2: 任务恢复,同步任务从 checkpoint-ts 继续同步。
# 		3: 任务已删除,接口请求后会结束所有同步 processor,并清理同步任务配置信息。同步状态保留,只提供查询,没有其他实际功能。
# task-status 代表查询 changefeed 所分配的各个同步子任务的状态信息。

3.4 停止同步任务

tiup ctl:v4.0.13 cdc changefeed pause --pd=http://10.0.10.25:2379 --changefeed-id simple-replication-task

3.5 恢复同步任务

tiup ctl:v4.0.13 cdc changefeed resume --pd=http://10.0.10.25:2379 --changefeed-id simple-replication-task

3.6 删除同任务

tiup ctl:v4.0.13 cdc changefeed remove --pd=http://10.0.10.25:2379 --changefeed-id simple-replication-task --force

3.7 更新同步任务

tiup ctl:v4.0.13 cdc changefeed pause -c test-cf --pd=http://pd_ip:pd_port
tiup ctl:v4.0.13 cdc changefeed update -c test-cf --pd=http://pd_ip:pd_port --sink-uri="mysql://127.0.0.1:3306/?max-txn-row=20&worker-number=8" --config=changefeed.toml
tiup ctl:v4.0.13 cdc changefeed resume -c test-cf --pd=http://pd_ip:pd_port


# TiCDC 从 v4.0.4 开始支持非动态修改同步任务配置,修改 changefeed 配置需要按照 暂停任务 -> 修改配置 -> 恢复任务 的流程。
# 当前支持修改的配置包括:

# changefeed 的 sink-uri
# changefeed 配置文件及文件内所有配置
# changefeed 是否使用文件排序和排序目录
# changefeed 的 target-ts

3.8 配置文件概览

# 指定配置文件中涉及的库名、表名是否为大小写敏感
# 该配置会同时影响 filter 和 sink 相关配置,默认为 true
case-sensitive = true

# 是否输出 old value,从 v4.0.5 开始支持
enable-old-value = false

[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:以所选的 HandleKey 列名和列值做 Hash 计算并进行 event 分发
# - table:以表的 schema 名和 table 名做 Hash 计算并进行 event 分发
# matcher 的匹配语法和过滤器规则语法相同
# 根据hash算法分发到不同的partition中,6.1开始支持partition和topic两种分发器
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

ps: 使用cdc要将tiup升级到新版本,不然可能会有问题
官网地址: https://docs.pingcap.com/zh/tidb/v4.0/manage-ticdc

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值