使用阿里云CLI创建DTS任务

更新时间:
复制 MD 格式

本文通过阿里云CLI操作示例,演示如何通过CLI创建和配置DTS数据迁移、数据同步、数据订阅和数据校验任务。

方案概览

使用阿里云CLI创建DTS任务的基本流程分为以下三个步骤:

  1. 购买DTS实例:调用CreateDtsInstance接口购买指定类型的DTS实例,获取实例ID。

  2. 配置DTS任务:调用ConfigureDtsJob接口配置源库和目标库的连接信息、迁移或同步对象等。

  3. 启动DTS任务:调用StartDtsJob接口启动任务,并通过DescribeDtsJobDetail接口查询任务状态。

本文以RDS MySQL为源库、RDS MySQL为目标库的场景为例,分别演示创建数据迁移、数据同步、数据订阅和数据校验任务的CLI命令。您可以根据实际业务需求替换源库和目标库的相关参数。

前提条件

注意事项

  • CreateDtsInstance接口中的SourceRegionDestinationRegion参数需要与源库和目标库所在地域一致。

  • 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****

确认返回结果中的StatusMigrating,表示迁移任务正在运行中。

创建数据同步任务

以下示例演示如何通过阿里云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****

确认返回结果中的StatusSynchronizing,表示同步任务正在运行中。

创建数据订阅任务

以下示例演示如何通过阿里云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时,还需同时指定SubscriptionInstanceVPCIdSubscriptionInstanceVSwitchId参数。

步骤三:启动订阅任务

执行以下命令,调用StartDtsJob接口启动订阅任务。

aliyun dts StartDtsJob \
  --DtsJobId k3m1zb527a****

步骤四:查询任务状态

执行以下命令,调用DescribeDtsJobDetail接口查询订阅任务状态。

aliyun dts DescribeDtsJobDetail \
  --DtsJobId k3m1zb527a****

确认返回结果中的StatusNormal,表示订阅任务正在运行中。

创建数据校验任务

数据校验任务用于验证迁移或同步后源库与目标库的数据一致性。以下示例演示如何为已有的数据迁移任务创建校验任务。

步骤一:购买校验实例

执行以下命令,调用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****

确认返回结果中的StatusFinished,表示校验任务已完成。您可以查看返回结果中的校验详情判断数据是否一致。