文档首页/ 分布式缓存服务 DCS/ API参考/ API V2/ 数据迁移/ 创建备份导入任务 - CreateMigrationTask
更新时间:2026-07-30 GMT+08:00
分享

创建备份导入任务 - CreateMigrationTask

功能介绍

创建备份导入任务。

调用方法

请参见如何调用API

授权信息

账号具备所有API的调用权限,如果使用账号下的IAM用户调用当前API,该IAM用户需具备调用API所需的权限。

  • 如果使用角色与策略授权,具体权限要求请参见权限和授权项
  • 如果使用身份策略授权,需具备如下身份策略权限。

    授权项

    访问级别

    资源类型(*为必须)

    条件键

    别名

    依赖的授权项

    dcs:migrationTask:create

    Write

    -

    -

    -

    -

URI

POST /v2/{project_id}/migration-task

表1 路径参数

参数

是否必选

参数类型

描述

project_id

String

参数解释

项目ID。获取方法请参见获取项目ID

约束限制

不涉及。

取值范围

不涉及。

默认取值

不涉及。

请求参数

表2 请求Body参数

参数

是否必选

参数类型

描述

task_name

String

参数解释

备份导入任务名称。

约束限制

不涉及。

取值范围

不涉及。

默认取值

不涉及。

description

String

参数解释

备份导入任务描述信息。

约束限制

不涉及。

取值范围

不涉及。

默认取值

不涉及。

migration_type

String

参数解释

迁移任务类型,包括备份文件导入和在线迁移两种类型。

约束限制

不涉及。

取值范围

  • backupfile_import:表示备份文件导入。

  • online_migration:表示在线迁移。现已不支持用该接口创建在线迁移任务,请调用CreateOnlineMigrationTask创建在线任务。

默认取值

不涉及。

migration_method

String

参数解释

迁移方式,包括全量迁移和增量迁移两种类型。

约束限制

备份导入场景下固定为全量迁移。

取值范围

  • full_amount_migration:表示全量迁移。

  • incremental_migration:表示增量迁移。

默认取值

不涉及。

backup_files

BackupFilesBody object

参数解释

迁移任务类型为备份文件导入场景时的备份文件列表。

约束限制

备份导入场景下必填,backup_id对应的备份记录必须存在且有效。

取值范围

不涉及。

默认取值

不涉及。

network_type

String

参数解释

迁移任务类型为在线迁移时,表示源Redis和目标Redis连通的网络类型,包括vpc和vpn两种类型。现已不支持用该接口创建在线迁移任务,请调用CreateOnlineMigrationTask创建在线任务。

约束限制

不涉及。

取值范围

不涉及。

默认取值

不涉及。

source_instance

SourceInstanceBody object

参数解释

迁移任务类型为在线迁移场景时该参数为必填参数,表示源Redis信息。现已不支持用该接口创建在线迁移任务,请调用CreateOnlineMigrationTask创建在线任务。

源Redis连接信息。备份导入场景下不使用该参数。

约束限制

不涉及。

取值范围

不涉及。

默认取值

不涉及。

target_instance

TargetInstanceBody object

参数解释

表示目标Redis信息。

约束限制

必填,id必须为当前租户下已存在的DCS实例ID。

取值范围

不涉及。

默认取值

不涉及。

表3 BackupFilesBody

参数

是否必选

参数类型

描述

file_source

String

参数解释

备份文件来源。包含OBS桶和备份记录两种类型。

约束限制

不涉及。

取值范围

  • self_build_obs:实例备份记录。

  • backup_record:OBS桶数据。

默认取值

不涉及。

bucket_name

String

参数解释

OBS桶名称。

约束限制

如果数据来源是OBS桶的话,该参数为必填参数。

取值范围

不涉及。

默认取值

不涉及。

backup_id

String

参数解释

备份记录ID。

约束限制

数据来源为备份记录时必须填写。

取值范围

不涉及。

默认取值

不涉及。

files

Array of Files objects

参数解释

备份文件列表。

约束限制

数据来源为OBS桶时必须填写。

取值范围

不涉及。

默认取值

不涉及。

表4 Files

参数

是否必选

参数类型

描述

file_name

String

参数解释

备份文件名。

约束限制

不涉及。

取值范围

不涉及。

默认取值

不涉及。

size

String

参数解释

文件大小(单位:Byte)。

约束限制

不涉及。

取值范围

不涉及。

默认取值

不涉及。

update_at

String

参数解释

文件最后修改时间(格式YYYY-MM-DD HH:MM:SS)。

约束限制

不涉及。

取值范围

不涉及。

默认取值

不涉及。

表5 SourceInstanceBody

