欢迎访问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
下载软件包。
下载 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将压缩包解压至目录
/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修改配置文件
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配置 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.*.*启动 Canal Server。
cd /Canal_Home/canal-for-ob && sh bin/startup.sh
步骤三:配置 RDB 适配器
下载软件包。
下载 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将压缩包解压至目录
/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修改
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修改适配器库/表映射(以库映射为例)。
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启动 canal client。
cd /Canal_Home/canal-adapter-for-ob && sh bin/startup.sh查看数据同步情况。
在 OceanBase 源端写入数据,在 MySQL 目标端查看数据同步。
功能限制
同步的表必须有主键。否则,源端删除无主键表的任意一笔记录,同步到目标端会导致整个表被删除。
DDL 支持新建表、新增列。
欢迎访问OceanBase官网获取更多信息:https://www.oceanbase.com/




