配置双向同步任务

本文以 MySQL 数据库至 OceanBase 数据库 MySQL 租户的双向同步任务为例,为您介绍双向同步的相关说明和操作步骤。

重要

如果数据迁移任务长期处于非活跃状态(任务状态为 失败已暂停已完成),受增量日志保留时长等影响,任务可能无法恢复。数据传输将主动释放处于非活跃状态超过 3 天的数据迁移任务,以回收相关资源,建议您为任务配置告警并及时处理任务相关异常。

背景信息

什么是双向同步

双向同步支持在数据增量同步阶段,同时配置相同数据源的正向和反向迁移任务,实现数据可以在源端和目标端之间相互同步的能力。通过防循环复制的机制,可以避免某一方向已经同步过的数据,不会被对向任务重复同步。

说明

双向同步并不意味着业务可以在两端同时进行写入操作。如果业务同时对相同的数据(同一主键或唯一键)进行写入操作,需要在双向同步任务的配置上定义数据冲突的处理策略(覆盖或忽略),强烈建议业务层面避免对两端同时进行相同数据的写入操作。

支持双向同步的迁移类型

数据传输支持 MySQL 数据库与 OceanBase 数据库 MySQL 租户、Oracle 数据库与 OceanBase 数据库 Oracle 租户,以及 OceanBase 数据库与 OceanBase 数据库之间的双向数据同步。使用限制、注意事项等更多详情请参见相应类型的数据迁移文档。

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>;

注意事项

双向同步任务通过配置正向和反向任务,构成双向同步任务为您提供服务。

类型

描述

正向任务

  • 正向任务支持结构迁移、全量迁移、增量 DML、增量 DDL 和全量校验。

  • 汇聚库、汇聚表的场景不支持配置正向任务。例如,源端 a、b 汇聚至目标端 c。

  • 结构迁移和全量迁移阶段,请勿执行库或表结构变更的 DDL 操作,否则会导致任务失败。

  • 请勿在通过匹配规则方式选择迁移对象时,将事务表配置为排除对象规则。

反向任务

  • 仅当正向任务处于增量同步阶段,并且任务状态为运行中时,支持配置反向任务。

  • 反向任务仅支持增量 DML。

  • 配置反向任务时,不支持编辑同步对象,默认根据正向任务自动匹配。

其他注意事项

  • 如果双向同步任务中存在无主键或无非空唯一键表,在同步的过程中,可能导致目标端对应库表出现重复数据。

  • 双向同步任务将在 MySQL、Oracle 端创建名为 OMS 的库或 Schema,并且在 OMS 库或 Schema 中创建事务表,以避免数据循环同步。任务运行期间,请勿对事务表进行任何的 DML/DDL 操作。

关于数据冲突场景说明

为了保证双向同步数据的一致性,请确认业务对相同主键或非空唯一键的数据操作只在双向同步的一端执行。如果两端同时更新,可能导致数据出现冲突,主要包括以下场景。

  • INSERT 时唯一键冲突

    如果业务在两端接近同时执行了相同唯一键的 INSERT 操作,当同步到目标端时,由于唯一性约束导致数据 INSERT 写入失败。您可以通过任务配置决定是否忽略冲突数据或者覆盖目标端数据。

  • UPDATE 时唯一键冲突

    • UPDATE 要更新的数据在目标端已存在,将使用源端数据覆盖更新目标端数据。

    • UPDATE 要更新的数据在目标端不存在,将导致数据更新失败。

    • UPDATE 要更新的数据,更新后目标端出现主键或唯一键冲突,将导致数据更新失败。

  • DELETE 时数据冲突

    • DELETE 时对应的记录不存在,DELETE 操作失败。

操作步骤

