使用 Canal 从 OceanBase 数据库迁移数据到 MySQL 数据库


prtyaa
prtyaa 2024-01-06 23:01:24 48888 赞同 0 反对 0
分类: 资源 标签: 运维
什么是 CDC CDC 全称是 Change Data Capture,即变更数据捕获。

为什么需要 CDC 功能

CDC 能够帮助识别上次提取之后发生变化的数据。CDC 提供的数据可以做很多事情,比如:做历史库、做近实时缓存、提供给消息队列(MQ),用户消费 MQ 做分析和审计等。

OceanBase CDC 实现逻辑

oblogproxy 是 OceanBase 数据库的增量日志代理服务。基于 liboblog,以服务的形式提供实时增量链路接入和管理能力,方便应用接入 OceanBase 增量日志。能够解决在网络隔离的情况下,订阅增量日志的需求,并提供多种链路接入方式。

Canal 是开源 MySQL 数据库 Binlog 的增量订阅和消费组件,基于 MySQL 数据库的增量日志解析,可以用于数据同步。

数据链路:

ob_cluster -> oblogreader -> oblogmsg -> canal_server -> canal_client -> mysql

组件介绍:

  • liboblog 是 OceanBase CDC 的基本组件,liboblog 衍生出 oblogproxy,liboblog 依赖 oblogmsg。

  • liboblog 是 C++ 动态库,将从 OceanBase 集群中拉到的增量日志按事务提交顺序向外透出,透出的方式是按 LogMessage 协议创建相关对象给使用方使用。

  • ObLogReader 对 liboblog 的 C++ 封装,在 liboblog 的基础上,对创建出的 LogMessage 对象适配多种序列化输出。

  • oblogproxy 增量日志代理,并不对增量数据进行转发,而只是对新建连接请求创建对应的 oblogreader 子进程,并由该 oblogreader 子进程通过该连接直接向客户端发送按 LogMessage 序列化后的增量日志记录。LogProxy 用于对同机器上所有 oblogreader 子进程的生命周期进行管理。

  • logclient 对字节流按 LogMessage 协议反序列化后生成 LogMessage 对象给使用方调用,比如和 canal 对接。

安装 oblogproxy

  • 下载 oblogproxy rpm 包

    下载地址为:https://github.com/oceanbase/oblogproxy/releases/tag/v1.0.0

  • 安装 oblogproxy

    yum install oblogproxy-1.0.0-1.el7.x86_64.rpm

  • 确认 oblogproxy 依赖,重点是确认有 liboblog。

    [root@172.30.xxx.xx ~]$cd /usr/local/oblogproxy/

    [root@172.30.xxx.xx oblogproxy]$ldd ./bin/logproxy
    linux-vdso.so.1 => (0x00007fffe68fe000)
    liboblog.so.1 => /lib/liboblog.so.1 (0x00002ae0113f1000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00002ae046bf8000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00002ae046e14000)
    librt.so.1 => /lib64/librt.so.1 (0x00002ae047018000)
    libm.so.6 => /lib64/libm.so.6 (0x00002ae047220000)
    libc.so.6 => /lib64/libc.so.6 (0x00002ae047522000)
    /lib64/ld-linux-x86-64.so.2 (0x00002ae0111cd000)
    libaio.so.1 => /lib64/libaio.so.1 (0x00002ae0478f0000)

启动 oblogproxy

修改 oblogproxy 参数

  • 生成加密用户和对应的密码

    [root@172.30.xxx.xx bin]$pwd
    /usr/local/oblogproxy/bin

    [root@172.30.xxx.xx bin]$./logproxy -x root@sys
    EA87898018FD1EDDC2AA11CE1556E917

    [root@172.30.xxx.xx bin]$./logproxy -x Root@2021
    ****************************************

  • 修改对应的 conf.json 参数

    [root@172.30.xxx.xx conf]$pwd
    /usr/local/oblogproxy/conf

    [root@172.30.xxx.xx conf]$ls -l
    总用量 4
    -rw-r--r-- 1 root root 1081 10月 25 18:00 conf.json

    # 修改conf.json的内容
    "ob_sys_username": "EA87898018FD1EDDC2AA11CE1556E917",
    "ob_sys_password": "****************************************",

  • 启动 oblogproxy

    [root@172.30.xxx.xx oblogproxy]$./run.sh start
    work path : /usr/local/oblogproxy
    is_running : (8252)/usr/local/oblogproxy logproxy is running !
    logproxy started!

  • 启停 obproxy 和查看状态

    • 启动 oblogproxy

      [root@172.30.xxx.xx oblogproxy]$pwd
      /usr/local/oblogproxy
      [root@172.30.xxx.xx oblogproxy]$./run.sh start

    • 停止 oblogproxy

      [root@172.30.xxx.xx oblogproxy]$pwd
      /usr/local/oblogproxy
      [root@172.30.xxx.xx oblogproxy]$./run.sh stop

    • 查看 oblogproxy 状态

      [root@172.30.xxx.xx oblogproxy]$pwd
      /usr/local/oblogproxy
      [root@172.30.xxx.xx oblogproxy]$./run.sh status

