1. 概述
1.1 版本
| FineDataLink 版本 | 功能变动 |
|---|---|
| 4.2.20.2 | 实时管道任务和实时任务支持读取OceanBase(MySQL模式)数据源、OceanBase(Oracle模式)数据源 |
1.2 功能简介
使用实时管道任务、数据开发-实时任务同步 OceanBase 数据前,需要参考本文在数据源中进行一些配置,为后续的数据同步做好准备。
1.3 FDL 读取变更日志原理

读取 OceanBase 的变更日志需要同时能访问租户 SQL 入口、OBServer 内部 RPC 地址,OBServer 内部 RPC 地址只有集群内网能通,但 FDL 服务器通常不在 OceanBase 的内网里,连接不上 RPC 地址。
所以,需要在内网里放一台跳板机,上面跑一个叫 obcdc_wrapper 的程序作为中间层。
FDL 侧实际启动的是 WEB-INF 下的本地包装脚本;包装脚本通过 SSH 在数据库内网跳板机上执行远端 obcdc_wrapper。FDL 与 wrapper 之间的 JSON-RPC + stdio 通信也复用这条 SSH 会话:
FDL 写入本地脚本 stdin,经 SSH 转发到远端 wrapper stdin。
远端 wrapper stdout 再经 SSH 返回给本地脚本 stdout,最终被 FDL Reader 读取。
2. 操作步骤
2.1 前提条件
注:云上 OceanBase 或无法在数据库内网运行 CDC 组件的环境,不适用于当前部署方案。
| 环境 | 要求 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| 数据库 |
| ||||||||
跳板机 | 位于 OceanBase 数据库集群内网,能访问租户 SQL 端口和 OBServer RPC 端口 | ||||||||
FDL 服务器 | 能通过 SSH 免密登录跳板机,且 WEB-INF 目录下可放置可执行包装脚本 | ||||||||
obcdc_wrapper | 使用与客户 CDC 组件包兼容的二进制文件 |
2.2 数据库账号与权限
建议为 CDC 单独创建采集用户,避免直接使用高权限业务账号。
2.2.1 OceanBase(MySQL模式)
CREATE USER cdc_reader IDENTIFIED BY 'your_password';
GRANT SELECT ON oceanbase.* TO cdc_reader;
FDL 数据连接用户名按 OceanBase 租户格式填写,例如:cdc_reader@mysql_tenant
2.2.2 OceanBase(Oracle模式)
CREATE USER CDC_READER IDENTIFIED BY "your_password";
GRANT CREATE SESSION TO CDC_READER;
GRANT SELECT ANY DICTIONARY TO CDC_READER;
FDL 数据连接用户名按 OceanBase 租户格式填写,例如:CDC_READER@oracle_tenant
2.3 跳板机部署
2.3.1 安装 CDC组件包
在跳板机上安装与目标 OceanBase 版本匹配的 CDC 组件包。企业版组件包通常需要联系 OceanBase 技术支持获取。
安装后需要确认 libobcdc.so 等依赖库可以被运行时找到。若无法直接找到,可通过系统库路径或启动脚本中的环境变量处理。
2.3.2 放置obcdc_wrapper
1)联系技术支持获取 obcdc_wrapper。
2)将 obcdc_wrapper 二进制放到跳板机任意目录,例如:
/root/obcdc_wrapper_4.4.2.1_drcmsg_x86_64
3)赋予执行权限:
chmod +x /root/obcdc_wrapper_4.4.2.1_drcmsg_x86_64
4)检查版本输出:
/root/obcdc_wrapper_4.4.2.1_drcmsg_x86_64 --version
如果执行时报错缺少 libaio.so.1,按系统类型安装:
# Debian / Ubuntu
apt-get install -y libaio1
# Ubuntu 24.04 及更高版本
apt-get install -y libaio1t64
# Red Hat / CentOS / Fedora
dnf install -y libaio
# 旧系统可使用:yum install -y libaio
如果出现 libobcdc.so 相关报错,优先检查:
CDC 组件包是否与数据库版本匹配。
动态库路径是否已加入系统搜索路径。
当前 wrapper 是否用匹配的 SDK / 头文件版本编译。
若仍不兼容,需要客户提供对应版本 CDC 组件包后重新编译 wrapper。
2.4 FDL 服务器部署
2.4.1 配置 SSH 免密登录
FDL 服务器需要能免密 SSH 登录跳板机。建议使用专用系统用户和密钥,并限制该用户的操作范围。
验证命令:
ssh -T -p <ssh_port> <ssh_user>@<ssh_host> 'echo ok'
2.4.2 创建包装脚本
在 FDL 工程 WEB-INF 下创建包装脚本。推荐路径:
WEB-INF/assist/obcdc/obcdc_wrapper.<connName>
其中 <connName> 可以自定义,且不能重复。
未在数据连接里显式配置 wrapper 路径时,FDL 会按该默认规则查找。示例脚本:
#!/usr/bin/env bash
set -euo pipefail
exec ssh \
-T \
-o BatchMode=yes \
-o ConnectTimeout=8 \
-o StrictHostKeyChecking=no \
-o UserKnownHostsFile=/dev/null \
-p <ssh_port> \
<ssh_user>@<ssh_host> \
/root/obcdc_wrapper_4.4.2.1_drcmsg_x86_64 \
"$@"
如果 SSH 端口为默认 22,可以去掉 -p <ssh_port> 这一行。
赋予执行权限:
chmod +x WEB-INF/assist/obcdc/obcdc_wrapper.<connName>
本地验证:
WEB-INF/assist/obcdc/obcdc_wrapper.<connName> --version
2.5 数据连接中配置 wrapper 路径
1)数据连接配置步骤: OceanBase(Oracle模式)数据连接、OceanBase(MySQL模式)数据连接
2)4.2.20.2 及之后版本,数据连接中新增设置项 obcdc_wrapper 路径。如下图所示:

| 配置方式 | 说明 |
|---|---|
不配置 | 默认查找 WEB-INF/assist/obcdc/obcdc_wrapper.<connName> |
| 相对路径 | 相对于当前 FDL 工程的 WEB-INF 目录 |
绝对路径 | 必须位于当前 FDL 工程的 WEB-INF 目录下,否则检查项失败 |
出于安全考虑,FDL 只允许执行 WEB-INF 目录下的 wrapper 或包装脚本。
2.6 wrapper 预设配置文件
如果需要临时调整部分 libobcdc 配置,可在 wrapper 执行文件旁放置同名 .conf 文件。
例如执行文件为:
WEB-INF/assist/obcdc/obcdc_wrapper.ob_oracle.sh
则预设配置文件为:
WEB-INF/assist/obcdc/obcdc_wrapper.ob_oracle.sh.conf
配置文件格式与官方 libobcdc.conf 保持一致,使用 key=value:
memory_limit=4G
timezone=+8:00
log_level=ALL.*:INFO;PALF.*:WARN;SHARE.SCHEMA:WARN
max_log_file_count=20
配置合并优先级:
动态运行配置 > 同名 .conf 预设配置 > FDL 固定默认配置
当前 FDL 固定默认配置:
memory_limit=4G
timezone=+8:00
动态运行配置由 FDL 每次启动采集时生成,通常不建议写入 .conf 覆盖,包括:
tenant_endpoint
tenant_user
tenant_password
tb_white_list
tb_black_list
fetching_log_mode
output_heartbeat_interval_msec
不要在 .conf 文件中写入数据库密码。即使写入,也会被 FDL 动态生成的连接密码覆盖;同时本地明文文件会增加安全风险。
2.7 启动前检查清单
| 检查项 | 验证方式 |
|---|---|
| 数据库账号权限 | 在 FDL 数据连接检查中确认权限检查通过 |
跳板机网络 | 在跳板机上能连接 OceanBase SQL 端口,且 CDC 组件能访问内部 RPC 地址 |
wrapper 可执行 | 在跳板机上执行 obcdc_wrapper --version 成功 |
FDL 包装脚本 | 在 FDL 服务器上执行包装脚本 --version 成功。 |
wrapper 路径 | 数据连接中配置的路径位于 WEB-INF 下,或默认路径文件存在 |
collector.check | FDL 数据连接检查项中 wrapper 可用性检查通过 |
