操作场景
数据传输服务 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
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 校验。
结束同步任务
如不需要同步任务,可选择操作列的更多 > 结束,关闭同步任务。
本页内容是否解决了您的问题?