本文通过阿里云CLI操作示例,演示如何通过CLI创建和配置DTS数据迁移、数据同步、数据订阅和数据校验任务。
方案概览
使用阿里云CLI创建DTS任务的基本流程分为以下三个步骤:
购买DTS实例:调用CreateDtsInstance接口购买指定类型的DTS实例,获取实例ID。
配置DTS任务:调用ConfigureDtsJob接口配置源库和目标库的连接信息、迁移或同步对象等。
启动DTS任务:调用StartDtsJob接口启动任务,并通过DescribeDtsJobDetail接口查询任务状态。
本文以RDS MySQL为源库、RDS MySQL为目标库的场景为例,分别演示创建数据迁移、数据同步、数据订阅和数据校验任务的CLI命令。您可以根据实际业务需求替换源库和目标库的相关参数。
前提条件
已安装并配置阿里云CLI。具体操作,请参见安装CLI(Linux)和配置凭证。
使用的AccessKey对应的RAM用户已授予DTS相关权限。具体权限说明,请参见通过系统策略授权子账号管理DTS。
已创建源库和目标库实例,并完成DTS所需的准备工作。具体操作,请参见准备工作概览。
注意事项
CreateDtsInstance接口中的SourceRegion和DestinationRegion参数需要与源库和目标库所在地域一致。
CreateDtsInstance接口中的Type参数决定任务类型,取值为MIGRATION(迁移)、SYNC(同步)或SUBSCRIBE(订阅)。
ConfigureDtsJob接口中的DbList参数为JSON格式,用于指定迁移或同步对象。具体格式说明,请参见迁移、同步或订阅对象说明。
数据迁移任务仅支持按量付费(PostPaid),数据同步和数据订阅任务支持按量付费(PostPaid)和包年包月(PrePaid)。
CLI命令中的数据库密码参数(SourceEndpointPassword、DestinationEndpointPassword)建议使用环境变量传入,避免在命令行中明文暴露。
创建数据迁移任务
以下示例演示如何通过阿里云CLI创建一个从RDS MySQL迁移到RDS MySQL的数据迁移任务。
步骤一:购买迁移实例
执行以下命令,调用CreateDtsInstance接口购买数据迁移实例。
aliyun dts CreateDtsInstance \
--Type MIGRATION \
--SourceRegion cn-hangzhou \
--DestinationRegion cn-shanghai \
--SourceEndpointEngineName MySQL \
--DestinationEndpointEngineName MySQL \
--PayType PostPaid \
--InstanceClass small返回结果示例:
{
"InstanceId": "dtsse7s11v26j****",
"JobId": "se7s11v26j****",
"RequestId": "E52C5BD7-AF7D-4F5D-A8F5-D3B5F0****",
"Success": true
}记录返回结果中的InstanceId,即DTS实例ID,后续步骤中作为DtsInstanceId参数使用。
步骤二:配置迁移任务
执行以下命令,调用ConfigureDtsJob接口配置源库和目标库信息。
aliyun dts ConfigureDtsJob \
--DtsInstanceId dtsse7s11v26j**** \
--DtsJobName "rds_mysql_migration_demo" \
--JobType MIGRATION \
--SourceEndpointInstanceType RDS \
--SourceEndpointInstanceID rm-bp1imrtn6fq**** \
--SourceEndpointEngineName MYSQL \
--SourceEndpointRegion cn-hangzhou \
--SourceEndpointDatabaseName source_db \
--SourceEndpointUserName dts_user \
--SourceEndpointPassword '${SOURCE_DB_PASSWORD}' \
--DestinationEndpointInstanceType RDS \
--DestinationEndpointInstanceID rm-bp1k5v0rm3d**** \
--DestinationEndpointEngineName MYSQL \
--DestinationEndpointRegion cn-shanghai \
--DestinationEndpointDataBaseName target_db \
--DestinationEndpointUserName dts_user \
--DestinationEndpointPassword '${DEST_DB_PASSWORD}' \
--StructureInitialization true \
--DataInitialization true \
--DataSynchronization true \
--DbList '{"source_db":{"name":"source_db","all":true}}'返回结果示例:
{
"RequestId": "1D234B10-5C84-4F26-B06A-3E48D2****",
"DtsJobId": "se7s11v26j****",
"ErrCode": "",
"Success": "true",
"HttpStatusCode": 200
}步骤三:启动迁移任务
执行以下命令,调用StartDtsJob接口启动迁移任务。
aliyun dts StartDtsJob \
--DtsJobId se7s11v26j****返回结果示例:
{
"RequestId": "A7B3E61D-2C2F-4B3B-A5D8-F7E49D****",
"ErrCode": "",
"Success": "true",
"HttpStatusCode": 200
}步骤四:查询任务状态
执行以下命令,调用DescribeDtsJobDetail接口查询迁移任务执行状态。
aliyun dts DescribeDtsJobDetail \
--DtsJobId se7s11v26j****确认返回结果中的Status为Migrating,表示迁移任务正在运行中。
创建数据同步任务
以下示例演示如何通过阿里云CLI创建一个从RDS MySQL同步到RDS MySQL的数据同步任务。
步骤一:购买同步实例
执行以下命令,调用CreateDtsInstance接口购买数据同步实例。
aliyun dts CreateDtsInstance \
--Type SYNC \
--SourceRegion cn-hangzhou \
--DestinationRegion cn-hangzhou \
--SourceEndpointEngineName MySQL \
--DestinationEndpointEngineName MySQL \
--PayType PostPaid \
--InstanceClass small \
--SyncArchitecture oneway返回结果示例:
{
"InstanceId": "dtsbi6e22ay24****",
"JobId": "bi6e22ay24****",
"RequestId": "6C2FE2A1-B9D3-4E5C-8A1B-C3F28E****",
"Success": true
}步骤二:配置同步任务
执行以下命令,调用ConfigureDtsJob接口配置同步任务的源库和目标库信息。
aliyun dts ConfigureDtsJob \
--DtsInstanceId dtsbi6e22ay24**** \
--DtsJobName "rds_mysql_sync_demo" \
--JobType SYNC \
--SourceEndpointInstanceType RDS \
--SourceEndpointInstanceID rm-bp1imrtn6fq**** \
--SourceEndpointEngineName MYSQL \
--SourceEndpointRegion cn-hangzhou \
--SourceEndpointDatabaseName source_db \
--SourceEndpointUserName dts_user \
--SourceEndpointPassword '${SOURCE_DB_PASSWORD}' \
--DestinationEndpointInstanceType RDS \
--DestinationEndpointInstanceID rm-bp1k5v0rm3d**** \
--DestinationEndpointEngineName MYSQL \
--DestinationEndpointRegion cn-hangzhou \
--DestinationEndpointDataBaseName target_db \
--DestinationEndpointUserName dts_user \
--DestinationEndpointPassword '${DEST_DB_PASSWORD}' \
--StructureInitialization true \
--DataInitialization true \
--DataSynchronization true \
--DbList '{"source_db":{"name":"source_db","all":true}}'返回结果示例:
{
"RequestId": "8E2D3A9C-4B5F-4C6A-9D7E-A1B2C3****",
"DtsJobId": "bi6e22ay24****",
"ErrCode": "",
"Success": "true",
"HttpStatusCode": 200
}步骤三:启动同步任务
执行以下命令,调用StartDtsJob接口启动同步任务。
aliyun dts StartDtsJob \
--DtsJobId bi6e22ay24****步骤四:查询任务状态
执行以下命令,调用DescribeDtsJobDetail接口查询同步任务状态。
aliyun dts DescribeDtsJobDetail \
--DtsJobId bi6e22ay24****确认返回结果中的Status为Synchronizing,表示同步任务正在运行中。
创建数据订阅任务
以下示例演示如何通过阿里云CLI创建一个RDS MySQL的数据订阅任务。
步骤一:购买订阅实例
执行以下命令,调用CreateDtsInstance接口购买数据订阅实例。
aliyun dts CreateDtsInstance \
--Type SUBSCRIBE \
--SourceRegion cn-hangzhou \
--DestinationRegion cn-hangzhou \
--SourceEndpointEngineName MySQL \
--PayType PostPaid \
--InstanceClass small返回结果示例:
{
"InstanceId": "dtsk3m1zb527a****",
"JobId": "k3m1zb527a****",
"RequestId": "3F5A8B2C-6D7E-4A9B-8C1D-E2F3A4****",
"Success": true
}步骤二:配置订阅任务
执行以下命令,调用ConfigureSubscription接口配置数据订阅任务。
aliyun dts ConfigureSubscription \
--RegionId cn-hangzhou \
--DtsInstanceId dtsk3m1zb527a**** \
--DtsJobName "rds_mysql_subscribe_demo" \
--SourceEndpointInstanceType RDS \
--SourceEndpointInstanceID rm-bp1imrtn6fq**** \
--SourceEndpointEngineName MYSQL \
--SourceEndpointRegion cn-hangzhou \
--SourceEndpointDatabaseName source_db \
--SourceEndpointUserName dts_user \
--SourceEndpointPassword '${SOURCE_DB_PASSWORD}' \
--DbList '{"source_db":{"name":"source_db","all":true}}' \
--SubscriptionDataTypeDDL true \
--SubscriptionDataTypeDML true \
--SubscriptionInstanceNetworkType vpc \
--SubscriptionInstanceVPCId vpc-bp1opxu1zkhn00g**** \
--SubscriptionInstanceVSwitchId vsw-bp1s5fnvk4gn2tw****返回结果示例:
{
"RequestId": "B4C5D6E7-8F9A-4B1C-2D3E-F4A5B6****",
"DtsJobId": "k3m1zb527a****",
"ErrCode": "",
"Success": "true",
"HttpStatusCode": 200
}SubscriptionInstanceNetworkType为必填参数,当前仅支持vpc。传入vpc时,还需同时指定SubscriptionInstanceVPCId和SubscriptionInstanceVSwitchId参数。
步骤三:启动订阅任务
执行以下命令,调用StartDtsJob接口启动订阅任务。
aliyun dts StartDtsJob \
--DtsJobId k3m1zb527a****步骤四:查询任务状态
执行以下命令,调用DescribeDtsJobDetail接口查询订阅任务状态。
aliyun dts DescribeDtsJobDetail \
--DtsJobId k3m1zb527a****确认返回结果中的Status为Normal,表示订阅任务正在运行中。
创建数据校验任务
数据校验任务用于验证迁移或同步后源库与目标库的数据一致性。以下示例演示如何为已有的数据迁移任务创建校验任务。
步骤一:购买校验实例
执行以下命令,调用CreateDtsInstance接口购买数据校验实例。
aliyun dts CreateDtsInstance \
--Type CHECK \
--SourceRegion cn-hangzhou \
--DestinationRegion cn-shanghai \
--SourceEndpointEngineName MySQL \
--DestinationEndpointEngineName MySQL \
--PayType PostPaid \
--InstanceClass small返回结果示例:
{
"InstanceId": "dtsp2w8rx6315****",
"JobId": "p2w8rx6315****",
"RequestId": "D5E6F7A8-9B0C-4D1E-2F3A-B4C5D6****",
"Success": true
}步骤二:配置校验任务
执行以下命令,调用ConfigureDtsJob接口配置校验任务的源库和目标库信息。
aliyun dts ConfigureDtsJob \
--DtsInstanceId dtsp2w8rx6315**** \
--DtsJobName "rds_mysql_check_demo" \
--JobType CHECK \
--SourceEndpointInstanceType RDS \
--SourceEndpointInstanceID rm-bp1imrtn6fq**** \
--SourceEndpointEngineName MYSQL \
--SourceEndpointRegion cn-hangzhou \
--SourceEndpointDatabaseName source_db \
--SourceEndpointUserName dts_user \
--SourceEndpointPassword '${SOURCE_DB_PASSWORD}' \
--DestinationEndpointInstanceType RDS \
--DestinationEndpointInstanceID rm-bp1k5v0rm3d**** \
--DestinationEndpointEngineName MYSQL \
--DestinationEndpointRegion cn-shanghai \
--DestinationEndpointDataBaseName target_db \
--DestinationEndpointUserName dts_user \
--DestinationEndpointPassword '${DEST_DB_PASSWORD}' \
--StructureInitialization false \
--DataInitialization true \
--DataSynchronization false \
--DbList '{"source_db":{"name":"source_db","all":true}}'返回结果示例:
{
"RequestId": "E6F7A8B9-0C1D-4E2F-3A4B-C5D6E7****",
"DtsJobId": "p2w8rx6315****",
"ErrCode": "",
"Success": "true",
"HttpStatusCode": 200
}步骤三:启动校验任务
执行以下命令,调用StartDtsJob接口启动校验任务。
aliyun dts StartDtsJob \
--DtsJobId p2w8rx6315****步骤四:查询校验结果
执行以下命令,调用DescribeDtsJobDetail接口查询校验任务的执行结果。
aliyun dts DescribeDtsJobDetail \
--DtsJobId p2w8rx6315****确认返回结果中的Status为Finished,表示校验任务已完成。您可以查看返回结果中的校验详情判断数据是否一致。