如何将快照恢复到现有的 Aurora 数据库实例?

How can I restore a snapshot to an existing Aurora db instance?

我重新部署了一个 Auraro 集群 (postgresql 11)。我通过删除现有的并重新创建一个新的来做到这一点。我有以前数据库实例的快照备份,我想将数据恢复到现有实例。

我了解到 Aurora 不支持它。我有解决方法吗?比如我是否可以将快照以纯 sql 脚本格式下载到本地。然后手动将它们恢复到新实例?

您可以从已保存的数据库集群快照中恢复。要从数据库集群快照还原数据库集群,请使用 AWS CLI 命令 restore-db-cluster-from-snapshot.

在此示例中,您从之前创建的名为 mydbclustersnapshot 的数据库集群快照中恢复。您还原到名为 mynewdbcluster 的新数据库集群。您使用 Aurora PostgreSQL。

示例:

对于 Linux、macOS 或 Unix:

aws rds restore-db-cluster-from-snapshot \
    --db-cluster-identifier mynewdbcluster \
    --snapshot-identifier mydbclustersnapshot \
    --engine aurora-postgresql

对于Windows:

aws rds restore-db-cluster-from-snapshot ^
    --db-cluster-identifier mynewdbcluster ^
    --snapshot-identifier mydbclustersnapshot ^
    --engine aurora-postgresql

此外,您还可以使用 AWS 管理控制台或 RDS API 来完成此操作。阅读 this docs 了解详情。

I understand that Aurora doesn't support it. Is there a workaround for me to do that? Like whether I can download the snapshot to local in plain sql script format. Then manually restore them to the new instance?

您当然可以通过执行以下操作来实现:

  1. 将快照还原到新集群(集群 B)。
  2. 根据您使用的 Aurora 数据库引擎,使用 pgdumpmysqldump 从该集群导出数据。我建议在同一 VPC 的 EC2 实例中执行此操作。
  3. 删除集群 B。
  4. 删除原始集群(集群 A)中的数据库。
  5. 将导出的所有数据加载到群集 A。

但是,此时您所完成的只是维护了 RDS 集群的端点 URL。如果您将系统设计为允许更改 RDS 端点 URL,那么您只需将快照恢复到新集群、交换应用程序连接的端点并删除旧集群就会容易得多。

您可以使用Teddy Aryono推荐的方法恢复数据库集群。

现在其余使用数据库主机名,使用秘密管理器存储您的凭据,因此即使在将快照恢复到新集群后数据库主机名发生变化,您也不需要更新 application/lambda 配置。 (当然,您需要在恢复后使用新主机名更新秘密管理器详细信息)