暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

TICDC从tidb实时同步到mysql测试

原创 游兵老卒 2023-09-18
630

一、概述

测试由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,是同步开启时需要指定得开始位置。
image.png

导入文件较多,可以如下命令进行批量导入,具体信息根据实际情况进行调整

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的,下载标黄的文件
image.png
文件上传后解压,登录数据库,进入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”

最后修改时间:2024-06-21 17:25:43
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论