帮你快速理解、总结文档立即下载
文档中心>实践教程>数据传输服务>使用 DTS 将自建 OceanBase 迁移至 TDSQL Boundless

使用 DTS 将自建 OceanBase 迁移至 TDSQL Boundless

最近更新时间:2026-08-27 17:50:31
我的收藏

业务场景

在数据库上云、跨内核演进或多云整合的场景中,用户常需要将自建或第三方的 OceanBase(MySQL 模式租户)数据库整体搬迁到腾讯云 TDSQL Boundless。这类搬迁通常要求:迁移过程中源库业务尽量不停机、存量数据与增量数据都完整迁移、割接前可验证两端数据一致。
数据传输服务 DTS(Data Transfer Service)提供的数据迁移能力,支持"结构迁移 + 全量迁移 + 增量同步"的一站式链路,并配合数据一致性校验,帮助用户在最小化业务影响的前提下完成从 OceanBase 到 TDSQL Boundless 的平滑搬迁。
本文以 OceanBase 4.x(MySQL 模式租户)迁移至 TDSQL Boundless 为例,介绍完整的迁移配置、验证与割接流程,以及迁移过程中的常见问题与处理方法。

背景信息

DTS 数据迁移原理

DTS 数据迁移以整体数据库搬迁为目的,属于短期的一次性任务,迁移完成后由用户手动割接、将业务对接到新的数据库上。
以 MySQL 为例,数据迁移过程分为以下阶段:
1. 结构迁移:迁移源库的库、表结构,在目标库中创建与源库一致的库表结构。
2. 全量数据迁移:将源库中除系统库表外的存量数据一次性迁移至目标库。全量迁移适用于迁移过程中源库无数据写入的场景。
3. 增量数据迁移:全量迁移启动的同时,DTS 对源库日志的接管也随之启动,源库在全量迁移过程中产生的增量变更会被解析并回放到目标库,从而保持源库与目标库的数据一致。
4. 一致性校验:对目标库数据与源库迁移数据进行对比,辅助用户在割接前验证迁移结果。
在 MySQL、TDSQL 等链路的全量迁移阶段,DTS 采用无锁迁移方式,无需对源库加全局锁(FTWRL),仅对无主键的表加表锁,从而最小化迁移对源库业务的影响。

OceanBase 到 TDSQL Boundless 的迁移链路

OceanBase 的架构与标准 MySQL 存在差异:数据通道与 binlog(增量日志)通道由不同组件、不同端口承载,而 DTS 默认假设源端为“单端口即可同时执行查询与获取增量位点”的标准 MySQL。因此,迁移的关键在于通过 OBProxy 将双通道收敛为单一入口端口,使源端对 DTS 表现为一个标准 MySQL 源。
整体链路如下图所示:

OBProxy 内置了 binlog 命令路由能力:配置增量日志服务地址后,obproxy 会按 SQL 类型自动分流——普通 DML/DDL 转发到数据节点,位点查询类命令(例如, SHOW MASTER STATUSSHOW BINARY LOGSSHOW BINLOG EVENTS)与主从复制协议转发到增量日志组件。配置完成后,下游只需连接 obproxy 一个入口端口,对 DTS 完全透明。
说明:
本文涉及的组件端口、账号、路径等均需根据您实际的 OceanBase 部署环境替换。文中命令行示例中的 <...> 均为占位符。

前提条件

已购买并创建目标端 TDSQL Boundless 实例,且实例状态为运行中
源端 OceanBase 集群各组件版本满足以下要求。
组件
最低版本
建议版本
OceanBase(observer)
4.2.1
4.5.0 及以上
OBProxy
4.2.1(支持 binlog 命令路由的起始版本)
4.3.5 及以上
OceanBase 增量日志组件(oblogproxy)
4.0.1
4.0.1 及以上
TDSQL Boundless
MySQL 8.0 内核
8.0.26 及以上
说明:
OBProxy 版本低于 4.2.1 时不支持 binlog 命令路由配置,必须先升级 OBProxy 后再执行迁移。
待迁移的 OceanBase 业务租户为 MySQL 兼容模式
已完成源端到 DTS 的网络打通。DTS 支持公网、专线接入、VPN 接入、云联网、云数据库等多种接入方式,请根据源库所在网络环境选择合适的方式,具体请参考网络准备
已规划目标端磁盘容量:建议不低于源端待迁移数据量的 1.2 倍。
源端增量日志保留时间建议不少于 3 天,避免任务暂停后因日志被清理而无法续传。

