实例管理
所有文档

          云数据库 RDS

          实例管理

          实例管理

          云数据库 RDS (Relational Database Service)是专业、高性能、高可靠的云数据库服务。云数据库 RDS 提供 Web 界面进行配置、操作数据库实例,还为您提供可靠的数据备份和恢复、完备的安全管理、完善的监控、轻松扩展等功能支持。相对于自建数据库,云数据库 RDS 具有更经济、更专业、更高效、更可靠、简单易用等特点,使您能更专注于核心业务。

          创建RDS主实例

          使用以下代码可以创建一个RDS主实例

          // import "github.com/baidubce/bce-sdk-go/services/rds"
          
          args := &rds.CreateRdsArgs{
          	// 指定rds的数据库引擎,取值mysql,sqlserver,postgresql,必选
              Engine:            "mysql",
              // 指定rds的数据库版本,必选
              EngineVersion:  "5.6",
              // 计费相关参数,PaymentTiming取值为 预付费:Prepaid,后付费:Postpaid;Reservation:支付方式为后支付时不需要设置,预支付时必须设置;必选
              Billing: rds.Billing{
                  PaymentTiming: "Postpaid",
                  //Reservation: rds.Reservation{ReservationLength: 1, ReservationTimeUnit: "Month"},
              },
              // 预付费时可指定自动续费参数 AutoRenewTime 和 AutoRenewTimeUnit
              // 自动续费时长(续费单位为year 不大于3,续费单位为mouth 不大于9)
              // AutoRenewTime: 1,
              // 自动续费单位("year";"mouth")
              // AutoRenewTimeUnit: "year",
              // CPU核数,必选
              CpuCount: 1,
              //套餐内存大小,单位GB,必选
              MemoryCapacity: 1,
              //套餐磁盘大小,单位GB,每5G递增,必选
              VolumeCapacity: 5,
              //批量创建云数据库 RDS 实例个数, 最大不超过10,默认1,可选
              PurchaseCount: 1,
              //rds实例名称,允许小写字母、数字,长度限制为1~32,默认命名规则:{engine} + {engineVersion},可选
              InstanceName: "instanceName",
              //所属系列,Basic:单机基础版,Standard:双机高可用版。仅SQLServer 2012sp3 支持单机基础版。默认Standard,可选
              Category: "Standard",
              //指定zone信息,默认为空,由系统自动选择,可选
              //zoneName命名规范是小写的“国家-region-可用区序列",例如北京可用区A为"cn-bj-a"。
              ZoneNames: ["cn-bj-a"],
              //vpc,如果不提供则属于默认vpc,可选
              VpcId: "vpc-IyrqYIQ7",
              //是否进行直接支付,默认false,设置为直接支付的变配订单会直接扣款,不需要再走支付逻辑,可选
              IsDirectPay: false,
              //vpc内,每个可用区的subnetId;如果不是默认vpc则必须指定 subnetId,可选
              Subnets: []rds.SubnetMap{
                  {
                      ZoneName: "cn-bj-a",
                      SubnetId: "sbn-IyWRnII7",
                  },   
              },
              // 实例绑定的标签信息,可选
              Tags: []model.TagModel{
                  {
                      TagKey:   "tagK",
                      TagValue: "tagV",
                  },
              },
          }
          result, err := client.CreateRds(args)
          if err != nil {
              fmt.Printf("create rds error: %+v\n", err)
              return
          }
          
          for _, e := range result.InstanceIds {
          	fmt.Println("create rds success, instanceId: ", e)
          }

          注意:

          • 实例可选套餐详见(https://cloud.baidu.com/doc/RDS/s/9jwvz0wd3)
          • 创建计费方式为后付费的实例需要账户现金余额+通用代金券大于100;预付费方式的实例则需要账户现金余额大于等于实例费用。
          • 支持批量创建,且如果创建过程中有一个实例创建失败,所有实例将全部回滚,均创建失败。
          • 创建接口为异步创建,可通过查询指定实例详情接口查询实例状态。

          创建RDS只读实例

          使用以下代码可以创建一个RDS只读实例

          // import "github.com/baidubce/bce-sdk-go/services/rds"
          
          args := &rds.CreateReadReplicaArgs{
              //主实例ID,必选
              SourceInstanceId: "sourceInstanceId"
              // 计费相关参数,只读实例只支持后付费Postpaid,必选
              Billing: rds.Billing{
                  PaymentTiming: "Postpaid",
              },
              // CPU核数,必选
              CpuCount: 1,
              //套餐内存大小,单位GB,必选
              MemoryCapacity: 1,
              //套餐磁盘大小,单位GB,每5G递增,必选
              VolumeCapacity: 5,
              //批量创建云数据库 RDS 只读实例个数, 目前只支持一次创建一个,可选
              PurchaseCount: 1,
              //实例名称,允许小写字母、数字,长度限制为1~32,默认命名规则:{engine} + {engineVersion},可选
              InstanceName: "instanceName",
              //指定zone信息,默认为空,由系统自动选择,可选
              //zoneName命名规范是小写的“国家-region-可用区序列",例如北京可用区A为"cn-bj-a"。
              ZoneNames: ["cn-bj-a"],
              //与主实例 vpcId 相同,可选
              VpcId: "vpc-IyrqYIQ7",
              //是否进行直接支付,默认false,设置为直接支付的变配订单会直接扣款,不需要再走支付逻辑,可选
              IsDirectPay: false,
              //vpc内,每个可用区的subnetId;如果不是默认vpc则必须指定 subnetId,可选
              Subnets: []rds.SubnetMap{
                  {
                      ZoneName: "cn-bj-a",
                      SubnetId: "sbn-IyWRnII7",
                  },   
              },
              // 实例绑定的标签信息,可选
              Tags: []model.TagModel{
                  {
                      TagKey:   "tagK",
                      TagValue: "tagV",
                  },
              },
          }
          result, err := client.CreateReadReplica(args)
          if err != nil {
              fmt.Printf("create rds readReplica error: %+v\n", err)
              return
          }
          
          for _, e := range result.InstanceIds {
          	fmt.Println("create rds readReplica success, instanceId: ", e)
          }

          注意:

          • 需要在云数据库 RDS 主实例的基础上进行创建
          • 实例可选套餐详见(https://cloud.baidu.com/doc/RDS/s/9jwvz0wd3)
          • 仅数据库类型为 MySQL 的主实例支持创建只读实例
          • 只读实例的数据库引擎和数据库版本与主实例相同,无需设置,主实例版本最低是 MySQL 5.6
          • 只读实例的磁盘容量不能小于主实例的磁盘容量
          • 只读实例的 vpcId 需跟主实例一致
          • 一个云数据库 RDS 实例,最多只能有 5 个只读实例,且一次只能创建一个
          • 只读实例只支持后付费方式购买

          创建RDS代理实例

          使用以下代码可以创建一个RDS代理实例

          // import "github.com/baidubce/bce-sdk-go/services/rds"
          
          args := &rds.CreateRdsProxyArgs{
              //主实例ID,必选
              SourceInstanceId: "sourceInstanceId"
              // 计费相关参数,代理实例只支持后付费Postpaid,必选
              Billing: rds.Billing{
                  PaymentTiming: "Postpaid",
              },
              // 代理实例节点数。取值范围2,4,6,8,16,必选
              NodeAmount: 2,
              //实例名称,允许小写字母、数字,长度限制为1~32,默认命名规则:{engine} + {engineVersion},可选
              InstanceName: "instanceName",
              //指定zone信息,默认为空,由系统自动选择,可选
              //zoneName命名规范是小写的“国家-region-可用区序列",例如北京可用区A为"cn-bj-a",建议与主实例的可用区保持一致
              ZoneNames: ["cn-bj-a"],
              //与主实例 vpcId 相同,可选
              VpcId: "vpc-IyrqYIQ7",
              //是否进行直接支付,默认false,设置为直接支付的变配订单会直接扣款,不需要再走支付逻辑,可选
              IsDirectPay: false,
              //vpc内,每个可用区的subnetId;如果不是默认vpc则必须指定 subnetId,可选
              Subnets: []rds.SubnetMap{
                  {
                      ZoneName: "cn-bj-a",
                      SubnetId: "sbn-IyWRnII7",
                  },   
              },
              // 实例绑定的标签信息,可选
              Tags: []model.TagModel{
                  {
                      TagKey:   "tagK",
                      TagValue: "tagV",
                  },
              },
          }
          result, err := client.CreateRdsProxy(args)
          if err != nil {
              fmt.Printf("create rds proxy error: %+v\n", err)
              return
          }
          
          for _, e := range result.InstanceIds {
          	fmt.Println("create rds proxy success, instanceId: ", e)
          }

          注意:

          • 需要在云数据库 RDS 主实例的基础上进行创建
          • 仅数据库类型为 MySQL 的主实例支持创建只读实例
          • 代理实例套餐和主实例套餐绑定,主实例版本最低是MySQL 5.6
          • 每个主实例最多可以创建1个代理实例
          • 需与主实例在同一vpc中
          • 代理实例只支持后付费方式购买

          查询RDS列表

          使用以下代码可以查询RDS列表。

          // import "github.com/baidubce/bce-sdk-go/services/rds"
          
          args := &rds.ListRdsArgs{
              // 批量获取列表的查询的起始位置,是一个由系统生成的字符串,可选
              Marker: "marker",
              // 指定每页包含的最大数量(主实例),最大数量不超过1000,缺省值为1000,可选
              MaxKeys: 1,
          }
          result, err := client.ListRds(args)
          if err != nil {
              fmt.Printf("list rds error: %+v\n", err)
              return
          }
          
          // 返回标记查询的起始位置
          fmt.Println("rds list marker: ", result.Marker)
          // true表示后面还有数据,false表示已经是最后一页
          fmt.Println("rds list isTruncated: ", result.IsTruncated)
          // 获取下一页所需要传递的marker值。当isTruncated为false时,该域不出现
          fmt.Println("rds list nextMarker: ", result.NextMarker)
          // 每页包含的最大数量
          fmt.Println("rds list maxKeys: ", result.MaxKeys)
          // 获取rds的列表信息
          for _, e := range result.Instances {
              fmt.Println("rds instanceId: ", e.InstanceId)
              fmt.Println("rds instanceName: ", e.InstanceName)
              fmt.Println("rds engine: ", e.Engine)
              fmt.Println("rds engineVersion: ", e.EngineVersion)
              fmt.Println("rds instanceStatus: ", e.InstanceStatus)
              fmt.Println("rds cpuCount: ", e.CpuCount)
              fmt.Println("rds memoryCapacity: ", e.MemoryCapacity)
              fmt.Println("rds volumeCapacity: ", e.VolumeCapacity)
              fmt.Println("rds usedStorage: ", e.UsedStorage)
              fmt.Println("rds paymentTiming: ", e.PaymentTiming)
              fmt.Println("rds instanceType: ", e.InstanceType)
              fmt.Println("rds instanceCreateTime: ", e.InstanceCreateTime)
              fmt.Println("rds instanceExpireTime: ", e.InstanceExpireTime)
              fmt.Println("rds publicAccessStatus: ", e.PublicAccessStatus)
              fmt.Println("rds vpcId: ", e.VpcId)
          }

          注意:

          • 只能查看属于自己账号的实例列表。
          • 接口将每个主实例和其只读、代理实例分成一组,参数maxKeys代表分组数,也就是主实例的个数.

          查询指定RDS实例信息

          使用以下代码可以查询指定RDS实例信息。

          // import "github.com/baidubce/bce-sdk-go/services/rds"
          
          result, err := client.GetDetail(instanceId)
          if err != nil {
              fmt.Printf("get rds detail error: %+v\n", err)
              return
          }
          
          fmt.Println("rds instanceId: ", result.InstanceId)
          fmt.Println("rds instanceName: ", result.InstanceName)
          fmt.Println("rds engine: ", result.Engine)
          fmt.Println("rds engineVersion: ", result.EngineVersion)
          fmt.Println("rds instanceStatus: ", result.InstanceStatus)
          fmt.Println("rds cpuCount: ", result.CpuCount)
          fmt.Println("rds memoryCapacity: ", result.MemoryCapacity)
          fmt.Println("rds volumeCapacity: ", result.VolumeCapacity)
          fmt.Println("rds usedStorage: ", result.UsedStorage)
          fmt.Println("rds paymentTiming: ", result.PaymentTiming)
          fmt.Println("rds instanceType: ", result.InstanceType)
          fmt.Println("rds instanceCreateTime: ", result.InstanceCreateTime)
          fmt.Println("rds instanceExpireTime: ", result.InstanceExpireTime)
          fmt.Println("rds publicAccessStatus: ", result.PublicAccessStatus)
          fmt.Println("rds vpcId: ", result.VpcId)

          删除RDS实例

          使用以下代码可以删除RDS实例。

          // import "github.com/baidubce/bce-sdk-go/services/rds"
          
          //多个实例间用英文半角逗号","隔开,最多可输入10个
          if err := client.DeleteRds(instanceIds); err != nil {
              fmt.Printf("delete rds error: %+v\n", err)
              return
          }
          fmt.Printf("delete rds success\n")

          注意:

          • 只有付费类型为Postpaid或者付费类型为Prepaid且已过期的实例才可以释放。
          • 如果主实例被释放,那么和主实例关联的只读实例和代理实例也会被释放。

          RDS实例扩缩容

          使用以下代码可以对RDS实例扩缩容操作。

          // import "github.com/baidubce/bce-sdk-go/services/rds"
          
          args := &rds.ResizeRdsArgs{
          	// cpu核数
              CpuCount: 2,
              // 内存大小,单位GB
              MemoryCapacity: 8,
              // 磁盘大小,单位GB,每5G递增
              VolumeCapacity: 20,
              // 代理实例节点数,代理实例变配时此项必填
              NodeAmount: 2,
              // 是否进行直接支付,默认false,设置为直接支付的变配订单会直接扣款,不需要再走支付逻辑,可选
              IsDirectPay: false,
          }
          err = client.ResizeRds(instanceId, args)
          if err != nil {
              fmt.Printf("resize rds error: %+v\n", err)
              return
          }
          
          fmt.Println("resize rds success.")

          注意:

          • 实例可选套餐详见(https://cloud.baidu.com/doc/RDS/s/9jwvz0wd3)
          • 主实例或只读实例变配时至少填写cpuCount、memoryCapacity、volumeCapacity其中的一个。
          • 实例计费方式采用后付费时,可弹性扩缩容;采用预付费方式,不能进行缩容操作。
          • 只有实例available状态时才可以进行扩缩容操作。
          • 实例扩缩容之后会重启一次。
          • 为异步接口,可通过查询实例详情接口查看instanceStatus是否恢复。

          重启实例

          使用以下代码可以重启实例。

          // import "github.com/baidubce/bce-sdk-go/services/rds"
          
          err := client.RebootInstance(instanceId)
          if err != nil {
              fmt.Printf("reboot rds error: %+v\n", err)
              return
          }

          修改实例名称

          使用以下代码可以修改RDS实例名称。

          // import "github.com/baidubce/bce-sdk-go/services/rds"
          
          args := &rds.UpdateInstanceNameArgs{
              InstanceName: "instanceName",
          }
          err = client.UpdateInstanceName(instanceId, args)
          if err != nil {
              fmt.Printf("update instance name error: %+v\n", err)
              return
          }
          fmt.Printf("update instance name success\n")

          注意:

          • 实例名称支持大小写字母、数字以及-_ /.等特殊字符,必须以字母开头,长度1-64。

          修改同步模式

          使用以下代码可以修改RDS实例同步模式。

          // import "github.com/baidubce/bce-sdk-go/services/rds"
          
          args := &rds.ModifySyncModeArgs{
              //"Async"异步复制,"Semi_sync"半同步复制。
              SyncMode: "Async",
          }
          err = client.ModifySyncMode(instanceId, args)
          if err != nil {
              fmt.Printf("modify syncMode error: %+v\n", err)
              return
          }
          fmt.Printf("modify syncMode success\n")

          修改连接信息

          使用以下代码可以修改RDS域名前缀。

          // import "github.com/baidubce/bce-sdk-go/services/rds"
          
          args := &rds.ModifyEndpointArgs{
              Address: "newAddress",
          }
          err = client.ModifyEndpoint(instanceId, args)
          if err != nil {
              fmt.Printf("modify endpoint error: %+v\n", err)
              return
          }
          fmt.Printf("modify endpoint success\n")

          注意:

          • 只传输域名前缀即可。域名前缀由小写字母和数字组成,以小写字母开头,长度在3-30之间。

          开关公网访问

          使用以下代码可以修改RDS域名前缀。

          // import "github.com/baidubce/bce-sdk-go/services/rds"
          
          args := &rds.ModifyPublicAccessArgs{
              // true or false
              PublicAccess: true,
          }
          err = client.ModifyPublicAccess(instanceId, args)
          if err != nil {
              fmt.Printf("modify public access error: %+v\n", err)
              return
          }
          fmt.Printf("modify public access success\n")

          注意:

          • true:开启公网访问; false:关闭公网访问。

          开启自动续费

          使用以下代码可以为已创建的预付费实例开启自动续费

          // import "github.com/baidubce/bce-sdk-go/services/rds"
          
          args := &rds.AutoRenewArgs{
              // 自动续费时长(续费单位为year 不大于3,续费单位为month 不大于9)必选
          	AutoRenewTime: 1,
              // 自动续费单位("year";"month")必选
          	AutoRenewTimeUnit: "year",
              // 实例id集合 必选
              InstanceIds: []string{
                  "rds-y9dJu77d", 
                  "rds-aQFOoncr",
              },
          }
          err := client.AutoRenew(args)
          if err != nil {
              fmt.Printf("create auto renew error: %+v\n", err)
              return
          }

          注意:

          • 用于已创建的实例开启自动续费。
          • 可以传入多个实例id,多个实例需保证在同一地域。
          上一篇
          初始化
          下一篇
          账号管理