我已经创建了一个实例的快照并在数据库中进行了一些不需要的更改。
现在我想从这个快照中还原我的实例。
当我尝试这样做时,它会为我创建另一个实例,除了我已经拥有的实例之外。
我指定“DB实例标识符”,然后就会得到两个带有相同ID的实例。
所以我的问题是:是否有办法将快照还原到现有实例中?
因为否则 - 将创建具有不同端点(主机名)的新实例,我需要更改配置文件才能访问数据库。或者有更好的方法来管理这种情况吗?
我已经创建了一个实例的快照并在数据库中进行了一些不需要的更改。
现在我想从这个快照中还原我的实例。
当我尝试这样做时,它会为我创建另一个实例,除了我已经拥有的实例之外。
我指定“DB实例标识符”,然后就会得到两个带有相同ID的实例。
所以我的问题是:是否有办法将快照还原到现有实例中?
因为否则 - 将创建具有不同端点(主机名)的新实例,我需要更改配置文件才能访问数据库。或者有更好的方法来管理这种情况吗?
不,您不能将现有的DB实例还原为手动备份或时间点快照中的任何一个。
您可以利用手动备份或自动快照的唯一方法是创建一个新的RDS DB实例。创建新的DB实例后,您可以在应用程序/代码中更改DB的端点并删除旧的DB实例。
底线:您必须更改应用程序中的配置设置。没有其他选项。
如果有人(就像我一样)只是想恢复数据而不改变配置,以下是步骤:
将原实例重命名,并使用原名称为新实例命名
https://aws.amazon.com/blogs/aws/endpoint-renaming-for-amazon-rds/
今天我遇到了同样的问题。我认为在不更改应用程序配置设置的情况下,有两个选项可供选择。
按照Mike建议的删除旧实例,然后还原它。
首先重命名旧实例(需要在重命名时检查“立即应用”选项)。
正如@MaXimus所说(我还不能添加评论),您可以:
正如在此处的重命名以替换现有DB实例
中指定的那样:https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_RenameInstance.html
如果您想通过AWS CLI运行,可以使用以下解决方案。请将ORIG_NAME和NEW_NAME替换为您的值。
$ aws rds modify-db-instance \
--db-instance-identifier ORIG_NAME \
--new-db-instance-identifier NEW_NAME \
--apply-immediately
$ aws rds restore-db-instance-to-point-in-time \
--source-db-instance-identifier NEW_NAME \
--target-db-instance ORIG_NAME \
--restore-time 2020-08-27T00:00:00.000Z \
--publicly-accessible \
--availability-zone us-east-2a \
--db-subnet-group-name SUBNET_NAME \
--vpc-security-group-ids SG_ID
--db-subnet-group-name
--vpc-security-group-ids
--publicly-accessible
因此,aws rds restore-db-instance-to-point-in-time 的简短版本如下:
$ aws rds restore-db-instance-to-point-in-time \
--source-db-instance-identifier NEW_NAME \
--target-db-instance ORIG_NAME \
--restore-time 2020-08-27T00:00:00.000Z
回答有点晚,但是在研究过程中,我找到了一个避免进行任何应用层面更改的方法。如先前建议的,没有导入快照到现有RDS的选项。可能的解决方案:
一次性努力
每次恢复快照时
在创建了一个带有新名称的恢复数据库之后,您可以将当前实例重命名为...-old,这也会重命名数据库的URL。在URL也更改之后,您必须将恢复的数据库重命名为之前使用的名称,并等待数据库的URL更改。然后,您需要重新启动服务,它们将连接到恢复的数据库。
这样做不会导致任何中断。