操作流程概要

本文迁移流程分为五个阶段,如您已完成部分步骤可直接跳到对应环节。
1. 阶段一:配置源端入口路由——将 OceanBase 的数据通道与增量日志通道收敛为单一入口。
2. 阶段二:创建 DTS 迁移任务——配置源库、目标库并完成连通性测试与校验。
3. 阶段三:全量迁移监控——观察结构初始化与全量数据迁移进度。
4. 阶段四:增量同步验证——验证增量链路是否正常。
5. 阶段五:割接——数据验证无误后完成业务切换。

操作步骤

步骤一:配置源端入口路由

本步骤为一次性配置,用于让 OceanBase 源端对 DTS 表现为单端口标准 MySQL。
1. 使用 OBProxy 的管理账号连接 obproxy,执行以下两项配置:将增量日志服务地址指向 oblogproxy 的管理端口,并开启 DDL 兼容输出。参数说明如下:
参数
说明
增量日志服务地址
指向 oblogproxy 的管理端口,用于将 binlog 相关命令路由到增量日志组件。请填写管理端口,而非 binlog 实例端口。
DDL 兼容输出
开启后让 OceanBase 输出标准 MySQL 兼容的 DDL,免去额外的 DDL 清洗层。该配置只影响输出格式,不改变表的实际 schema。
2. 使用业务租户连接 obproxy,执行位点查询类命令进行验证。配置生效后,以下命令可以正常返回结果:
SHOW MASTER STATUS;
SHOW BINARY LOGS;
SHOW BINLOG EVENTS IN '<binlog 文件名>' LIMIT 5;
3. 持久化配置。入口路由配置属于运行时配置,OBProxy 重启后会丢失,请将配置写入 OBProxy 的启动脚本,或在重启后重新执行配置命令。
说明:
若未持久化配置,OBProxy 重启后位点查询命令将再次失效,导致 DTS 增量同步中断。请务必完成持久化。

步骤二:创建 DTS 迁移任务

1. 登录 DTS 控制台,在左侧导航栏选择数据迁移,单击新建迁移任务
2. 在新建迁移任务页面,选择源实例类型与所属地域、目标实例类型与所属地域、任务规格等,然后单击立即购买
源实例类型选择 MySQL。
目标实例类型选择 TDSQL Boundless。
3. 在设置源和目标数据库页面,完成任务设置、源库设置和目标库设置,单击保存
源库设置:
主机地址:OceanBase 机器地址。
端口:obproxy 的入口端口,而非数据节点端口或增量日志端口。
账号:业务租户内的账号,格式为 账号@业务租户名,不带集群限定符。
4. 在设置迁移选项及选择迁移对象页面,设置迁移类型和迁移对象,单击下一步
迁移类型选择全量 + 增量迁移
迁移对象选择整个实例或指定对象。
5. 设置一致性校验页面,勾选开启数据一致性校验,配置参数后,单击下一步
6. 在校验任务页面,完成迁移前校验工作,单击立即启动

步骤三:全量迁移监控

1. 任务启动后进入准备运行状态,约 1 至 2 分钟后正式开始迁移。
2. 在 DTS 控制台任务详情页查看迁移进度:迁移会先进行结构初始化,再进行全量数据迁移,进度按表统计已迁移行数。
警告:
选择全量 + 增量迁移时,全量阶段请勿向源库写入本不属于全量快照范围的新数据,否则可能导致全量数据不一致。此外,迁移过程中请勿修改源端或目标端的账号密码、端口,也不要在源端清理增量日志,否则会导致 DTS 连接断开或增量同步无法续传。
3. 全量迁移完成后,任务自动进入增量同步阶段。

