文档中心>数据传输服务>数据同步>云数据库跨账号实例间同步

云数据库跨账号实例间同步

最近更新时间:2024-11-07 09:15:02

我的收藏

操作场景

云数据库跨账号实例间数据同步,指源库和目标库都属于腾讯云数据库实例,但所属不同的主账号名下,这种数据库实例之间的数据同步。本章节介绍通过 DTS 数据同步功能实现从其他账号腾讯云数据库实例同步数据至本账号下云数据库实例。
说明:
不支持通过云数据库跨账号的方式,进行中国站和国际站之间的云数据库同步,如有相关诉求,请通过公网方式。

支持范围

支持腾讯云数据库实例 MySQL/TDSQL MySQL/TDSQL-C MySQL/MariaDB/PostgreSQL 间的跨账号同步,具体请参见 数据同步支持的数据库 中的表信息跨账号同步列。

前提条件

已创建目标数据库实例。

注意事项

本操作中涉及多处账号信息配置,如下列出了主要配置逻辑,以方便用户理解和正确配置。
数据同步方向:源数据库(其他账号的数据库实例)> 目标数据库(本账号的数据库实例)。
执行同步任务的账号可以是目标数据库的主账号,也可以目标数据库的子账号。
使用主账号执行同步任务。操作任务前,需要请求源数据所属主账号持有人进行角色授权(给目标数据库的主账号),使目标数据库主账号可以访问源数据库。
使用子账号执行同步任务。操作任务前,需要先请求源数据所属主账号持有人进行角色授权(给目标数据库的主账号),使目标数据库主账号可以访问源数据库。然后再请求目标数据库所属主账号持有人进行策略授权(对目标数据库的子账号),使目标数据库子账号可以访问源数据库。

授权账号

使用主账号执行同步任务,请操作步骤1 - 6,使用子账号执行同步任务,请操作步骤1 - 11。
1. 使用源数据库所属的腾讯云主账号登录 访问管理控制台(如果子账号有CAM和角色相关的权限,也可以使用子账号登录)。
2. 左侧导航单击角色,进入角色管理页面,然后单击新建角色
3. 在选择角色载体页面,选择腾讯云账户方式。

4. 输入角色载体信息页面,配置相关信息,单击下一步

云账号类型:选择其他主账号
账号 ID:填入目标数据库所属的腾讯云主账号 ID,主账号 ID 可在 账号信息 中查看。目标数据库实例属于子账号名下时,此处也填写主账号 ID。
外部 ID:可依据情况,选择性开启。
说明:
如果使用了外部 ID,请用户自行记录和保存该 ID,后续配置需要填写。
5. 配置角色策略页面,选择 DTS 策略和源数据库服务对应策略,单击下一步
DTS 服务策略,选择 QcloudDTSReadOnlyAccess。
源数据库服务对应策略。
源数据库为云数据库 MySQL,选择 QcloudCDBReadOnlyAccess (云数据库 CDB 相关资源只读访问权限),QcloudCDBInnerReadOnlyAccess(CDB 的读取列表权限)。
源数据库为云数据库 MariaDB,选择 QcloudMariaDBReadOnlyAccess(云数据库 MariaDB 只读访问权限)。
源数据库为云数据库 TDSQL MySQL,选择 QcloudTDSQLReadOnlyAccess(TDSQL MySQL 版(TDSQL for MySQL)只读访问权限)。
源数据库为云数据库 TDSQL-C MySQL,选择 QcloudCynosDBReadOnlyAccess(云原生数据库 TDSQL-C(CynosDB)只读访问权限)。
源数据库为云数据库 PostgreSQL,选择 QcloudPostgreSQLReadOnlyAccess(云数据库 PostgreSQL 只读访问权限)。

6. 配置角色标签,然后在审阅页面,设置角色名称,单击完成后该角色创建完成。
说明:
配置后记录该名称,后续创建同步任务时需要输入。

说明:
如果执行同步任务的账号为主账号,授权步骤到此结束;如果为子账号,还需要继续进行如下步骤7-11,请求当前主账号持有人,对子账号进行策略授权。
7. (可选)使用目标数据库所属的腾讯云主账号登录 访问管理控制台,在左侧导航单击策略,然后在右侧单击新建自定义策略,并选择按策略语法创建

