操作场景
云数据库跨账号实例间数据迁移,资源库和目标库都属于云数据库实例,但所属不同的主账号名下,这种数据库实例之间的数据迁移。本章节介绍通过 DTS 数据迁移功能实现从其他账号云数据库实例迁移数据至本账号下云数据库实例。
支持范围
源数据库为云数据库实例,具体为:TDSQL MySQL、MariaDB、MongoDB、Redis®。
前提条件
已创建目标数据库实例。
注意事项
本操作中涉及多处账号信息配置,如下列出了主要配置逻辑,以方便用户理解和正确配置。
- 数据迁移方向:源数据库(其他账号的数据库实例)> 目标数据库(本账号的数据库实例)。
- 执行迁移任务的账号可以是目标数据库的主账号,也可以目标数据库的子账号。
- 使用主账号执行迁移任务。操作任务前,需要请求源数据所属主账号持有人进行角色授权(给目标数据库的主账号),使目标数据库主账号可以访问源数据库。
- 使用子账号执行迁移任务。操作任务前,需要先请求源数据所属主账号持有人进行角色授权(给目标数据库的主账号),使目标数据库主账号通过角色访问源数据库。然后再请求目标数据库所属主账号持有人进行策略授权(对目标数据库的子账号),使目标数据库子账号可以访问源数据库。
授权账号
使用主账号执行迁移任务,请操作步骤1 - 6,使用子账号执行迁移任务,请操作步骤1 - 11。
使用源数据库所属的主账号登录 访问管理控制台(如果子账号有 CAM 和角色相关的权限,也可以使用子账号登录)。
左侧导航单击角色,进入角色管理页面,然后单击新建角色。
配置相关信息,单击下一步。

- 角色名称:配置后请记录,后续配置 DTS 任务时需要输入。
- 角色载体:填入目标数据库所属的主账号 ID。目标数据库实例属于子账号名下时,此处也填写主账号 ID。
在配置角色策略页面,选择 DTS 策略和源数据库服务对应策略,单击下一步。
- DTS 服务策略,选择 QcloudDTSReadOnlyAccess。
- 源数据库服务对应的策略。
- 数据库为云数据库 TDSQL MySQL,选择 QcloudTDSQLReadOnlyAccess(TDSQL MySQL 版(TDSQL for MySQL)只读访问权限)。
- 数据库为云数据库 MariaDB,选择 QcloudMariaDBReadOnlyAccess(云数据库 MariaDB 只读访问权限)。
- 源数据库为云 MongoDB,选择 QcloudMongoDBReadOnlyAccess(文档数据库(MongoDB)只读访问权限)。
- 源数据库为云 Redis®,选择 QcloudRedisReadOnlyAccess(云缓存 Redis® 只读访问权限)。

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

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

(可选)创建一个策略,策略的名称以及描述可以根据自己的需求填写,策略内容复制示例代码后,将红框中的内容替换成对应的信息。

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

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

创建迁移任务
- 使用目标数据库实例所属账号,登录 DTS 控制台。
- 选择数据迁移 > 新建迁移任务,购买一个新的迁移任务。
- 购买完成后,返回数据迁移列表,单击操作列的配置,进入配置迁移任务页面。
- 在设置源和目标数据页面,配置源库和目标库信息。

跨账号关键参数配置如下:- 接入类型:选择云数据库,表示源数据库属于云数据库实例。
- 是否跨账号:选择跨账号。
- 跨账号 ID: 填入源数据库所属的主账号 ID。
- 跨账号授权角色名称。即前文授权账号步骤6中创建的角色名称。
- 外部角色 ID:如果前文授权账号步骤4中设置了外部 ID,则这里则必须按照设置的内容正确填写,否则会发生权限报错。没有设置则不需要填写。
- 在设置迁移选项和迁移对象页面,对数据迁移选项、迁移对象选项进行设置,在设置完成后单击保存并下一步。
- 在校验任务页面,完成校验并全部校验项通过后,单击启动任务。
- 返回数据迁移任务列表,任务开始进入运行中状态。
常见问题
1. 跨账号拉取实例列表报错:role not exist[InternalError.GetRoleError]
请确认跨账号 ID(应该为源数据库的主账号 ID)和跨账号授权角色名称(应该为授权账号步骤6中创建的角色名称)配置是否正确。
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 任务配置时需要正确填写,未设置则不需要填。