参数

是否必选

参数类型

描述

id

String

参数解释

Redis实例ID。云服务Redis必须填写。

约束限制

与addrs至少填一个。

取值范围

不涉及。

默认取值

不涉及。

ip

String

参数解释

Redis IP地址。迁移2.0版本不再使用该参数。

约束限制

不涉及。

取值范围

不涉及。

默认取值

不涉及。

port

String

参数解释

Redis端口。迁移2.0版本不再使用该参数。

约束限制

不涉及。

取值范围

不涉及。

默认取值

不涉及。

addrs

String

参数解释

Redis实例名称(source_instance信息中填写)。自建Redis必须填写。

约束限制

与id至少填一个。

取值范围

不涉及。

默认取值

不涉及。

password

String

参数解释

Redis连接密码。

约束限制

如果设置了密码,则必须填写。

取值范围

不涉及。

默认取值

不涉及。

name

String

参数解释

Redis实例名称。

约束限制

不涉及。

取值范围

不涉及。

默认取值

不涉及。

proxy_multi_db

Boolean

参数解释

Proxy实例是否开启了多DB。只有当源Redis数据为DCS Proxy集群实例,且开启了多DB(Proxy实例multi-db参数值为yes)时需要配置为true。其他场景无需配置。

约束限制

非多DB Proxy集群源实例如果配置该参数为开启,可能会导致任务失败。

取值范围

  • true:开启。

  • false:未开启。

默认取值

false

db

String

参数解释

数据库编号。指定DB进行迁移,例如填写5,表示只迁移DB5。不填写时迁移全部DB。

约束限制

若非空必须为整数。

取值范围

0~255的整数。

默认取值

不涉及。

表6 TargetInstanceBody

参数

是否必选

参数类型

描述

id

String

参数解释

Redis实例ID(target_instance信息中必须填写)。云服务Redis必须填写。

约束限制

与addrs至少填一个。

取值范围

不涉及。

默认取值

不涉及。

ip

String

参数解释

Redis IP地址。迁移2.0版本不再使用该参数。

约束限制

不涉及。

取值范围

不涉及。

默认取值

不涉及。

port

String

参数解释

Redis端口。迁移2.0版本不再使用该参数。

约束限制

不涉及。

取值范围

不涉及。

默认取值

不涉及。

addrs

String

参数解释

Redis连接地址。自建Redis必须填写。

约束限制

与id至少填一个。

取值范围

不涉及。

默认取值

不涉及。

password

String

参数解释

Redis连接密码。

约束限制

如果设置了密码,则必须填写。

取值范围

不涉及。

默认取值

不涉及。

name

String

参数解释

Redis实例名称(target_instance信息中填写)。

约束限制

不涉及。

取值范围

不涉及。

默认取值

不涉及。

proxy_multi_db

Boolean

参数解释

Proxy实例是否开启了多DB。该参数无需配置。

约束限制

不涉及。

取值范围

  • true:是多DB。

  • false:不是多DB。

默认取值

不涉及。

db

String

参数解释

数据库编号。指定DB进行迁移,例如填写5,表示只迁移DB5。不填写时迁移全部DB。

约束限制

若非空必须为整数。

取值范围

0~255的整数。

默认取值

不涉及。

响应参数

状态码:200

表7 响应Body参数

参数

参数类型

描述

id

String

参数解释

迁移任务ID。

取值范围

不涉及。

name

String

参数解释

迁移任务名称。

取值范围

不涉及。

status

String

参数解释

迁移任务状态,这个字段的值包括:SUCCESS, FAILED, MIGRATING,TERMINATED

取值范围

  • FULLMIGRATING:全量迁移中。

  • SUCCESS:迁移成功。

  • FAILED:迁移失败。

  • MIGRATING:迁移中。

  • TERMINATED:已终止。

error

String

参数解释

错误信息。

取值范围

不涉及。

状态码:400

表8 响应Body参数

参数

参数类型

描述

error_msg

String

参数解释

错误信息。

取值范围

不涉及。

error_code

String

参数解释

错误码。

取值范围

请参见错误码

error_ext_msg

String

参数解释

扩展错误信息(暂未使用,赋值为null)。

取值范围

不涉及。

状态码:401

表9 响应Body参数

参数

参数类型

描述

error_msg

String

参数解释

错误信息。

取值范围

不涉及。

error_code

String

参数解释

错误码。

取值范围

请参见错误码

error_ext_msg

String

参数解释

扩展错误信息(暂未使用,赋值为null)。

取值范围

不涉及。

状态码:403

表10 响应Body参数

参数

参数类型

描述

error_msg

String

