首批通过分布式安全可靠测评,为关键业务系统打造
配置双向同步任务
更新时间:2026-05-28 10:48:39
本文以 MySQL 数据库至 OceanBase 数据库 MySQL 兼容模式的双向同步任务为例,为您介绍双向同步的相关说明和操作步骤。
背景信息
什么是双向同步
双向同步支持在数据增量同步阶段,同时配置相同数据源的正向和反向迁移任务,实现数据可以在源端和目标端之间相互同步的能力。通过防循环复制的机制,可以避免某一方向已经同步过的数据,不会被对向任务重复同步。
说明
双向同步并不意味着业务可以在两端同时进行写入操作。如果业务同时对相同的数据(同一主键或唯一键)进行写入操作,需要在双向同步任务的配置上定义数据冲突的处理策略(覆盖或忽略),强烈建议业务层面避免对两端同时进行相同数据的写入操作。
支持双向同步的迁移类型
数据迁移支持 MySQL 数据库与 OceanBase 数据库 MySQL 兼容模式、Oracle 数据库与 OceanBase 数据库 Oracle 兼容模式,以及 OceanBase 数据库与 OceanBase 数据库之间的双向数据同步。使用限制、注意事项等更多详情请参见相应类型的数据迁移文档。
MySQL 数据源授权语句
当您进行 MySQL 数据库和 OceanBase 数据库之间的双向同步时,请为当前任务的 MySQL 数据源下的数据库账号赋予 CREATE DATABASE 和 CREATE TABLE 权限。数据迁移需要创建事务库和事务表实现双向同步防循环复制的能力,否则可能导致双向同步任务异常。
授予全局创建数据库权限
GRANT CREATE ON *.* TO '<user_name>';允许用户在名为 oms 的数据库中创建表
GRANT CREATE ON oms.* TO '<user_name>';
Oracle 数据源创建 Schema 及授权语句
当您进行 Oracle 数据库和 OceanBase 数据库之间的双向同步时,请在当前任务的 Oracle 数据源下创建名为 OMS 的 Schema,并且为数据源下的数据库账号赋予在 OMS Schema 下 CREATE TABLE 的权限,否则可能导致双向同步任务异常。
创建 OMS 用户
CREATE USER OMS IDENTIFIED BY <YOUR_PASSWORD>; // YOUR_PASSWORD 为实际的用户密码 ALTER USER OMS QUOTA unlimited ON <USERS>; // USERS 为实际的用户表空间 ALTER USER OMS QUOTA unlimited ON <YOUR_USERNAME> // YOUR_USERNAME 为实际的数据源用户名赋予权限
GRANT CREATE ANY TABLE TO <YOUR_USERNAME>; GRANT INSERT ANY TABLE TO <YOUR_USERNAME>; GRANT UPDATE ANY TABLE TO <YOUR_USERNAME>; GRANT DELETE ANY TABLE TO <YOUR_USERNAME>; GRANT SELECT ANY TABLE TO <YOUR_USERNAME>;
注意事项
双向同步任务通过配置正向和反向任务,构成双向同步任务为您提供服务。
| 类型 | 描述 |
|---|---|
| 正向任务 |
|
| 反向任务 |
|
| 其他注意事项 |
|
关于数据冲突场景说明
为了保证双向同步数据的一致性,请确认业务对相同主键或非空唯一键的数据操作只在双向同步的一端执行。如果两端同时更新,可能导致数据出现冲突,主要包括以下场景。
INSERT 时唯一键冲突
如果业务在两端接近同时执行了相同唯一键的 INSERT 操作,当同步到目标端时,由于唯一性约束导致数据 INSERT 写入失败。您可以通过任务配置决定是否忽略冲突数据或者覆盖目标端数据。
UPDATE 时唯一键冲突
UPDATE 要更新的数据在目标端已存在,将使用源端数据覆盖更新目标端数据。
UPDATE 要更新的数据在目标端不存在,将导致数据更新失败。
UPDATE 要更新的数据,更新后目标端出现主键或唯一键冲突,将导致数据更新失败。
DELETE 时数据冲突
DELETE 时对应的记录不存在,DELETE 操作失败。
操作步骤
配置正向任务
将数据迁移任务配置至 选择类型和对象 步骤,选择 同步拓扑 为 双向同步。
配置数据迁移任务的具体操作,请参见相应类型的数据迁移任务文档。
在 迁移类型 区域,选择当前数据迁移任务的迁移类型。
同步拓扑为双向同步时,支持的迁移类型包括 结构迁移、全量迁移 和 增量同步。
参数 描述 结构迁移 结构迁移需要自行定义字符集的映射关系,数据迁移只会将源库的数据(结构)复制一份至目标数据库,不会对源数据(结构)造成影响。 全量迁移 全量迁移任务开始后,数据迁移服务会迁移源库表的存量数据至目标端数据库对应的表中。 增量同步 增量同步任务开始后,数据迁移会同步源端数据库发生变化的数据(新增、修改或删除)至目标端数据库对应的表中。增量同步 包括 DML 同步 和 DDL 同步,您可以根据需求进行自定义配置。详情请参见 自定义配置 DML/DDL。 在 选择迁移对象 区域,配置选择迁移对象的方式。
您可以通过 指定对象 和 匹配规则 两种方式选择迁移对象。