配置正向任务

  1. 将数据迁移任务配置至 选择迁移类型 步骤,选择 同步拓扑 双向同步

    详情请参见相应类型的 数据迁移 任务文档。

    image

  2. 选择迁移类型 页面,选择当前数据迁移任务的迁移类型。

    同步拓扑为双向同步时,支持的迁移类型包括 结构迁移全量迁移增量同步全量校验

    image

    迁移类型

    描述

    结构迁移

    结构迁移任务开始后,数据传输会源库中的数据对象定义(表、索引、约束、注释和视图等)迁移到目标端数据库中,并自动过滤临时表。

    全量迁移

    全量迁移任务开始后,数据传输会将源端库表的存量数据迁移至目标端数据库对应的表中。

    增量同步

    增量同步任务开始后,数据传输会将源端数据库发生变化的数据(新增、修改或删除)同步至目标端数据库对应的表中。

    增量同步 包括 DML 同步DDL 同步,您可以根据需求进行自定义配置。详情请参见 自定义配置 DDL/DML

    说明
    • 双向同步场景下,DML 同步 选项不允许取消勾选

    • 双向同步场景下,仅配置正向任务的 DDL 同步。

    全量校验

    在全量迁移完成、增量数据同步至目标端并与源端基本追平后,数据传输会自动发起一轮针对源端数据库配置的数据表和目标表的全量数据校验任务。

  3. 单击 下一步。在 选择迁移对象 页面,选择当前数据迁移任务的迁移对象。

    您可以通过 指定对象匹配规则 两个入口选择迁移对象。本文为您介绍通过 指定对象 方式选择迁移对象的具体操作,配置匹配规则的详情请参见 配置匹配规则 中库到库的通配规则说明和配置方式。

    重要
    • 待迁移的表名和其中的列名不能包含中文字符。

    • 当数据库的库名或表名存在“$$”字符时,会影响数据迁移任务的创建。

    • 如果您在 选择迁移类型 步骤已勾选 DDL 同步,建议通过匹配规则方式选择迁移对象,以确保所有符合迁移对象规则的新增对象都将被同步。如果您通过指定对象方式选择迁移对象,则新增对象或重命名后的对象将不会被同步。

    image.png

    1. 选择迁移对象 区域,选中 指定对象

    2. 选择迁移范围 区域的 源端对象 列表选中需要迁移的对象。您可以选择一个或多个库的表、视图作为迁移对象。

    3. 单击 >,将其添加至 目标端对象 列表中。

    数据传输支持通过文本导入对象,并支持对目标端对象进行重命名、设置行过滤、查看列信息,以及移除单个或全部迁移对象等操作。

    说明

    通过 匹配规则 方式选择迁移对象时,重命名能力由匹配规则语法覆盖,操作处仅支持设置过滤条件。详情请参见 配置匹配规则

    操作

    步骤

    导入对象

    1. 在选择区域的右侧列表中,单击右上角的 导入对象

    2. 在对话框中,单击 确定

      重要

      导入会覆盖之前的操作选择,请谨慎操作。

    3. 导入迁移对象 对话框中,导入需要迁移的对象。

      您可以通过导入 CSV 文件的方式进行库表重命名、设置行过滤条件等操作。详情请参见 下载和导入迁移对象配置

    4. 单击 检验合法性

      完成迁移对象导入后,请先检验合法性。目前暂不支持列字段映射。

    5. 通过检验后,单击 确定

    重命名

    数据传输支持重命名迁移对象的名称,详情请参见 数据库库表重命名

    设置

    数据传输支持 WHERE 条件实现行过滤,详情请参见 SQL 条件过滤数据

    您还可以在 查看列 区域,查看迁移对象的列信息。

    移除/全部移除

    数据传输支持在数据映射时,对暂时选中到目标端的单个或多个对象进行移除操作。

    • 移除单个迁移对象

      在选择区域的右侧列表中,鼠标悬停至目标对象,单击显示的 移除,即可移除该迁移对象。

    • 移除全部迁移对象

      在选择区域的右侧列表中,单击右上角的 全部移除。在对话框中,单击 确定,即可移除全部迁移对象。

  4. 单击 下一步。在 迁移选项 页面,配置各项参数。

    • 全量迁移

      选择迁移类型 页面,选中 双向同步 > 全量迁移,才会显示下述参数。

      image

      参数

      描述

      读取并发配置

      该参数用于配置全量迁移阶段从源端读取数据的并发数,最大限制为 512 并发数过高可能会造成源端压力过大,影响业务。

      写入并发配置

      该参数用于配置全量迁移阶段往目标端写入数据的并发数,最大限制为 512。并发数过高可能会造成目标端压力过大,影响业务。

      全量迁移速率限制

      您可以根据实际需求决定是否开启全量迁移速率限制。如果开启,请设置 RPS(全量迁移阶段每秒最多可以迁移至目标端的数据行数的最大值限制)和 BPS(全量迁移阶段每秒最多可以迁移至目标端的数据量的最大值限制)。

      说明

      此处设置的 RPS 和 BPS 仅作为限速限流能力,全量迁移实际可以达到的性能受限于源端、目标端、实例规格配置等因素的影响。

      目标端表对象存在记录时处理策略

      处理策略包括 忽略停止迁移

      • 选择 忽略:当目标端表对象存在数据时,如果原数据与写入数据冲突,数据传输采用将冲突数据记录日志,保留原数据不变的策略进行数据写入。

        重要

        选择 忽略,全量校验将使用 IN 模式拉取数据,无法校验目标端存在源端没有的数据的场景,并且校验性能会有一定程度降级。

      • 选择默认值 停止迁移:当目标端表对象存在数据时,全量迁移会报错不允许迁移,请处理好目标端数据后再继续迁移。

        重要

        如果出错后单击恢复,数据传输将忽略该配置选项,继续迁移表数据,请谨慎操作。

      是否允许索引后置

      您可以设置是否允许全量数据迁移完成后再创建索引,索引后置功能能够缩短全量迁移耗时。选择索引后置的注意事项,请参见表格下方的说明。

      重要
      • 选择迁移类型 页面同时选中 结构迁移 全量迁移,才会显示该参数。

      • 仅非唯一键索引支持后置创建。

      • 执行索引时,如果目标端 OceanBase 数据库遇到下述报错,数据传输会进行忽略,默认索引创建成功,不会再重复创建。

        • OceanBase 数据库 MySQL 租户报错 Duplicate key name

        • OceanBase 数据库 Oracle 租户报错 name is already used by an existing object

      当您选择 允许 后,请进行下述配置:

      • 单条索引 DDL 并发配置:并行度越高,资源消耗越大,迁移速度越快。

      • 最大并发索引 DDL 数量配置:同一时刻,系统调用的后置索引 DDL 数量的最大值限制。

      允许索引后置的情况下,建议您根据 OceanBase 数据库的硬件条件和当前业务流量情况,通过黑屏客户端工具调整以下业务租户参数。

      // 文件内存缓冲区限制
      alter system set _temporary_file_io_area_size = '10' tenant = 'xxx'; 
      // V4.x 关闭限流
      alter system set sys_bkgd_net_percentage = 100;  
    • 增量同步

      选择迁移类型 页面,选中 双向同步 > 增量同步,才会显示下述参数。

      image

      参数

      描述

      写入并发配置

      该参数用于配置增量同步阶段往目标端写入数据的并发数,最大限制为 512。并发数过高可能会造成目标端压力过大,影响业务。

      增量同步速率限制

      您可以根据实际需求决定是否开启增量同步速率限制。如果开启,请设置 RPS(增量同步阶段每秒最多可以同步至目标端的数据行数的最大值限制)和 BPS(增量同步阶段每秒最多可以同步至目标端的数据量的最大值限制)。

      说明

      此处设置的 RPS 和 BPS 仅作为限速限流能力,增量同步实际可以达到的性能受限于源端、目标端、实例规格配置等因素的影响。

      数据冲突时处理策略

      包括 忽略报错,保持目标端原有数据忽略冲突,使用源端数据覆盖目标端数据。详情请参见上文《关于数据冲突场景说明》模块的内容。

  5. 单击 预检查,系统对数据迁移任务进行预检查。

    预检查 环节,数据传输会检查数据库用户的读写权限、数据库的网络连接等是否符合要求。全部检查任务均通过后才能启动数据迁移任务。如果预检查报错:

    • 您可以在排查并处理问题后,重新执行预检查,直至预检查成功。

    • 您也可以单击错误预检查项操作列中的 跳过,会弹出对话框提示您跳过本操作的具体影响,确认可以跳过后,请单击对话框中的 确定

  6. 预检查成功后,单击 启动任务,即可启动正向任务。

配置反向任务

  1. 返回 迁移任务列表 页面,待正向任务处于监控中的增量同步阶段且任务状态为运行中时,单击反向任务后的 配置

    image

  2. 配置反向任务 对话框,配置各项参数。

    image

    参数

    描述

    任务实例

    从下拉列表中选择一个未配置的任务实例,用于配置反向任务。如果不存在未配置的任务实例,请进行购买。详情请参见 购买数据迁移任务

    写入并发配置

    该参数用于配置全量迁移阶段往目标端写入数据的并发数,最大限制为 512。并发数过高可能会造成目标端压力过大,影响业务。

    增量同步速率限制

    您可以根据实际需求决定是否开启增量同步速率限制。

    数据冲突时处理策略

    包括 忽略报错,保持目标端原有数据忽略冲突,使用源端数据覆盖目标端数据

  3. 单击 预检查,系统对反向任务进行预检查。

  4. 预检查成功后,单击 启动任务,即可启动反向任务。