说明:

oblogproxy 启动成功后进程确认。

[root@172.30.xxx.xx ~]$ps -ef | grep logproxy | grep -v grep
root 26379 26373 0 10:45 pts/1 00:00:00 ./bin/logproxy -f ./conf/conf.json
[root@172.30.xxx.xx ~]$

当有一个 client 连接成功后会 fork 一个子进程。

[root@172.30.xxx.xx ~]$ps -ef | grep oblogreader | grep -v grep
root 26386 26379 2 10:45 pts/1 00:00:17 oblogreader -f ./conf/conf.json

canal server

下载 canal-for-ob。canal-for-ob 详细信息请参考 canal-for-ob GitHub 仓库。

修改 /opt/canal_ob/canal.deployer-for-ob-rc1/conf/canal.properties

canal.zkServers = 172.30.xxx.xx:12181,172.30.xxx.xx:12181,172.30.xxx.xx:12181
canal.serverMode = tcp
canal.destinations = obtest2
canal.instance.global.spring.xml = classpath:spring/ob-default-instance.xml

canal instance

[root@172.30.xxx.xx conf]$ll
总用量 28
-rwxr-xr-x 1 root root 319 10月 21 16:15 canal_local.properties
-rwxr-xr-x 1 root root 6577 10月 26 16:21 canal.properties
-rwxr-xr-x 1 root root 3592 10月 21 16:15 logback.xml
drwxrwxrwx 2 root root 4096 10月 21 16:15 metrics
drwxr-xr-x 2 root root 4096 12月 7 13:29 obtest2 -- 将 example 修改为 obtest2
drwxrwxrwx 3 root root 4096 11月 2 10:51 spring

[root@172.30.xxx.xx obtest2]$pwd
/opt/canal_ob/canal.deployer-for-ob-rc1/conf/obtest2
[root@172.30.xxx.xx obtest2]$ll
total 16
-rwxrwxrwx 1 root root 1147 Jan 13 17:15 ca.crt
-rwxrwxrwx 1 root root 1241 Jan 13 17:15 client.crt
-rwxrwxrwx 1 root root 1708 Jan 13 17:15 client.key
-rwxr-xr-x 1 root root 1743 Feb 13 17:15 instance.properties
-rwxr-xr-x 1 root root 1743 Feb 13 17:15 ob-instance.properties

# 删除 instance.properties,将 ob-instance.properties 重命名为 instance.properties

[root@172.30.xxx.xx obtest2]$cat instance.properties

# oceanbase集群参数
canal.instance.oceanbase.rsList=172.30.xxx.xx:2882:2881;172.30.xxx.xx:2882:2881
canal.instance.oceanbase.username=root@test_tenant_1#obcluster
canal.instance.oceanbase.password=********
canal.instance.oceanbase.startTimestamp=0

# oceanbase logproxy参数
canal.instance.oceanbase.logproxy.address=127.0.0.1:2983
canal.instance.oceanbase.logproxy.sslEnabled=false
canal.instance.oceanbase.logproxy.serverCert=../conf/${canal.instance.destination:}/ca.crt
canal.instance.oceanbase.logproxy.clientCert=../conf/${canal.instance.destination:}/client.crt
canal.instance.oceanbase.logproxy.clientKey=../conf/${canal.instance.destination:}/client.key

# 是否要在库名中去掉租户前缀。logproxy输出的日志中库名默认为 [tenant].[db]
canal.instance.parser.excludeTenantInDbName=true
canal.instance.oceanbase.tenant=test_tenant_1

# 日志过滤。格式为[tenant].[database].[table],支持正则
canal.instance.filter.regex=test_tenant_1.db1.*

启动 canal server

