Amazon RDS:将快照还原到现有实例


71

我已经创建了实例的快照,并在数据库中做了一些不需要的更改。

现在,我想从该快照还原我的实例。

当我尝试执行此操作时,除了我拥有的实例外,它还为我创建了另一个实例。

我指定“数据库实例标识符”,然后得到两个具有相同ID的实例。

所以我的问题是:有什么办法可以将快照还原到现有实例?

因为在其他情况下-使用不同的端点(主机名)创建了新实例,并且我需要更改配置以访问数据库。还是有更好的方法来处理此类案件?


4
只需删除您的旧实例。问题解决了。
Mike Brant 2014年

Answers:


67

不,您不能将现有数据库实例还原到任何手动备份或时间点快照。

可以使用手动备份或自动快照的唯一方法是使用该实例创建一个新的RDS数据库实例。创建新的数据库实例后,您可以在应用程序/代码中更改数据库的终结点并删除旧的数据库实例。

底线:您必须在应用程序中更改配置设置。没有其他选择。


33
正确,尽管“现在”是CNAME在DNS中配置a并将其指向您的RDS主机名的好时机,然后将应用程序重新配置为使用cname。然后,将来,您只需要进行一项更改-DNS。
Michael-sqlbot

是的,我还没有尝试过;但我想应该可以。假设那行得通;缺点是DNS缓存和传播可能会更长,并且您的应用程序的行为可能会很奇怪。我个人认为修改应用程序的配置设置是缓解此类问题的最佳方法。
Naveen Vijay 2014年

4
的确如此,但是如果您控制DNS并使用合理的TTL,那么它不应该成为破坏交易的工具。哪种方法最好,还取决于有多少地方需要重新配置应用程序,或者针对一个数据库运行多少不同的应用程序。
Michael-sqlbot

因此,没有什么服务,例如EC2的Elastic ip,何时可以为数据库获得一个静态终结点?这很尴尬=)感谢您的回答!
SmxCde 2014年

否则,只需从还原的快照复制数据库,而不更改端点。
jontro'3

60

如果有人(像我一样)来这里恢复数据而无需更改您的配置。

步骤如下:

  • 从自动快照或手动创建的快照中创建一个新实例(临时)。
  • 从Sequel pro或Mysql工作台连接到该实例。
  • 从该临时实例中获取所需数据的SQL转储。
  • 连接生产实例并还原它。
  • 现在删除您创建的临时实例。

2
这种方法的主要好处是,您可以使用与通常相同的脚本和配置来创建新的生产实例,然后按照步骤建议将数据复制到其中。
最多

这救了我,但要指出一个明显的事实-如果您有大量数据,这可能会花费一段时间!
Crazometer

25

重命名原始实例并使用原始名称命名新实例

https://aws.amazon.com/blogs/aws/endpoint-renaming-for-amazon-rds/


该链接用于更改aws实例名称,这显然也会重命名您的端点。
Swapnil Boralkar

最有用的答案通常是在底部:(
Randolpho

尽管这个主意看起来不错,但只读副本仍然保留在较旧的实例上(我刚刚检查了此过程)。我猜想,我们将不得不为Multi-AZ重新配置这个新恢复的实例(如果在恢复过程中未完成),并且还要创建新的只读副本!
Koushik Shom Choudhury

9

我今天有同样的问题。我认为您有两个选择,而无需更改应用程序的配置设置。

  1. 按照Mike的建议删除旧实例,然后将其还原。

  2. 首先重命名旧实例(重命名时需要选中“立即应用”选项)。


您的意思是“接下来重命名新实例(重命名时需要选中“立即应用”选项)。” ?
AgBorkowski

1
不,我的意思是“重命名旧实例”。然后,您可以将备份还原为原始名称。
jack.chen.job


0

如果要通过AWS CLI运行,则为解决方案。用您的值替换ORIG_NAMENEW_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

  • 如果您没有自定义VPC,则可以跳过 --db-subnet-group-name
  • 如果您的RDS没有自定义安全组,则可以跳过 --vpc-security-group-ids
  • 如果您不需要公共访问您的实例,请跳过 --publicly-accessible

因此,aws rds restore-db-instance-to-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 \

-1

使用新名称创建还原的数据库后,可以将当前实例重命名为...- old,这也将重命名数据库URL。更改了URL后,还必须将还原的数据库重命名为以前使用的名称,请等到数据库的URL更改。然后,您必须重新启动服务,它们将连接到已还原的数据库。

这根本不会造成中断。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.