参数解释

错误信息。

取值范围

不涉及。

error_code

String

参数解释

错误码。

取值范围

请参见错误码

error_ext_msg

String

参数解释

扩展错误信息(暂未使用,赋值为null)。

取值范围

不涉及。

状态码:404

表11 响应Body参数

参数

参数类型

描述

error_msg

String

参数解释

错误信息。

取值范围

不涉及。

error_code

String

参数解释

错误码。

取值范围

请参见错误码

error_ext_msg

String

参数解释

扩展错误信息(暂未使用,赋值为null)。

取值范围

不涉及。

状态码:500

表12 响应Body参数

参数

参数类型

描述

error_msg

String

参数解释

错误信息。

取值范围

不涉及。

error_code

String

参数解释

错误码。

取值范围

请参见错误码

error_ext_msg

String

参数解释

扩展错误信息(暂未使用,赋值为null)。

取值范围

不涉及。

请求示例

创建备份导入迁移任务,备份数据来源于OBS桶。

POST https://{dcs_endpoint}/v2/{project_id}/migration-task

{
  "task_name" : "migration1",
  "description" : "Test",
  "migration_type" : "backupfile_import",
  "migration_method" : "full_amount_migration",
  "backup_files" : {
    "bucket_name" : "bucketName",
    "file_source" : "self_build_obs",
    "files" : [ {
      "size" : "790526976",
      "file_name" : "fileName"
    } ]
  },
  "target_instance" : {
    "id" : "d2c8399f-bdba-43c1-8069-3ff17a1a79d5",
    "name" : "dcs-test",
    "password" : "xxxxxx"
  }
}

响应示例

状态码:200

创建备份导入任务成功。

{
  "id" : "8aa6999e71cb638b0171f485f5266ef0",
  "name" : "dcs-test",
  "status" : "MIGRATING",
  "error" : ""
}

SDK代码示例

SDK代码示例如下。

创建备份导入迁移任务,备份数据来源于OBS桶。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package com.huaweicloud.sdk.test;

import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.exception.ServiceResponseException;
import com.huaweicloud.sdk.dcs.v2.region.DcsRegion;
import com.huaweicloud.sdk.dcs.v2.*;
import com.huaweicloud.sdk.dcs.v2.model.*;

import java.util.List;
import java.util.ArrayList;

public class CreateMigrationTaskSolution {

    public static void main(String[] args) {
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        String ak = System.getenv("CLOUD_SDK_AK");
        String sk = System.getenv("CLOUD_SDK_SK");
        String projectId = "{project_id}";

        ICredential auth = new BasicCredentials()
                .withProjectId(projectId)
                .withAk(ak)
                .withSk(sk);

        DcsClient client = DcsClient.newBuilder()
                .withCredential(auth)
                .withRegion(DcsRegion.valueOf("<YOUR REGION>"))
                .build();
        CreateMigrationTaskRequest request = new CreateMigrationTaskRequest();
        CreateMigrationTaskBody body = new CreateMigrationTaskBody();
        TargetInstanceBody targetInstancebody = new TargetInstanceBody();
        targetInstancebody.withId("d2c8399f-bdba-43c1-8069-3ff17a1a79d5")
            .withName("dcs-test")
            .withPassword("xxxxxx");
        List<Files> listBackupFilesFiles = new ArrayList<>();
        listBackupFilesFiles.add(
            new Files()
                .withFileName("fileName")
                .withSize("790526976")
        );
        BackupFilesBody backupFilesbody = new BackupFilesBody();
        backupFilesbody.withFileSource(BackupFilesBody.FileSourceEnum.fromValue("self_build_obs"))
            .withBucketName("bucketName")
            .withFiles(listBackupFilesFiles);
        body.withTargetInstance(targetInstancebody);
        body.withBackupFiles(backupFilesbody);
        body.withMigrationMethod(CreateMigrationTaskBody.CreateMigrationTaskBody.fromValue("full_amount_migration"));
        body.withMigrationType(CreateMigrationTaskBody.CreateMigrationTaskBody.fromValue("backupfile_import"));
        body.withDescription("Test");
        body.withTaskName("migration1");
        request.withBody(body);
        try {
            CreateMigrationTaskResponse response = client.createMigrationTask(request);
            System.out.println(response.toString());
        } catch (ConnectionException e) {
            e.printStackTrace();
        } catch (RequestTimeoutException e) {
            e.printStackTrace();
        } catch (ServiceResponseException e) {
            e.printStackTrace();
            System.out.println(e.getHttpStatusCode());
            System.out.println(e.getRequestId());
            System.out.println(e.getErrorCode());
            System.out.println(e.getErrorMsg());
        }
    }
}

