tencent cloud

文档反馈

构建双向同步数据结构

最后更新时间:2024-03-08 10:14:50

    操作场景

    数据传输服务 DTS 支持两个数据库之间的双向数据同步,可应用于异地多活场景。双向同步通过创建两个单向同步任务来构建双向的拓扑,支持在同步过程中,两个数据库实例同时写入数据。
    单向同步的约束、操作限制等要求双向同步都需要满足,请参考 数据同步 中的对应同步场景。

    注意事项

    DTS 在执行全量数据同步时,会占用一定源端实例资源,可能会导致源实例负载上升,增加数据库自身压力。如果您数据库配置过低,建议您在业务低峰期进行。
    为了避免数据重复,请确保需要同步的表具有主键或者非空唯一键,对于没有主键或者非空唯一键的表,有数据重复的风险。
    用户应提前规划好数据,两个源端负责更新(增、删、改)不同主键的数据,避免主键冲突或者相同主键数据互相覆盖等情况。例如 A 数据库上更新1,3,5的主键数据,B 数据库上更新2,4,6的主键数据。如果因为业务原因,两个源端负责的主键存在交叉,需要参考 推荐配置,选择合理的冲突策略,使同步行为和数据符合预期。
    提前准备好目标数据库,并对执行同步任务的账号 授权源库和目标库的对应权限

    应用限制

    双向同步最多仅支持在一个方向进行 DDL,同步链路不能形成环路(正向同步、反向同步只能选择一个进行 DDL)。
    MySQL/TDSQL-C MySQL/MariaDB/Percona/TDSQL MySQL 之间的同步链接都支持双向同步,仅 TDSQL MySQL(MariaDB 内核)作为源或者目标库时,不支持双向同步。

    典型场景推荐配置

    双向同步是通过创建两个单向同步任务来构建双向拓扑,每个单向同步的步骤与普通的单向同步的步骤类似,只是在如下同步选项设置有差异。

    同步选项设置差异

    如下列出了典型场景的推荐配置,请用户参考操作。
    场景
    时间要求
    同步任务
    初始化类型
    已存在同名表
    冲突处理机制
    同步操作类型
    场景一:实例 A 有库表结构和数据,实例 B 为空
    需要等任务一进行到“同步增量”阶段再创建任务二
    任务一:正向同步 A > B
    结构初始化 + 全量数据初始化
    前置校验并报错
    请用户自行选择。
    示例:如果某个主键发生冲突,用户需要以 A 的内容为准,则任务一选择冲突覆盖,任务二选择冲突忽略或者冲突报错。
    冲突策略的生效对象仅对当前发生主键冲突时的主键数据。
    DDL 最多支持在一个任务中选择。
    除 DDL 外,其他操作类型两个任务保持一致。
    任务二:反向同步 B > A
    不选择
    忽略并继续执行
    场景二:实例 A 有库表结构和数据,实例 B 只有库表结构,无数据
    任务一:正向同步 A > B
    全量数据初始化
    忽略并继续执行
    任务二:反向同步 B > A
    不选择
    忽略并继续执行
    场景三:实例 A、B 都有库表结构和数据
    任务一:正向同步 A > B
    全量数据初始化
    忽略并继续执行
    任务二:反向同步 B > A
    全量数据初始化
    忽略并继续执行

    操作步骤

    本场景以构建上海地域自建 MySQL A 与北京地域腾讯云 MySQL B 的双向同步为例,A 初始状态有库表结构和数据,B 初始状态为空。发生主键冲突时以 A 的更新为准。A > B 的同步,主键冲突策略为冲突覆盖,同步 DDL + DML;B > A 的同步,主键冲突策略为冲突忽略,仅同步 DML。
    

    创建同步任务一:正向同步 A > B

    1. 登录 数据同步购买页,选择相应配置,单击立即购买
    2. 购买完成后,返回 数据同步列表,可看到刚创建的数据同步任务,刚创建的同步任务需要进行配置后才可以使用。
    3. 在数据同步列表,单击操作列的配置,进入配置同步任务页面。
    4. 在配置同步任务页面,配置源端实例、账号密码,配置目标端实例、账号和密码,测试连通性后,单击下一步
    
    设置项
    参数
    描述
    任务设置
    任务名称
    DTS 会自动生成一个任务名称,用户可以根据实际情况进行设置。
    运行模式
    支持立即执行和定时执行两种模式。
    源实例设置
    源实例类型
    购买时所选择的数据库 A 的类型,不可修改。
    源实例地域
    购买时选择的数据库 A 所在地域,不可修改。
    服务提供商
    选择“普通”。
    接入类型
    自建数据库一般可以选择公网方式,也可以选择 VPN 接入,专线或者云联网的方式,需要根据实际的网络情况选择。
    本场景以“公网”为例,不同接入类型的准备工作请参考 准备工作概述
    目标实例设置
    目标实例类型
    购买时选择的目标数据库 B 的类型,不可修改。
    目标实例地域
    购买时选择的目标数据库 B 所在地域,不可修改。
    接入类型
    本场景选择“云数据库”。
    实例 ID
    数据库 B 的实例 ID。
    账号
    数据库 B 的账号,账号权限需要满足要求。
    密码
    数据库 B 的密码。
    5. 在设置同步选项和同步对象页面,将对数据初始化选项、数据同步选项、同步对象选项进行设置,在设置完成后单击保存并下一步
    
    设置项
    参数
    描述
    数据初始化选项
    初始化类型
    本场景选择结构初始化 + 全量数据初始化。
    结构初始化:同步任务执行时会先将源实例中表结构初始化到目标实例中。
    全量数据初始化:同步任务执行时会先将源实例中数据初始化到目标实例中。
    已存在同名表
    本场景选择前置校验并报错。
    前置校验并报错:存在同名表则报错,流程不再继续。
    忽略并继续执行:全量数据和增量数据直接追加目标实例的表中。
    数据同步选项
    冲突处理机制
    根据业务情况自行选择,本场景选择冲突覆盖。
    冲突报错:在同步时发现表主键冲突,报错并暂停数据同步任务。
    冲突忽略:在同步时发现表主键冲突,保留目标库主键记录。
    冲突覆盖:在同步时发现表主键冲突,用源库主键记录覆盖目标库主键记录。
    同步操作类型
    支持操作:Insert、Update、Delete、DDL。打开 “DDL 自定义”,可以根据需要选择不同的 DDL 同步策略。详情请参考 设置 SQL 过滤策略
    双向同步最多支持在一个同步任务中选择 DDL。本场景在任务一中选择 DDL,在任务二中不选择。
    同步对象选项
    源实例库表对象
    选择待同步的对象。
    已选对象
    支持库表映射(库表重命名),将鼠标悬浮在库名、表名上即显示编辑按钮,单击后可在弹窗中填写新的名称。
    6. 在 A > B 的正向同步任务中,DTS 会进行源库和目标库参数校验。完成校验并全部校验项通过后,单击启动任务。在 B > A 的反向同步任务中,DTS 还会增加 DDL 校验。
    说明:
    如果校验任务不通过,可以参考 校验不通过处理方法 修复问题后重新发起校验任务。
    在校验结果中出现告警项不影响启动任务,但推荐单击查看详情获取建议进行调整。
    DDL 校验
    源库和目标库参数校验
    
    7. 返回数据同步任务列表,任务开始进入运行中状态。

    创建同步任务二:反向同步 B > A

    正向同步和反向同步操作基本一致,以下仅对差异点进行详细说明。
    1. 确定任务一的状态,在任务一进行到“同步增量”阶段,再开始配置任务二。 这个时间要求,仅对 B 数据为空的场景,其他场景不需要等待。
    2. 设置同步源和目标数据库。 本步骤中的源和目标数据需要与任务一中的数据进行互换。
    
    3. 设置同步选项和同步对象。
    初始化类型:不选择。
    已存在同名表:忽略并继续执行。
    主键冲突处理机制:根据业务情况自行选择,本场景选择冲突忽略。
    同步操作类型:双向同步仅支持在一个同步任务中选择 DDL。本场景在任务一中选择 DDL,在任务二中不选择。
    
    4. 在校验任务页面,进行 DDL 校验。

    结束同步任务

    如不需要同步任务,可选择操作列的更多 > 结束,关闭同步任务。
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持