Amazon RDS: Restore snapshot to existing instance

MysqlAmazon Web-ServicesAmazon Rds

Mysql Problem Overview


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?

Mysql Solutions


Solution 1 - Mysql

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.

Solution 2 - Mysql

If anyone came here (just like me) to just restore data without altering your configuration.

Here are the steps :

  • Create a new instance(temp) from your automatic snapshots or manually created ones.
  • Connect to this instance from either Sequel pro or Mysql workbench.
  • Take SQL dump of whatever data you needed from this temp instance.
  • Connect your production instance and restore it.
  • Now delete the temp instance you created.

Solution 3 - Mysql

Rename original instance and name new instance with original name

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

Solution 4 - Mysql

I had the same issue today. I think you have two options without changing the application's configuration setting.

  1. delete the old instance as Mike suggested, then restore it.

  2. rename the old instance first ( need to check "Apply immediately" option when rename it).

Solution 5 - Mysql

As @MaXimus said (I cannot add comments yet) you can:

  1. rename original instance first
  2. restore from snapshot and assign original instance name

As it's specified in Renaming to Replace an Existing DB Instance here: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_RenameInstance.html

Solution 6 - Mysql

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

  • If you don't have a custom VPC, you can skip --db-subnet-group-name
  • If you don't have a custom security group for your RDS, you can skip --vpc-security-group-ids
  • If you don't need public access to your instance skip --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

Solution 7 - Mysql

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSmxCdeView Question on Stackoverflow
Solution 1 - MysqlNaveen VijayView Answer on Stackoverflow
Solution 2 - MysqlKattiView Answer on Stackoverflow
Solution 3 - MysqlMaXimusView Answer on Stackoverflow
Solution 4 - Mysqljack.chen.jobView Answer on Stackoverflow
Solution 5 - MysqlcjurozView Answer on Stackoverflow
Solution 6 - MysqlDmitrySemenovView Answer on Stackoverflow
Solution 7 - MysqlFrankyView Answer on Stackoverflow