创建备份导入迁移任务,备份数据来源于OBS桶。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# coding: utf-8

import os
from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkdcs.v2.region.dcs_region import DcsRegion
from huaweicloudsdkcore.exceptions import exceptions
from huaweicloudsdkdcs.v2 import *

if __name__ == "__main__":
    # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak = os.environ["CLOUD_SDK_AK"]
    sk = os.environ["CLOUD_SDK_SK"]
    projectId = "{project_id}"

    credentials = BasicCredentials(ak, sk, projectId)

    client = DcsClient.new_builder() \
        .with_credentials(credentials) \
        .with_region(DcsRegion.value_of("<YOUR REGION>")) \
        .build()

    try:
        request = CreateMigrationTaskRequest()
        targetInstancebody = TargetInstanceBody(
            id="d2c8399f-bdba-43c1-8069-3ff17a1a79d5",
            name="dcs-test",
            password="xxxxxx"
        )
        listFilesBackupFiles = [
            Files(
                file_name="fileName",
                size="790526976"
            )
        ]
        backupFilesbody = BackupFilesBody(
            file_source="self_build_obs",
            bucket_name="bucketName",
            files=listFilesBackupFiles
        )
        request.body = CreateMigrationTaskBody(
            target_instance=targetInstancebody,
            backup_files=backupFilesbody,
            migration_method="full_amount_migration",
            migration_type="backupfile_import",
            description="Test",
            task_name="migration1"
        )
        response = client.create_migration_task(request)
        print(response)
    except exceptions.ClientRequestException as e:
        print(e.status_code)
        print(e.request_id)
        print(e.error_code)
        print(e.error_msg)

创建备份导入迁移任务,备份数据来源于OBS桶。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package main

import (
	"fmt"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
    dcs "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/dcs/v2"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/dcs/v2/model"
    region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/dcs/v2/region"
)

func main() {
    // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak := os.Getenv("CLOUD_SDK_AK")
    sk := os.Getenv("CLOUD_SDK_SK")
    projectId := "{project_id}"

    auth, err := basic.NewCredentialsBuilder().
        WithAk(ak).
        WithSk(sk).
        WithProjectId(projectId).
        SafeBuild()

    if err != nil {
        fmt.Println(err)
        return
    }

    hcClient, err := dcs.DcsClientBuilder().
         WithRegion(region.ValueOf("<YOUR REGION>")).
         WithCredential(auth).
         SafeBuild()


    if err != nil {
        fmt.Println(err)
        return
    }

    client := dcs.NewDcsClient(hcClient)

    request := &model.CreateMigrationTaskRequest{}
	nameTargetInstance:= "dcs-test"
	passwordTargetInstance:= "xxxxxx"
	targetInstancebody := &model.TargetInstanceBody{
		Id: "d2c8399f-bdba-43c1-8069-3ff17a1a79d5",
		Name: &nameTargetInstance,
		Password: &passwordTargetInstance,
	}
	sizeFiles:= "790526976"
	var listFilesBackupFiles = []model.Files{
        {
            FileName: "fileName",
            Size: &sizeFiles,
        },
    }
	fileSourceBackupFiles:= model.GetBackupFilesBodyFileSourceEnum().SELF_BUILD_OBS
	bucketNameBackupFiles:= "bucketName"
	backupFilesbody := &model.BackupFilesBody{
		FileSource: &fileSourceBackupFiles,
		BucketName: &bucketNameBackupFiles,
		Files: listFilesBackupFiles,
	}
	descriptionCreateMigrationTaskBody:= "Test"
	request.Body = &model.CreateMigrationTaskBody{
		TargetInstance: targetInstancebody,
		BackupFiles: backupFilesbody,
		MigrationMethod: model.GetCreateMigrationTaskBodyMigrationMethodEnum().FULL_AMOUNT_MIGRATION,
		MigrationType: model.GetCreateMigrationTaskBodyMigrationTypeEnum().BACKUPFILE_IMPORT,
		Description: &descriptionCreateMigrationTaskBody,
		TaskName: "migration1",
	}
	response, err := client.CreateMigrationTask(request)
	if err == nil {
        fmt.Printf("%+v\n", response)
    } else {
        fmt.Println(err)
    }
}

更多编程语言的SDK代码示例,请参见API Explorer的代码示例页签,可生成自动对应的SDK代码示例。

状态码

状态码

描述

200

创建备份导入任务成功。

400

非法请求。

401

认证信息非法。

403

请求被拒绝访问。

404

所请求的资源不存在。

500

内部服务错误。

错误码

请参见错误码

相关文档