步骤四:增量同步验证

1. 在源端业务租户写入一条带唯一标记的测试数据,例如:
INSERT INTO <业务库>.<测试表> VALUES (99999, CONCAT('incr_verify_', DATE_FORMAT(NOW(),'%H%i%s')));
2. 等待约 15 至 30 秒后,在目标端 TDSQL Boundless 核对该数据是否已同步:
SELECT * FROM <业务库>.<测试表> WHERE id = 99999;
3. 目标端能查询到源端写入的数据,即表示增量链路正常。如需更完整的验证,可依次验证 INSERT、UPDATE、DELETE 以及事务回滚(回滚的数据不应被同步)四种场景。
说明:
通过入口端口查询源端位点可能因缓存存在短暂延迟,可等待几秒后再查询,或直连增量日志组件查看真实位点。

步骤五:业务割接

1. 登录 DTS 控制台,等待数据迁移任务的迁移步骤显示为同步增量,并且目标与源库数据差距为 0KB,目标与源库时间延迟为 0 秒。
2. 暂停源库业务,停止新的数据写入。
3. 再次查看迁移任务,等待目标与源库数据差距为 0KB,目标与源库时间延迟为 0 秒,并保持 1 分钟以上,单击完成,结束增量迁移任务。
4. 验证源库和目标库的数据一致后,确定割接时机,将业务切换到 TDSQL Boundless,并验证业务功能是否正常。
说明:
割接前请务必通过一致性校验和业务演练完成完整验证,回滚成本较高。若割接后需回切,需停业务、从目标端导出割接后的增量数据并回写源端,再将业务切回源端。

常见问题

Q:位点查询命令报错,提示无法连接增量日志服务?

该报错通常由增量日志服务地址配置错误(如误填为 binlog 实例端口而非管理端口)、oblogproxy 进程未运行或增量日志实例状态异常导致。请依次检查 oblogproxy 进程是否存活、管理端口是否正常监听、增量日志实例状态是否正常,并确认入口路由配置中的增量日志服务地址填写的是管理端口,修正后重新验证位点查询命令。

Q:DTS 校验提示源实例权限不足?

由于迁移账号缺少复制相关权限。为迁移账号补充复制客户端与复制从库相关权限后,重新发起校验即可。

Q:DTS 校验提示 binlog 参数获取失败?

该问题是源端入口端口未正确配置 binlog 命令路由,导致位点查询命令不被支持。请确认已完成步骤一:配置源端入口路由的入口路由配置,且配置在 OBProxy 重启后依然生效。

Q:DTS 校验提示目标实例内容冲突?

通常是目标端回收站中存在残留对象,或目标库中已有同名对象。可清理目标端回收站中的残留对象,或改用“指定对象”方式迁移,避开冲突对象。

Q:全量迁移时大表扫描超时怎么办?

该现象一般是源端查询超时时间设置过短,大表全量扫描无法在默认时间内完成。适当调大源端业务租户的查询超时时间后重试即可。

Q:目标端 TDSQL Boundless 实例被锁定,DTS 无法操作?

实例被锁定的常见原因包括欠费、磁盘已满或触发风控;锁定后 DTS 无法进行控制面操作,但数据库自身读写通常仍正常。请先在控制台查看实例状态,再依次排查费用中心是否欠费、实例监控中磁盘是否曾达到 100%;若仍无法定位,可提交工单 处理。

Q:增量同步不工作,源端写数据目标端一直看不到?

这属于增量链路异常,可能是入口路由配置失效、增量日志未增长或 DTS 消费位点未推进。请在控制台确认任务处于“增量同步中”状态并查看延迟;在源端写入数据后观察位点是否推进(注意入口端口位点存在缓存,可直连增量日志组件查看真实位点);同时对比 DTS 当前消费位点与源端位点,并检查 oblogproxy 日志。