实例管理
更新时间:2024-04-11
实例管理
云数据库 RDS (Relational Database Service)是专业、高性能、高可靠的云数据库服务。云数据库 RDS 提供 Web 界面进行配置、操作数据库实例,还为您提供可靠的数据备份和恢复、完备的安全管理、完善的监控、轻松扩展等功能支持。相对于自建数据库,云数据库 RDS 具有更经济、更专业、更高效、更可靠、简单易用等特点,使您能更专注于核心业务。
创建RDS主实例
使用以下代码可以创建一个RDS主实例
                Go
                
            
            1// import "github.com/baidubce/bce-sdk-go/services/rds"
2
3args := &rds.CreateRdsArgs{
4	// 指定rds的数据库引擎,取值mysql,sqlserver,postgresql,必选
5    Engine:            "mysql",
6    // 指定rds的数据库版本,必选
7    EngineVersion:  "5.6",
8    // 计费相关参数,PaymentTiming取值为 预付费:Prepaid,后付费:Postpaid;Reservation:支付方式为后支付时不需要设置,预支付时必须设置;必选
9    Billing: rds.Billing{
10        PaymentTiming: "Postpaid",
11        //Reservation: rds.Reservation{ReservationLength: 1, ReservationTimeUnit: "Month"},
12    },
13    // 预付费时可指定自动续费参数 AutoRenewTime 和 AutoRenewTimeUnit
14    // 自动续费时长(续费单位为year 不大于3,续费单位为month 不大于9)
15    // AutoRenewTime: 1,
16    // 自动续费单位("year";"month")
17    // AutoRenewTimeUnit: "year",
18    // CPU核数,必选
19    CpuCount: 1,
20    //套餐内存大小,单位GB,必选
21    MemoryCapacity: 1,
22    //套餐磁盘大小,单位GB,每5G递增,必选
23    VolumeCapacity: 5,
24    //磁盘类型, normal_io:本地盘ssd磁盘, cloud_high:高性能云磁盘, cloud_nor:通用型SSD, cloud_enha:增强型SSD, 必选
25    DiskIoType: "normal_io",
26    //批量创建云数据库 RDS 实例个数, 最大不超过10,默认1,可选
27    PurchaseCount: 1,
28    //rds实例名称,允许小写字母、数字,长度限制为1~32,默认命名规则:{engine} + {engineVersion},可选
29    InstanceName: "instanceName",
30    //所属系列,Basic:单机基础版,Standard:双机高可用版。仅SQLServer 2012sp3 支持单机基础版。默认Standard,可选
31    Category: "Standard",
32    //指定zone信息,默认为空,由系统自动选择,可选
33    //zoneName命名规范是小写的“国家-region-可用区序列",例如北京可用区A为"cn-bj-a"。
34    ZoneNames: []string{"cn-bj-d"},
35    //vpc,如果不提供则属于默认vpc,可选
36    VpcId: "vpc-IyrqYIQ7",
37    //是否进行直接支付,默认false,设置为直接支付的变配订单会直接扣款,不需要再走支付逻辑,可选
38    IsDirectPay: false,
39    //vpc内,每个可用区的subnetId;如果不是默认vpc则必须指定 subnetId,可选
40    Subnets: []rds.SubnetMap{
41        {
42            ZoneName: "cn-bj-a",
43            SubnetId: "sbn-IyWRnII7",
44        },   
45    },
46    // 实例绑定的标签信息,可选
47    Tags: []model.TagModel{
48        {
49            TagKey:   "tagK",
50            TagValue: "tagV",
51        },
52    },
53}
54result, err := client.CreateRds(args)
55if err != nil {
56    fmt.Printf("create rds error: %+v\n", err)
57    return
58}
59
60for _, e := range result.InstanceIds {
61	fmt.Println("create rds success, instanceId: ", e)
62}
            注意:
- 实例可选套餐详见(https://cloud.baidu.com/doc/RDS/s/9jwvz0wd3)
 - 创建计费方式为后付费的实例需要账户现金余额+通用代金券大于100;预付费方式的实例则需要账户现金余额大于等于实例费用。
 - 支持批量创建,且如果创建过程中有一个实例创建失败,所有实例将全部回滚,均创建失败。
 - 创建接口为异步创建,可通过查询指定实例详情接口查询实例状态。
 
创建RDS只读实例
使用以下代码可以创建RDS只读实例
                Go
                
            
            1// import "github.com/baidubce/bce-sdk-go/services/rds"
2
3args := &rds.CreateReadReplicaArgs{
4    //主实例ID,必选
5    SourceInstanceId: "sourceInstanceId"
6    // 计费相关参数,PaymentTiming取值为 预付费:Prepaid,后付费:Postpaid;Reservation:支付方式为后支付时不需要设置,预支付时必须设置;必选
7    Billing: rds.Billing{
8        PaymentTiming: "Postpaid",
9    },
10    // CPU核数,必选
11    CpuCount: 1,
12    //套餐内存大小,单位GB,必选
13    MemoryCapacity: 1,
14    //套餐磁盘大小,单位GB,每5G递增,必选
15    VolumeCapacity: 5,
16    //批量创建云数据库 RDS 只读实例个数, 可选
17    PurchaseCount: 1,
18    //实例名称,允许小写字母、数字,长度限制为1~32,默认命名规则:{engine} + {engineVersion},可选
19    InstanceName: "instanceName",
20    //指定zone信息,默认为空,由系统自动选择,可选
21    //zoneName命名规范是小写的“国家-region-可用区序列",例如北京可用区A为"cn-bj-a"。
22    ZoneNames: []string{"cn-bj-d"},
23    //与主实例 vpcId 相同,可选
24    VpcId: "vpc-IyrqYIQ7",
25    //是否进行直接支付,默认false,设置为直接支付的变配订单会直接扣款,不需要再走支付逻辑,可选
26    IsDirectPay: false,
27    //vpc内,每个可用区的subnetId;如果不是默认vpc则必须指定 subnetId,可选
28    Subnets: []rds.SubnetMap{
29        {
30            ZoneName: "cn-bj-a",
31            SubnetId: "sbn-IyWRnII7",
32        },   
33    },
34    // 实例绑定的标签信息,可选
35    Tags: []model.TagModel{
36        {
37            TagKey:   "tagK",
38            TagValue: "tagV",
39        },
40    },
41}
42result, err := client.CreateReadReplica(args)
43if err != nil {
44    fmt.Printf("create rds readReplica error: %+v\n", err)
45    return
46}
47
48for _, e := range result.InstanceIds {
49	fmt.Println("create rds readReplica success, instanceId: ", e)
50}
            注意:
- 需要在云数据库 RDS 主实例的基础上进行创建
 - 实例可选套餐详见(https://cloud.baidu.com/doc/RDS/s/9jwvz0wd3)
 - 仅数据库类型为 MySQL 的主实例支持创建只读实例
 - 只读实例的数据库引擎和数据库版本与主实例相同,无需设置,主实例版本最低是 MySQL 5.6
 - 只读实例的磁盘容量不能小于主实例的磁盘容量
 - 只读实例的 vpcId 需跟主实例一致
 - 一个云数据库 RDS 实例,最多只能有 5 个只读实例
 
创建RDS代理实例
使用以下代码可以创建一个RDS代理实例
                Go
                
            
            1// import "github.com/baidubce/bce-sdk-go/services/rds"
2
3args := &rds.CreateRdsProxyArgs{
4    //主实例ID,必选
5    SourceInstanceId: "sourceInstanceId"
6    // 计费相关参数,代理实例只支持后付费Postpaid,必选
7    Billing: rds.Billing{
8        PaymentTiming: "Postpaid",
9    },
10    // 代理实例节点数。取值范围2,4,6,8,16,必选
11    NodeAmount: 2,
12    //实例名称,允许小写字母、数字,长度限制为1~32,默认命名规则:{engine} + {engineVersion},可选
13    InstanceName: "instanceName",
14    //指定zone信息,默认为空,由系统自动选择,可选
15    //zoneName命名规范是小写的“国家-region-可用区序列",例如北京可用区A为"cn-bj-a",建议与主实例的可用区保持一致
16    ZoneNames: []string{"cn-bj-d"},
17    //与主实例 vpcId 相同,可选
18    VpcId: "vpc-IyrqYIQ7",
19    //是否进行直接支付,默认false,设置为直接支付的变配订单会直接扣款,不需要再走支付逻辑,可选
20    IsDirectPay: false,
21    //vpc内,每个可用区的subnetId;如果不是默认vpc则必须指定 subnetId,可选
22    Subnets: []rds.SubnetMap{
23        {
24            ZoneName: "cn-bj-a",
25            SubnetId: "sbn-IyWRnII7",
26        },   
27    },
28    // 实例绑定的标签信息,可选
29    Tags: []model.TagModel{
30        {
31            TagKey:   "tagK",
32            TagValue: "tagV",
33        },
34    },
35}
36result, err := client.CreateRdsProxy(args)
37if err != nil {
38    fmt.Printf("create rds proxy error: %+v\n", err)
39    return
40}
41
42for _, e := range result.InstanceIds {
43	fmt.Println("create rds proxy success, instanceId: ", e)
44}
            注意:
- 需要在云数据库 RDS 主实例的基础上进行创建
 - 仅数据库类型为 MySQL 的主实例支持创建只读实例
 - 代理实例套餐和主实例套餐绑定,主实例版本最低是MySQL 5.6
 - 每个主实例最多可以创建1个代理实例
 - 需与主实例在同一vpc中
 - 代理实例只支持后付费方式购买
 
查询RDS列表
使用以下代码可以查询RDS列表。
                Go
                
            
            1// import "github.com/baidubce/bce-sdk-go/services/rds"
2
3args := &rds.ListRdsArgs{
4    // 批量获取列表的查询的起始位置,是一个由系统生成的字符串,可选
5    Marker: "marker",
6    // 指定每页包含的最大数量(主实例),最大数量不超过1000,缺省值为1000,可选
7    MaxKeys: 1,
8}
9result, err := client.ListRds(args)
10if err != nil {
11    fmt.Printf("list rds error: %+v\n", err)
12    return
13}
14
15// 返回标记查询的起始位置
16fmt.Println("rds list marker: ", result.Marker)
17// true表示后面还有数据,false表示已经是最后一页
18fmt.Println("rds list isTruncated: ", result.IsTruncated)
19// 获取下一页所需要传递的marker值。当isTruncated为false时,该域不出现
20fmt.Println("rds list nextMarker: ", result.NextMarker)
21// 每页包含的最大数量
22fmt.Println("rds list maxKeys: ", result.MaxKeys)
23// 获取rds的列表信息
24for _, e := range result.Instances {
25    fmt.Println("rds instanceId: ", e.InstanceId)
26    fmt.Println("rds instanceName: ", e.InstanceName)
27    fmt.Println("rds engine: ", e.Engine)
28    fmt.Println("rds engineVersion: ", e.EngineVersion)
29    fmt.Println("rds instanceStatus: ", e.InstanceStatus)
30    fmt.Println("rds cpuCount: ", e.CpuCount)
31    fmt.Println("rds memoryCapacity: ", e.MemoryCapacity)
32    fmt.Println("rds volumeCapacity: ", e.VolumeCapacity)
33    fmt.Println("rds usedStorage: ", e.UsedStorage)
34    fmt.Println("rds paymentTiming: ", e.PaymentTiming)
35    fmt.Println("rds instanceType: ", e.InstanceType)
36    fmt.Println("rds instanceCreateTime: ", e.InstanceCreateTime)
37    fmt.Println("rds instanceExpireTime: ", e.InstanceExpireTime)
38    fmt.Println("rds publicAccessStatus: ", e.PublicAccessStatus)
39    fmt.Println("rds task: ", e.Task)
40    fmt.Println("rds vpcId: ", e.VpcId)
41}
            注意:
- 只能查看属于自己账号的实例列表。
 - 接口将每个主实例和其只读、代理实例分成一组,参数maxKeys代表分组数,也就是主实例的个数.
 
查询指定RDS实例信息
使用以下代码可以查询指定RDS实例信息。
                Go
                
            
            1// import "github.com/baidubce/bce-sdk-go/services/rds"
2
3result, err := client.GetDetail(instanceId)
4if err != nil {
5    fmt.Printf("get rds detail error: %+v\n", err)
6    return
7}
8
9fmt.Println("rds instanceId: ", result.InstanceId)
10fmt.Println("rds instanceName: ", result.InstanceName)
11fmt.Println("rds engine: ", result.Engine)
12fmt.Println("rds engineVersion: ", result.EngineVersion)
13fmt.Println("rds instanceStatus: ", result.InstanceStatus)
14fmt.Println("rds cpuCount: ", result.CpuCount)
15fmt.Println("rds memoryCapacity: ", result.MemoryCapacity)
16fmt.Println("rds volumeCapacity: ", result.VolumeCapacity)
17fmt.Println("rds usedStorage: ", result.UsedStorage)
18fmt.Println("rds paymentTiming: ", result.PaymentTiming)
19fmt.Println("rds instanceType: ", result.InstanceType)
20fmt.Println("rds instanceCreateTime: ", result.InstanceCreateTime)
21fmt.Println("rds instanceExpireTime: ", result.InstanceExpireTime)
22fmt.Println("rds publicAccessStatus: ", result.PublicAccessStatus)
23fmt.Println("rds vpcId: ", result.VpcId)
            删除RDS实例
使用以下代码可以删除RDS实例。
                Go
                
            
            1// import "github.com/baidubce/bce-sdk-go/services/rds"
2
3//多个实例间用英文半角逗号","隔开,最多可输入10个
4if err := client.DeleteRds(instanceIds); err != nil {
5    fmt.Printf("delete rds error: %+v\n", err)
6    return
7}
8fmt.Printf("delete rds success\n")
            注意:
- 只有付费类型为Postpaid或者付费类型为Prepaid且已过期的实例才可以释放。
 - 如果主实例被释放,那么和主实例关联的只读实例和代理实例也会被释放。
 
RDS实例扩缩容
使用以下代码可以对RDS实例扩缩容操作。
                Go
                
            
            1// import "github.com/baidubce/bce-sdk-go/services/rds"
2
3args := &rds.ResizeRdsArgs{
4	// cpu核数
5    CpuCount: 2,
6    // 内存大小,单位GB
7    MemoryCapacity: 8,
8    // 磁盘大小,单位GB,每5G递增
9    VolumeCapacity: 20,
10    // 代理实例节点数,代理实例变配时此项必填
11    NodeAmount: 2,
12    // 是否进行直接支付,默认false,设置为直接支付的变配订单会直接扣款,不需要再走支付逻辑,可选
13    IsDirectPay: false,
14}
15err = client.ResizeRds(instanceId, args)
16if err != nil {
17    fmt.Printf("resize rds error: %+v\n", err)
18    return
19}
20
21fmt.Println("resize rds success.")
            注意:
- 实例可选套餐详见(https://cloud.baidu.com/doc/RDS/s/9jwvz0wd3)
 - 主实例或只读实例变配时至少填写cpuCount、memoryCapacity、volumeCapacity其中的一个。
 - 实例计费方式采用后付费时,可弹性扩缩容;采用预付费方式,不能进行缩容操作。
 - 只有实例available状态时才可以进行扩缩容操作。
 - 实例扩缩容之后会重启一次。
 - 为异步接口,可通过查询实例详情接口查看instanceStatus是否恢复。
 
重启实例
使用以下代码可以重启实例。
                Go
                
            
            1// import "github.com/baidubce/bce-sdk-go/services/rds"
2
3err := client.RebootInstance(instanceId)
4if err != nil {
5    fmt.Printf("reboot rds error: %+v\n", err)
6    return
7}
            修改实例名称
使用以下代码可以修改RDS实例名称。
                Go
                
            
            1// import "github.com/baidubce/bce-sdk-go/services/rds"
2
3args := &rds.UpdateInstanceNameArgs{
4    InstanceName: "instanceName",
5}
6err = client.UpdateInstanceName(instanceId, args)
7if err != nil {
8    fmt.Printf("update instance name error: %+v\n", err)
9    return
10}
11fmt.Printf("update instance name success\n")
            注意:
- 实例名称支持大小写字母、数字以及-_ /.等特殊字符,必须以字母开头,长度1-64。
 
已创建实例自动续费
使用以下代码可以为已创建的预付费实例创建自动续费
                Go
                
            
            1// import "github.com/baidubce/bce-sdk-go/services/rds"
2
3args := &rds.AutoRenewArgs{
4    // 自动续费时长(续费单位为year 不大于3,续费单位为month 不大于9)必选
5	AutoRenewTime: 1,
6    // 自动续费单位("year";"month")必选
7	AutoRenewTimeUnit: "year",
8    // 实例id集合 必选
9    InstanceIds: []string{
10        "rds-y9dJu77d", 
11        "rds-aQFOoncr",
12    },
13}
14err := client.AutoRenew(args)
15if err != nil {
16    fmt.Printf("create auto renew error: %+v\n", err)
17    return
18}
            注意:
- 用于已创建的实例开启自动续费。
 - 可以传入多个实例id,多个实例需保证在同一地域。
 
修改同步模式
使用以下代码可以修改RDS实例同步模式。
                Go
                
            
            1// import "github.com/baidubce/bce-sdk-go/services/rds"
2
3args := &rds.ModifySyncModeArgs{
4    //"Async"异步复制,"Semi_sync"半同步复制。
5    SyncMode: "Async",
6}
7err = client.ModifySyncMode(instanceId, args)
8if err != nil {
9    fmt.Printf("modify syncMode error: %+v\n", err)
10    return
11}
12fmt.Printf("modify syncMode success\n")
            修改连接信息
使用以下代码可以修改RDS域名前缀。
                Go
                
            
            1// import "github.com/baidubce/bce-sdk-go/services/rds"
2
3args := &rds.ModifyEndpointArgs{
4    Address: "newAddress",
5}
6err = client.ModifyEndpoint(instanceId, args)
7if err != nil {
8    fmt.Printf("modify endpoint error: %+v\n", err)
9    return
10}
11fmt.Printf("modify endpoint success\n")
            注意:
- 只传输域名前缀即可。域名前缀由小写字母和数字组成,以小写字母开头,长度在3-30之间。
 
开关公网访问
使用以下代码可以修改RDS域名前缀。
                Go
                
            
            1// import "github.com/baidubce/bce-sdk-go/services/rds"
2
3args := &rds.ModifyPublicAccessArgs{
4    // true or false
5    PublicAccess: true,
6}
7err = client.ModifyPublicAccess(instanceId, args)
8if err != nil {
9    fmt.Printf("modify public access error: %+v\n", err)
10    return
11}
12fmt.Printf("modify public access success\n")
            注意:
- true:开启公网访问; false:关闭公网访问。
 
修改时间窗口
使用以下代码可以修改操作时间窗口
                Go
                
            
            1// import "github.com/baidubce/bce-sdk-go/services/rds"
2
3args := &rds.MaintainTimeArgs{
4    MaintainStartTime: "14:00:00",
5    MaintainDuration:  2,
6}
7err = client.UpdateMaintainTime(instanceId, args)
8if err != nil {
9    fmt.Printf("update maintain time error: %+v\n", err)
10    return
11}
12fmt.Printf("update maintain time success\n")
            实例开启关闭修改存储自动扩容配置
使用以下代码可以开启关闭修改存储自动扩容配置
                Go
                
            
            1// import "github.com/baidubce/bce-sdk-go/services/rds"
2
3args := &rds.DiskAutoResizeArgs{
4    FreeSpaceThreshold: 10,
5    DiskMaxLimit:       2000,
6}
7err = client.ConfigDiskAutoResize(instanceId,"open", args)
8if err != nil {
9    fmt.Printf("config disk auto resize error: %+v\n", err)
10    return
11}
12fmt.Printf("config disk auto resize success\n")
            获取指定实例的自动扩容配置信息
使用以下代码可以获取指定实例的自动扩容配置信息
                Go
                
            
            1// import "github.com/baidubce/bce-sdk-go/services/rds"
2
3result, err = client.GetAutoResizeConfig(instanceId)
4if err != nil {
5    fmt.Printf("get config error: %+v\n", err)
6    return
7}
8fmt.Printf("get config success\n")
            实例是否支持启用自动扩容
使用以下代码可以实例是否支持启用自动扩容
                Go
                
            
            1// import "github.com/baidubce/bce-sdk-go/services/rds"
2
3result, err = client.EnableAutoExpansion(instanceId)
4if err != nil {
5    fmt.Printf("get enable auto expansion error: %+v\n", err)
6    return
7}
8fmt.Printf("get enable auto expansion success\n")
            可用区迁移
使用以下代码可以操作实例可用区迁移
                Go
                
            
            1// import "github.com/baidubce/bce-sdk-go/services/rds"
2args := &rds.AzoneMigration{
3    MasterAzone: "cn-bj-d",
4    BackupAzone: "cn-bj-e",
5    ZoneNames:   []string{"cn-bj-d", "cn-bj-e"},
6    Subnets: []SubnetMap{
7        {
8            ZoneName: "cn-bj-d",
9            SubnetId: "sbn-nedt51qre6r2",
10        },
11        {
12            ZoneName: "cn-bj-e",
13            SubnetId: "sbn-hc20wss3idai",
14        },
15    },
16    EffectiveTime: "timewindow",
17}
18result, err = client.AzoneMigration(instanceId, args)
19if err != nil {
20    fmt.Printf("azone migration error: %+v\n", err)
21    return
22}
23fmt.Printf("azone migration success\n")
            