8. (可选)选择空白模板,然后单击下一步

9. (可选)创建一个策略,策略的名称以及描述可以根据自己的需求填写,策略内容复制示例代码后,将红框中的内容替换成对应的信息。
说明:
本步骤如果输入正确的语法格式后仍然提示报错,可能是使用了源数据库的主账号进行操作,需要从步骤7开始,使用目标库的主账号登录后创建策略。

策略语法示例:
{
"version": "2.0",
"statement": [
{
"effect": "allow",
"action": ["name/sts:AssumeRole"],
"resource": ["qcs::cam::uin/10*******8:roleName/DTS-role"]
}
]
}
10. (可选)单击完成后返回到策略列表页,在列表页中单击关联用户/组


11. (可选)选择目标数据库实例所属子账号(即执行同步任务的子账号),单击确定,如下图所示。


创建同步任务

1. 使用目标数据库实例所属腾讯云账号,登录 DTS 控制台
2. 选择数据同步 > 新建同步任务,购买一个新的同步任务。
3. 购买完成后,返回数据同步列表,单击操作列的配置,进入配置同步任务页面。
4. 在设置源和目标数据页面,配置源库和目标库信息。下面以 MySQL 到 MySQL 的同步为例进行介绍。

跨账号关键参数配置如下:
接入类型:选择云数据库,表示源数据库属于腾讯云数据库实例。
是否跨账号:选择跨账号
跨腾讯云账号 ID: 填入源数据库所属的主账号 ID。
跨账号授权角色名称。即前文 授权账号 步骤6中创建的角色名称。您可以通过 角色 以及 跨账号角色 了解更多关于角色的概念。
角色外部 ID:如果前文 授权账号 步骤4中设置了外部 ID,则这里则必须按照设置的内容正确填写,否则会发生权限报错。没有设置则不需要填写。
说明:
完成上述配置后,选择对应的所属地域,即可获取到跨账号下的实例列表,如果获取实例出现报错,则可能为配置错误,或者未授权,请参考 常见问题 进行处理。
5. 在设置同步选项和同步对象页面,对数据初始化选项、数据同步选项、同步对象选项进行设置,在设置完成后单击保存并下一步
6. 在校验任务页面,完成校验并全部校验项通过后,单击启动任务。 如果校验任务不通过,可以参考 校验不通过处理方法 修复问题后重新发起校验任务。
7. 返回数据同步任务列表,任务开始进入运行中状态。
说明:
选择操作列的更多 > 结束可关闭同步任务,请您确保数据同步完成后再关闭任务。

常见问题

1. 跨账号拉取实例列表报错:role not exist[InternalError.GetRoleError]

请确认跨腾讯云账号 ID(应该为源数据库的主账号 ID)和跨账号授权角色名称(应该为 授权账号 步骤6中创建的角色名称)配置是否正确。如果还无法拉取,可能没有授权源数据库的服务权限(参考 授权账号 中的步骤5)。

2. 获取云数据库实例列表失败:InternalError:InternalInnerCommonError


角色中没有授权源数据库所属的腾讯云服务策略,请参考 授权账号 中的步骤5进行授权。

3. 跨账号拉取实例列表报错:you are not authorized to perform operation (sts:AssumeRole) ,resource (qcs::cam::uin/1xx5:roleName/xxxx) has no permission




出错原因:您当前创建同步任务使用的账号是子账号,并且当前子账号没有 sts:AssumeRole 权限。 解决方法
使用主账号来创建同步任务。
请求目标数据库所属的主账号持有人,参考 授权账号 对子账号授权,策略语法中的 resource,填写报错框中蓝色字段部分。


4. DTS 任务配置未填写角色外部 ID,或者填写错误,导致权限报错或者拉取数据库实例失败。


出错原因授权账号 时设置了外部 ID,但在 DTS 任务配置中未填写外部 ID,或者填写错误,导致权限报错或者拉取数据库示例失败。
解决方案:授权账号时如果设置了外部 ID,则 DTS 任务配置时需要正确填写,未设置则不需要填。