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

分布式数据库学习Note212:OceanBase社区版中,使用 Canal 从 OceanBase 数据库同步数据到 MySQL 数据库

欢迎访问OceanBase官网获取更多信息:https://www.oceanbase.com/


本文档主要介绍使用 Canal 和 oblogproxy 组件从 OceanBase 数据库同步数据至 MySQL 数据库。

OceanBase CDC 实现逻辑

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

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

数据链路:

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

组件介绍:

  • libobcdc 是 OceanBase CDC 的基本组件,libobcdc 衍生出 oblogproxy,libobcdc 依赖 oblogmsg。libobcdc 是 C++ 动态库,将从 OceanBase 集群中拉到的增量日志按事务提交顺序向外透出,透出的方式是按 LogMessage 协议创建相关对象给使用方使用。

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

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

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

操作步骤

步骤一:安装 oblogproxy

参考 oblogproxy 文档 完成 oblogproxy 的安装部署。

步骤二:安装 canal server

  1. 下载软件包。

    下载 canal-for-ob.deployer.tar.gz

    wget https://github.com/oceanbase/canal/releases/download/canal-for-ob-1.1.6-alpha/canal-for-ob.deployer.tar.gz
    
  2. 将压缩包解压至目录 /Canal_Home/canal-for-ob

    mkdir /Canal_Home/canal-for-ob && tar zxvf canal-for-ob.deployer.tar.gz  -C /Canal_Home/canal-for-ob
    
  3. 修改配置文件 canal.properties

    修改 /Canal_Home/canal-for-ob/conf/canal.properties。

    canal.serverMode = tcp
    canal.destinations = obtest2
    canal.instance.global.spring.xml = classpath:spring/ob-default-instance.xml
    
  4. 配置 canal instance。

    将 /Canal_Home/canal-for-ob/conf/example 下的 instance.properties 删除,然后将 ob-instance.properties 重命名为 instance.properties。

    修改 instance.properties,示例如下:

    cd /Canal_Home/canal-for-ob/conf/example
    vi instance.properties
    
    # OceanBase集群参数
    canal.instance.oceanbase.rsList=10.10.10.1:2882:2881;10.10.10.2:2882:2881;10.10.10.3:2882:2881
    canal.instance.oceanbase.username=root@mysql001#test4000
    canal.instance.oceanbase.password=1****6
    canal.instance.oceanbase.startTimestamp=0
    
    # oceanbase logproxy参数
    canal.instance.oceanbase.logproxy.address=10.10.10.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.oceanbase.tenant=mysql001
    canal.instance.parser.excludeTenantInDbName=true
    
    # 日志过滤。格式为 [tenant].[database].[table],支持正则
    canal.instance.filter.regex=mysql001.*.*
    
  5. 启动 Canal Server。

    cd /Canal_Home/canal-for-ob && sh bin/startup.sh
    

步骤三:配置 RDB 适配器

  1. 下载软件包。

    下载 canal-for-ob.adapter.tar.gz

    wget https://github.com/oceanbase/canal/releases/download/canal-for-ob-1.1.6-alpha/canal-for-ob.adapter.tar.gz
    
  2. 将压缩包解压至目录 /Canal_Home/canal-adapter-for-ob

    mkdir /Canal_Home/canal-adapter-for-ob && tar zxvf canal-for-ob.adapter.tar.gz -C /Canal_Home/canal-adapter-for-ob
    
  3. 修改 application.yml

    cd /Canal_Home/canal-adapter-for-ob/conf
    vi application.yml
    
    canalAdapters:
    - instance: example # 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://10.10.10.1:3306/test_data?useUnicode=false
            jdbc.username: root
            jdbc.password: 1****6
    
  4. 修改适配器库/表映射(以库映射为例)。

    cd /Canal_Home/canal-adapter-for-ob/conf/rdb
    vi application.yml
    
    ## Mirror schema synchronize config
    dataSourceKey: defaultDS
    destination: example
    groupId: g1
    outerAdapterKey: mysql1
    concurrent: true
    dbMapping:
    mirrorDb: true
    database: test_data
    
  5. 启动 canal client。

    cd /Canal_Home/canal-adapter-for-ob && sh bin/startup.sh
    
  6. 查看数据同步情况。

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

功能限制

  • 同步的表必须有主键。否则,源端删除无主键表的任意一笔记录,同步到目标端会导致整个表被删除。

  • DDL 支持新建表、新增列。


欢迎访问OceanBase官网获取更多信息:https://www.oceanbase.com/

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

评论