在 选择迁移范围 区域,选择需要迁移的对象。
选择 指定对象 时,数据迁移支持 库表迁移 和 整库迁移。库表迁移支持选择一个或多个库中的表、视图作为迁移对象,整库迁移支持选择整个数据库作为迁移对象。如果某个库选择了库表迁移,则该库不再支持整库迁移。如果某个库选择了整库迁移,则该库不再支持库表迁移。
选择 库表迁移 或 整库迁移 方式后,在左侧选中需要迁移的对象,单击 >,将其添加至右侧列表中。
数据迁移支持通过文本导入对象,并支持对目标端对象进行重命名、设置行过滤、查看列信息,以及移除单个或全部迁移对象等操作。

说明
当您选择 整库迁移 时:
右侧列表仅展示库名,不支持展示具体的对象。
如果您选择了 增量同步-DDL 同步 迁移类型,则源端新增表支持同步至目标端。
操作 描述 导入对象 在选择区域的右侧列表中,单击右上角的 导入对象。详情请参见 导入迁移对象。 重命名 数据迁移支持重命名迁移对象的名称,详情请参见 数据库库表重命名。 行过滤 数据迁移支持 WHERE条件实现行过滤,详情请参见 SQL 条件过滤数据。您还可以在 查看列 区域,查看迁移对象的列信息。移除/清除全部 数据迁移支持在数据映射时,对暂时选中至目标端的单个或多个对象进行移除操作。 - 移除单个迁移对象
在选择区域的右侧列表中,单击目标对象后的 移除 图标,即可移除该迁移对象。 - 移除全部迁移对象
在选择区域的右侧列表中,单击右上角的 清除全部。在对话框中,单击 确定,即可移除全部迁移对象。
选择 匹配规则,详情请参见 配置库到库的匹配规则。
单击 下一步。在 迁移选项 页面,配置各项参数。
全量迁移
在 选择类型和对象 页面,选中 全量迁移,才会显示下述参数。
参数 描述 读取并发配置 该参数用于配置全量迁移阶段从源端读取数据的并发数,最大限制为 512 并发数过高可能会造成源端压力过大,影响业务。 写入并发配置 该参数用于配置全量迁移阶段往目标端写入数据的并发数,最大限制为 512。并发数过高可能会造成目标端压力过大,影响业务。 是否限制全量迁移速率 您可以根据实际需求决定是否开启全量迁移速率限制。如果开启,请设置源端读取 RPS(全量迁移阶段每秒最多可以从源端读取行数的最大限制)、源端读取 BPS(全量迁移阶段每秒最多可以从源端读取流量的最大限制)、目标端写入 RPS(全量迁移阶段每秒最多可以往目标端写入行数的最大限制)和目标端写入 BPS(全量迁移阶段每秒最多可以往目标端写入流量的最大限制)。 说明
此处设置的 RPS 和 BPS 仅作为限速限流能力,全量迁移实际可以达到的性能受限于源端、目标端、实例规格配置等因素的影响。
目标端表对象存在记录时处理策略 处理策略包括 停止迁移 和 忽略: - 选择 停止迁移,当目标端表对象存在数据时,全量迁移会报错不允许迁移,请处理好目标端数据后再继续迁移。
注意
如果出错后单击恢复,数据迁移将忽略该配置选项,继续迁移表数据,请谨慎操作。
- 选择 忽略,当目标端表对象存在数据时,如果原数据与写入数据冲突,数据迁移采用将冲突数据记录日志,保留原数据不变的策略进行数据写入。
是否允许索引后置 索引后置功能能够缩短全量迁移耗时,您可以在此处设置是否允许全量数据迁移完成后再创建索引。选择索引后置的注意事项,请参见表格下方的说明。 注意
在 选择迁移类型 页面同时选中 结构迁移 和 全量迁移,才支持设置该选项。
- 仅非唯一键索引支持后置创建。
- 并发度配置大于等于 8 时,将开启索引中间结果集压缩,可能造成额外的 CPU 开销。
允许索引后置的情况下,建议您根据 OceanBase 数据库的硬件条件和当前业务流量情况,通过黑屏客户端工具调整以下业务租户参数。
// 文件内存缓冲区限制 ALTER SYSTEM SET _temporary_file_io_area_size = '10' tenant = 'xxx'; // OceanBase 数据库 V4.x 关闭限流 ALTER SYSTEM SET sys_bkgd_net_percentage = 100;- 选择 停止迁移,当目标端表对象存在数据时,全量迁移会报错不允许迁移,请处理好目标端数据后再继续迁移。
增量同步
在 选择类型和对象 页面,选中 双向同步 > 增量同步,才会显示下述参数。
参数 描述 写入并发配置 该参数用于配置增量同步阶段往目标端写入数据的并发数,最大限制为 512。并发数过高可能会造成目标端压力过大,影响业务。 是否限制增量迁移速率 您可以根据实际需求决定是否开启增量同步速率限制。如果开启,请设置目标端写入 RPS(增量同步阶段每秒最多可以同步至目标端的数据行数的最大值限制)和目标端写入 BPS(增量同步阶段每秒最多可以同步至目标端的流量的最大值限制)。 说明
此处设置的 RPS 和 BPS 仅作为限速限流能力,增量同步实际可以达到的性能受限于源端、目标端、实例规格配置等因素的影响。
增量同步起始位点 - 如果选择迁移类型时已选择 全量迁移,则不显示该参数。
- 如果选择迁移类型时未选择 全量迁移,但选择了 增量同步,请在此处指定迁移某个时间节点之后的数据,默认为当前系统时间。详情请参见 设置增量同步位点。
数据冲突时处理策略 包括 忽略报错,保持目标端原有数据 和 忽略冲突,使用源端数据覆盖目标端数据。详情请参见上文《关于数据冲突场景说明》模块的内容。 定时推进 Binlog 位点 如果开启该功能,您需要配置频率。支持配置的频率范围为 1~60,单位为秒。
配置完成后,数据迁移会在增量同步阶段根据您配置的频率,定期在 MySQL 源数据库执行CREATE DATABASE IF NOT EXISTS test命令,以推进 Binlog 位点。注意
仅迁移 MySQL 数据库的数据至 OceanBase 数据库 MySQL 兼容模式时,才显示该参数。
高级选项
当目标端 OceanBase 数据库为 V4.3.0 及之后版本,并且在 选择类型和对象 页面,选中 结构迁移 或 增量同步 > DDL 同步,才会显示该区域的参数。

