Reputation: 5403
I have created a snapshot of my instance and made some unwanted changes in DB.
Now I want to restore my instance from this snapshot.
When I try to do it - it creates me one more instance, additionally to the one I have.
I specify "DB Instance Identifier" and after that I get two instances with the same ID.
So my question: Is there any way to restore snapshot to existing instance?
Because in other case - new instance is created with differrent endpoint (hostname) and I need to change my configs to access database. Or there is a better way to manage such cases?
Upvotes: 133
Views: 93416
Reputation: 291
Quite late to answer, but while researching I found a way to avoid any application level changes. As Suggested already there is no option to import snapshot to existing RDS. A probable solution :
One time effort
Everytime you restore a snapshot
Upvotes: 0
Reputation: 10305
Solution if you want to run through AWS CLI. Replace ORIG_NAME and NEW_NAME with your values
$ 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
So a short version of the aws rds restore-db-instance-to-point-in-time then would be:
$ 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
Upvotes: 2
Reputation: 7
After you created the restored db with a new name you can rename the current instance to ...-old, this also renames the db url. After the url is also changed, you have to rename the restored db to the befored used name, wait until the url of the db changes. Then you have to restart your services, and they will connect to the restored db.
This causes no outage at all.
Upvotes: -2
Reputation: 163
As @MaXimus said (I cannot add comments yet) you can:
As it's specified in Renaming to Replace an Existing DB Instance
here: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_RenameInstance.html
Upvotes: 3
Reputation: 557
Rename original instance and name new instance with original name
https://aws.amazon.com/blogs/aws/endpoint-renaming-for-amazon-rds/
Upvotes: 44
Reputation: 2121
If anyone came here (just like me) to just restore data without altering your configuration.
Here are the steps :
Upvotes: 80
Reputation: 329
I had the same issue today. I think you have two options without changing the application's configuration setting.
delete the old instance as Mike suggested, then restore it.
rename the old instance first ( need to check "Apply immediately" option when rename it).
Upvotes: 15
Reputation: 16482
No you can't restore back your existing DB instance to any of the either manual backup or point-in-time snapshot.
The only way you can make use of the manual backup or automated snapshot is to create a new RDS DB instance using that. Once the new DB instance is created, you can change the endpoint of DB in your app / code and delete the old DB instance.
Bottomline : You have to change the config settings in your app. No other option.
Upvotes: 120