一、概述
测试由tidb V7.1.1实时同步到mysql V8.0的同步架构。测试内容大概包括
1、TICDC的部署
2、tidb源端数据库导出,导入到mysql目标端。
3、创建changefeed任务,开通同步。
关于ticdc内容请参考官方文档===>官方文档传送门
二、ticdc部署
1、准备ticdc镜像
ticdc安装的介质在 tidb-community-toolkit-v7.1.1-linux-amd64.tar.gz包中,为了不来回切换mirror配置,我进行了对toolkit与server的镜像进行合并。可以参考我以往文章tiup 合并镜像报错
2、扩容节点
可以选择其他多个节点进行部署,本次测试我只部署了一个节点。编写cdc.yml,根据实际部署的IP,部署的路径进行配置,
cdc_servers:
- host: 172.16.1.1
gc-ttl: 86400
data_dir: "/app/cdc-data"
- host: 172.16.1.2
gc-ttl: 86400
data_dir: "/app/cdc-data"
进行部署
tiup cluster scale-out tidb-test cdc.yml --user xxxx -p
部署完成后,可以查看进程状态
tiup cluster display tidb-test -R cdc
三、导出、导入数据
1、导出数据
导出工具可以选择dumpling和mysqldump
第一种 使用mysqldump
在源库tidb使用msqldump导出数据
mysqldump -uxxxxx -pxxxxxx -P4000 -hxxxxxxx 数据库名 表名 --default-character-set=utf8mb4 > /tmp/xxxx.sql
目标端数据导入
mysql -uxxx -pxxxx -hxxxxx -P3306 数据库名 < /tmp/xxxxx.sql
第二种 使用 dumpling
使用工具dmpling,部署命令如下
tiup install dumpling
具体内容可以参考官方文档官方文档传送门
如果导出的数据较多,时间较长,需要修改tikv_gc_life_time值,此次操作将其调整为8h,默认是10分钟。
set global tidb_gc_life_time=8h
导出数据的命令,会在/tmp/eva的目录里产生很多的语句。
tiup dumpling -h 127.0.0.1 -P 4000 -u root -t 16 -r 2000000 -B evaluate --filetype sql -o /tmp/eva>/tmp/eva.log
在tmp下会生产一个eva得目录,里面有个metadata文件,文件里面有POS,是同步开启时需要指定得开始位置。

导入文件较多,可以如下命令进行批量导入,具体信息根据实际情况进行调整
pwd=
db=` ls . |grep schema-create|awk -F"-" '{print $1}'`
/usr/local/mysql/bin/mysql -S/app/3307/mysql.socket -u'root' -p$pwd <"$db-schema-create.sql"
schema=`ls . |grep schema|grep -v schema-create|grep sql`
tab=`ls . |grep -v schema|grep sql`
for s in $schema
do
/usr/local/mysql/bin/mysql -S/app/3307/mysql.socket -u'root' -p$pwd -B $db <"$s"
done
for t in $tab
do
/usr/local/mysql/bin/mysql -S/app/3307/mysql.socket -u'root' -p$pwd -B $db <"$t"
done
四、开启同步任务
1、配置文件
官方文件
https://docs.pingcap.com/zh/tidb/v7.3/ticdc-changefeed-config
cat cdc.conf
[filter]
rules = [‘eva.*’]
2、创建同步任务
创建同步前可以测试下mysql的时区配置,
登录目标端mysql 执行
set global time_zone=‘Asia/Shanghai’
如果报错请先配置第三部
tiup cdc cli changefeed create --server=http://xx.xx.xx.xx:8300 --sink-uri="mysql://root:xxxxx@xx.xx.xx.xx:3307" --changefeed-id="simple-replication-task" --start-ts=444340649109225480 --config=cdc.conf
注意:密码不要带特殊字符,如有特殊字符可以转化下
echo -n ‘123456’ | base64 # 假设待编码的密码为 123456
–start-ts 是dumpling 里面metadata里面有
3、配置mysql时区
MySQL时区报错
Error: [CDC:ErrMySQLConnectionError]fail to open MySQL connection: Error 1298 (HY000): Unknown or incorrect time zone: ‘Asia/Shanghai’
需要执行时区配置的脚本,从官方下载
脚本下载地址
我的环境是8.0的,下载标黄的文件

文件上传后解压,登录数据库,进入mysql库里面执行脚本
use mysql;
source /tmp/timezone_2023c_leaps_sql/timezone_leaps.sql
重新执行tiup cdc cli的语句成功。
查看同步信息
tiup cdc cli changefeed list --server=http://10.128.130.233:8300
五、更新TICDC配置
1、查看任务
tiup ctl:v7.1.5 cdc changefeed list --server=xxxxx:8300
2、暂停任务
tiup ctl:v7.1.5 cdc changefeed pause --server=xxxxxx:8300 --changefeed-id=“xxxxx-task-1”
3、更新TICDC相关配置
修改需要更新的部分。如访问目标端的用户、密码,或者修改同步文件中的表名
tiup ctl:v7.1.5 cdc changefeed update --sink-uri=“mysql://ticdc:xxxxx@xxxxx:3306/” --changefeed-id=“xxxxx-task-1” --server=xxxxxx:8300 –config changefeed_xxx.toml
4、启动任务
tiup ctl:v7.1.5 cdc changefeed resume --changefeed-id=“xxxxx-task-1” --server=xxxxxx:8300
5、查看任务
tiup ctl:v7.1.5 cdc changefeed list --server=xxxxxx:8300
四、任务查看
1、查看任务列表
tiup ctl:v7.1.5 cdc changefeed list --server=xxxxxx:8300
2、查看某任务详细信息
tiup ctl:v7.1.5 cdc changefeed query --server=xxxxxx:8300 --changefeed-id=“xxxxx-task-1”