[root@172.30.xxx.xx ~]$cd /opt/canal_ob
[root@172.30.xxx.xx canal_ob]$cd canal.deployer-for-ob-rc1
[root@172.30.xxx.xx canal.deployer-for-ob-rc1]$cd bin
[root@172.30.xxx.xx bin]$ls -lrt
总用量 20
-rwxr-xr-x 1 root root 1244 10月 21 16:15 startup.bat
-rwxr-xr-x 1 root root 1356 10月 21 16:15 stop.sh
-rwxr-xr-x 1 root root 3167 10月 21 16:15 startup.sh
-rwxr-xr-x 1 root root 226 10月 21 16:15 restart.sh
-rw-r--r-- 1 root root 6 12月 7 10:42 canal.pid
[root@172.30.xxx.xx bin]$./startup.sh

canal client

下载 canal-for-ob。更多信息,参考 canal-for-ob GitHub 仓库。

[root@172.30.xxx.xx conf]$pwd
/opt/canal_ob/canal_adapter_for_ob/conf
[root@172.30.xxx.xx conf]$ls -lrt
总用量 44
-rwxr-xr-x 1 root root 2172 10月 21 16:15 logback.xml
drwxrwxrwx 2 root root 4096 10月 21 16:15 tablestore
drwxr-xr-x 2 root root 4096 10月 21 16:15 hbase
drwxr-xr-x 2 root root 4096 10月 21 16:15 kudu
drwxrwxrwx 2 root root 4096 10月 21 16:15 META-INF
drwxr-xr-x 2 root root 4096 10月 21 16:15 es6
-rwxr-xr-x 1 root root 170 10月 21 16:15 bootstrap.yml
-rwxr-xr-x 1 root root 552 10月 21 16:15 mytest_user.yml
drwxr-xr-x 2 root root 4096 10月 21 16:15 es7
-rwxr-xr-x 1 root root 3240 10月 26 16:26 application.yml
drwxrwxrwx 2 root root 4096 12月 7 10:27 rdb
[root@172.30.xxx.xx conf]$cat application.yml

canalAdapters:
- instance: obtest2# canal instance Name or mq topic name
groups:
- groupId: g1
outerAdapters:
- name: logger
- name: rdb
key: mysql1
properties:
jdbc.driverClassName: com.mysql.jdbc.Driver
jdbc.url: jdbc:mysql://172.30.xxx.xx:3367/mysql?useUnicode=true&useSSL=false
jdbc.username: root
jdbc.password: ******

修改适配器库/表映射(以库映射为例)

[root@172.30.xxx.xx conf]$pwd
/opt/canal_ob/canal_adapter_for_ob/conf
[root@172.30.xxx.xx conf]$ls -l rdb
总用量 4
-rwxr-xr-x 1 root root 186 12月 6 21:11 mytest_user.yml

## Mirror schema synchronize config
dataSourceKey: defaultDS
destination: obtest2
groupId: g1
outerAdapterKey: mysql1
concurrent: true
dbMapping:
mirrorDb: true
database: db1

启动 canal client

[root@172.30.xxx.xx bin]$pwd
/opt/canal_ob/canal_adapter_for_ob/bin

[root@172.30.xxx.xx bin]$ls -lrt
总用量 16
-rwxr-xr-x 1 root root 2289 10月 21 16:15 startup.sh
-rwxr-xr-x 1 root root 793 10月 21 16:15 startup.bat
-rwxr-xr-x 1 root root 205 10月 21 16:15 restart.sh
-rwxr-xr-x 1 root root 1370 10月 21 16:15 stop.sh
[root@172.30.xxx.xx bin]$./startup.sh

在 OceanBase 源端写入数据,在 MySQL 目标端查看数据同步。

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
prtyaaL2
粉丝 1 资源 1949 + 关注 私信
最近热门资源
银河麒麟桌面操作系统备份用户数据  127
统信桌面专业版【全盘安装UOS系统】介绍  122
银河麒麟桌面操作系统安装佳能打印机驱动方法  115
银河麒麟桌面操作系统 V10-SP1用户密码修改  105
最近下载排行榜
银河麒麟桌面操作系统备份用户数据 0
统信桌面专业版【全盘安装UOS系统】介绍 0
银河麒麟桌面操作系统安装佳能打印机驱动方法 0
银河麒麟桌面操作系统 V10-SP1用户密码修改 0
作者收入月榜
1

prtyaa 收益393.62元

2

zlj141319 收益218元

3

1843880570 收益214.2元

4

IT-feng 收益209.03元

5

风晓 收益208.24元

6

777 收益172.71元

7

Fhawking 收益106.6元

8

信创来了 收益105.84元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.5元

请使用微信扫码

加入交流群

请使用微信扫一扫!