目标端表对象存储类型包括 默认、行存、列存 和 行列混存,该配置用于确定结构迁移或增量同步时目标端表对象的存储类型。
说明
默认 选项是根据目标端参数配置自适应其他选项,是结构迁移的表对象或增量 DDL 的新增表对象根据设置的存储类型写对应的结构。
单击 下一步,系统对数据迁移任务进行预检查。
在 预检查 环节,数据迁移会检查数据库用户的读写权限、数据库的网络连接等是否符合要求。全部检查任务均通过后才能启动数据迁移任务。如果预检查报错:
您可以排查并处理问题后,重新执行预检查,直至预检查成功。
您也可以单击失败预检查项操作列中的 跳过,会弹出对话框提示您跳过本操作的具体影响,确认可以跳过后,请单击对话框中的 确定。
预检查成功后,单击 购买,前往 购买数据迁移实例 页面进行购买。
购买成功后,即可启动正向任务。购买详情请参见 购买数据迁移实例。如果您暂时无需启动任务,请单击 保存。后续您只能在 任务列表 页面进行相关操作。
配置反向任务
返回 任务列表 页面,待正向任务处于 监控中 的增量同步阶段且任务状态为 运行中 时,单击反向任务后的 配置。

在 配置反向迁移 页面,配置各项参数。

参数 描述 源端和目标端 显示数据迁移的源端和目标端。单击 连接详情,即可查看源端和目标端的云厂商、数据库类型、实例类型、地域等详细信息。 增量同步 反向任务的增量同步仅支持配置 DML 同步,请根据需求进行选择。 迁移对象 - 反向任务和正向任务选择迁移对象的方式保持一致。单击 查看,即可在 查看对象 对话框中查询迁移的对象。
- 增量同步 相关配置:
- 写入并发配置
该参数用于配置增量同步阶段往目标端写入数据的并发数,最大限制为 512。并发数过高可能会造成目标端压力过大,影响业务。 - 是否限制增量迁移速率
您可以根据实际需求决定是否开启增量同步速率限制。如果开启,请设置 RPS(增量同步阶段每秒最多可以同步至目标端的数据行数的最大值限制)和 BPS(增量同步阶段每秒最多可以同步至目标端的流量的最大值限制)。说明
此处设置的 RPS 和 BPS 仅作为限速限流能力,增量同步实际可以达到的性能受限于源端、目标端、实例规格配置等因素的影响。
- 数据冲突时处理策略
包括 忽略报错,保持目标端原有数据 和 忽略冲突,使用源端数据覆盖目标端数据。详情请参见上文《关于数据冲突场景说明》模块的内容。
- 写入并发配置
单击 下一步,系统对反向任务进行预检查。
在 预检查 环节,数据迁移会检查数据库用户的读写权限、数据库的网络连接等是否符合要求。全部检查任务均通过后才能启动数据迁移任务。如果预检查报错:
您可以排查并处理问题后,重新执行预检查,直至预检查成功。
您也可以单击失败预检查项操作列中的 跳过,会弹出对话框提示您跳过本操作的具体影响,确认可以跳过后,请单击对话框中的 确定。
预检查成功后,单击 购买,前往 购买数据迁移实例 页面进行购买。
购买成功后,即可启动反向任务。购买详情请参见 购买数据迁移实例。如果您暂时无需启动任务,请单击 保存。后续您只能在 任务列表 页面进行相关操作。