AWS Aurora:如何通过aws cli恢复数据库集群快照?

时间:2016-12-08 12:38:03

标签: amazon-web-services aws-rds

通过控制台非常简单,但我需要从CLI执行相同操作。

首先我创建了一个数据库快照:

aws rds create-db-cluster-snapshot \
    --db-cluster-snapshot-identifier $SNAPSHOT_ID \
    --db-cluster-identifier $CLUSTER \

CLUSTER只包含一个编写器实例

  

我没有使用create-db-snapshot方法,因为它抛出了错误

     

调用CreateDBSnapshot操作时发生客户端错误(InvalidParameterValue):指定的实例是群集的成员,无法直接创建快照。请改用CreateDBClusterSnapshot API。

有效:

aws rds create-db-cluster-snapshot \
  --db-cluster-snapshot-identifier $SNAPSHOT_ID \
  --db-cluster-identifier $CLUSTER \
{
    "DBClusterSnapshot": {
        "Engine": "aurora", 
        "SnapshotCreateTime": "2016-12-08T11:48:07.534Z", 
    ....
}

所以,我想从快照中恢复一个新的Aurora集群,然后我尝试了:

aws rds restore-db-instance-from-db-snapshot \
    --db-instance-identifier from-snap2 \
    --db-snapshot-identifier snap2 \

 A client error (DBSnapshotNotFound) occurred when calling the RestoreDBInstanceFromDBSnapshot operation: DBSnapshot not found: snap2

所以我试着恢复:

aws rds restore-db-cluster-from-snapshot \
    --db-cluster-identifier from-snap2 \
    --snapshot-identifier snap2 \
    --engine aurora \
    --vpc-security-group-ids $PREPROD_SG \
    --db-subnet-group-name my-db-subnet-group \

它有效......

{
    "DBCluster": {
        ...
        "EngineVersion": "5.6.10a", 
        "DBClusterIdentifier": "from-snap2", 
...
        "DBClusterMembers": [], 
...
}

但为什么群集不包含任何Aurora实例?

错误在哪里?

3 个答案:

答案 0 :(得分:3)

这非常违反直觉。如果从快照还原群集,但群集中没有成员实例,那么实际上哪些操作成功了?似乎所有这些都是创建某种逻辑实体,可能是后备存储,但没有实例。

奇怪。但是,API documentation确实在示例响应中将集群成员显示为空集。

<DBClusterMembers/>

因此,您似乎创建了一个群集,就像您一样,然后您显然在群集中创建实例,如AWS论坛帖子中所述:

  

aws rds create-db-instance --db-instance-identifier my-instance --db-instance-class db.r3.large --engine aurora --db-subnet-group-name default-vpc-xxxxxx --db-cluster-identifier my-instance-cluster

     

https://forums.aws.amazon.com/thread.jspa?messageID=688727

显然,控制台在同一操作后面封装了多个API请求。

答案 1 :(得分:2)

AWS Support的回复:

  

使用API​​调用时,这是一个已知问题,我们的工程师正在研究它。即使群集在通过CLI创建后在AWS控制台上可见,也不会在Aurora群集中自动创建任何实例。在这种情况下,您需要创建一个db-instance并将其与新恢复的集群相关联。在AWS控制台上执行此操作时,会自动为群集创建新实例,但CLI中的操作使用不同的API调用。

     

以下文档提供了有关如何创建数据库实例的详细信息:   http://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html

     

您可以使用AWS控制台或使用CLI描述您的群集:   http://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-clusters.html

     

以下是一个命令行示例,它创建实例并将其与虚构集群关联:   aws rds create-db-instance --engine aurora --db-cluster-identifier yourauroraclusteridentifier --db-instance-class db.t2.medium --db-instance-identifier yourinstanceidentifier

就我而言,--db-cluster-identifier是从群集快照创建的群集。

答案 2 :(得分:0)

如果使用aws rds创建create-db-cluster-snapshot,则无法使用aws rds restore-db-instance-from-db-snapshot进行恢复。第一个创建数据库快照,第二个恢复不同类型的群集快照。

从您的问题看,您的恢复看起来是正确的,也许您需要指定--database-name。您也可以尝试仅使用所需参数进行恢复,即没有vpc sg或DB子网。