操作场景
多对一同步即将多个源端数据库的内容同步到一个目标数据库。用户使用单个数据库由于负载压力大或者受限于地域原因,经常会做数据拆分,使用多个数据库实例来存储同种类型的库表,但是这样给数据查询带来了不便。使用多对一同步功能,可以解决用户的这类问题。
注意事项
DTS 在执行全量数据同步时,会占用一定源端实例资源,可能会导致源实例负载上升,增加数据库自身压力。如果您数据库配置过低,建议您在业务低峰期进行。
为了避免数据重复,请确保需要同步的表具有主键或者非空唯一键,对于没有主键或者非空唯一键的表,有数据重复的风险。
用户应提前规划好数据,各个源端负责更新(增、删、改)不同主键的数据,避免主键冲突或者相同主键数据互相覆盖等情况。如果因为业务原因,各源端负责的主键存在交叉,需要参考 推荐配置,选择合理的冲突策略,使同步行为和数据符合预期。
应用限制
多个同步任务配置中 DDL 不能形成环形链路。
DDL 配置原则
多个同步任务配置中 DDL 不能形成环形链路,否则可能造成 DDL 语句在系统中循环,进而引发错误。
目标端同一个库表对象不能接收多个源端的 DDL 同步,否则多个源端的 DDL 可能在目标端形成冲突,进而引发错误。
多张同名表合并为一张表类型的多对一同步中,只能在一个同步任务中选择 DDL。
其他类型的多对一同步(如多张不同名称的表合并到一个库),可以在每个任务中选择 DDL,请用户根据实际情况选择合适的 DDL 同步策略。
在校验阶段,同步系统会结合当前用户的所有其他同步任务,判断正在新建的同步任务是否会造成 DDL 循环或者冲突,并给出提示供用户参考。
典型场景推荐配置
典型场景推荐配置
多对一同步是通过创建多个单向同步任务来构建多对一拓扑,每个单向同步的步骤与普通的单向同步的步骤类似,只是在如下同步选项设置有差异。
如下列出了典型场景的推荐配置,请用户参考操作。
示例:构建实例 A、B 到 C 的同步,且实例 A、B 中有相同名称的表需要同步到实例 C,任务一 A > C 同步,任务二 B > C 同步。如有更多的源端需要同步到目的端,参考任务二增加同步任务即可。
场景 | 时间要求 | 同步任务 | 初始化类型 | 已存在同名表 | 冲突处理机制 | 同步操作类型 |
场景一:实例 A、B 有库表结构和数据,实例 C 为空 | 需要等任务一进行到“同步增量”阶段再启动任务二 | 任务一 | 结构初始化 + 全量数据初始化 | 忽略并继续执行 | 请用户自行选择。 示例:如果某个主键发生冲突,用户需要以 A 的内容为准,则任务一选择冲突覆盖,任务二选择冲突忽略或者冲突报错。 冲突策略的生效对象仅对当前发生主键冲突时的主键数据。 | 多张同名表合一同步的场景中,最多支持在一个任务中选择 DDL。 除 DDL 外,其他操作类型多个任务保持一致。 |
| | | | 任务二 | 全量数据初始化 | 忽略并继续执行 |
| | 场景二:实例 A、B 有库表结构和数据,实例 C 只有库表结构,无数据 | 无 | 任务一 | 全量数据初始化 | 忽略并继续执行 |
| | | | 任务二 | 同任务一 | 同任务一 |
| | 场景三:实例 A、B、C 都有库表结构和数据 | 无 | 任务一 | 全量数据初始化 | 忽略并继续执行 |
| | | | 任务二 | 同任务一 | 同任务一 |
操作步骤
如下以 MySQL 二对一同步(实例 A、B 有库表和数据,实例 C 为空)为例进行介绍,其他数据库的多对一同步操作类似,请参考本指导进行。
创建同步任务一(实例 A > 实例 C)
1. 登录 数据同步购买页,选择相应配置,单击立即购买。
参数 | 描述 |
计费模式 | 支持包年包月和按量计费。 |
源实例类型 | 选择源数据库 A 的类型。 |
源实例地域 | 选择源数据库 A 所在地域。 |
目的实例类型 | 选择目标数据库 C 的类型。 |
目的实例地域 | 选择目标数据库 C 所在地域。 |
同步任务规格 |
2. 购买完成后,返回 数据同步列表,可看到刚创建的数据同步任务,刚创建的同步任务需要进行配置后才可以使用。
3. 在数据同步列表,单击操作列的配置,进入配置同步任务页面。
4. 在配置同步任务页面,配置源端实例、账号密码,配置目标端实例、账号和密码,测试连通性后,单击下一步。
设置项 | 参数 | 描述 |
任务设置 | 任务名称 | DTS 会自动生成一个任务名称,用户可以根据实际情况进行设置。 |
| 运行模式 | 支持立即执行和定时执行两种模式。 |
源实例设置 | 源实例类型 | 购买时所选择的源数据库类型,不可修改。 |
| 源实例地域 | 购买时选择的源数据库所在地域,不可修改。 |
| 服务提供商 | 自建数据库或者腾讯云数据库请选择“普通”;第三方云厂商数据库,请选择对应的商家,AWS、阿里云。 |
| 接入类型 | 公网:源数据库可以通过公网 IP 访问。 云数据库:源数据库属于腾讯云数据库实例。 |
目标实例设置 | 目标实例类型 | 购买时选择的目标数据库 C 的类型,不可修改。 |
| 目标实例地域 | 购买时选择的目标数据库 C 所在地域,不可修改。 |
| 接入类型 | 本场景选择“云数据库”。 |
| 实例 ID | 数据库 C 的实例 ID。 |
| 账号 | 数据库 C 的账号,账号权限需要满足要求。 |
| 密码 | 数据库 C 的密码。 |
5. 在设置同步选项和同步对象页面,将对数据初始化选项、数据同步选项、同步对象选项进行设置,在设置完成后单击保存并下一步。
设置项 | 参数 | 描述 |
数据初始化选项 | 初始化类型 | 结构初始化:同步任务执行时会先将源实例中表结构初始化到目标实例中。 全量数据初始化:同步任务执行时会先将源实例中数据初始化到目标实例中。 本场景选择结构初始化 + 全量数据初始化。 |
| 已存在同名表 | 前置校验并报错:存在同名表则报错,流程不再继续。 忽略并继续执行:全量数据和增量数据直接追加目标实例的表中。 本场景选择忽略并继续执行。 |
数据同步选项 | 冲突处理机制 | 冲突报错:在同步时发现表主键冲突,报错并暂停数据同步任务。 冲突忽略:在同步时发现表主键冲突,保留目标库主键记录。 冲突覆盖:在同步时发现表主键冲突,用源库主键记录覆盖目标库主键记录。 用户根据实际情况自行选择。 |
| 同步操作类型 | 支持操作:Insert、Update、Delete、DDL。多对一同步最多支持在一个同步任务中选择 DDL。本场景在任务一中选择 DDL,其他任务中不选择。 |
同步对象选项 | 源实例库表对象 | 选择待同步的对象,支持库级别和表及视图级别。 |
| 已选对象 | 展示已选择的同步对象,支持库表映射。 |
6. 在校验任务页面,系统会先进行 DDL 校验,然后进行源库和目标库参数校验。完成校验并全部校验项通过后,单击启动任务。
DDL 校验
源库和目标库参数校验
7. 返回数据同步任务列表,任务开始进入运行中状态。
创建同步任务二(实例 B > 实例 C)
等到上一个同步任务进行到同步增量阶段后,再配置同步任务二。
同步任务二和同步任务一操作基本一致,以下仅对差异点进行详细说明。1. 设置同步源和目标数据库。
源实例设置和目标实例设置中分别填入实例 B 和实例 C 的数据。
2. 设置同步选项和同步对象。
初始化类型:只选择全量数据初始化,不选择结构初始化。
已存在同名表:忽略并继续执行。
冲突处理机制:请用户自行选择。
同步操作类型:不选择 DDL。多对一同步仅支持在一个同步任务选择 DDL。本场景中在任务一中选择 DDL,其他任务中不选择。
结束同步任务
如不需要同步任务,可选择操作列的更多 > 结束,关闭同步任务。