业务场景
在数据库上云、跨内核演进或多云整合的场景中,用户常需要将自建或第三方的 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 STATUS、SHOW BINARY LOGS、SHOW 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 日志。