Amazon RDS: Stellen Sie den Snapshot in der vorhandenen Instanz wieder her


71

Ich habe einen Snapshot meiner Instanz erstellt und einige unerwünschte Änderungen in der Datenbank vorgenommen.

Jetzt möchte ich meine Instanz aus diesem Snapshot wiederherstellen.

Wenn ich es versuche, wird mir zusätzlich zu der Instanz, die ich habe, eine weitere Instanz erstellt.

Ich gebe "DB Instance Identifier" an und erhalte danach zwei Instanzen mit derselben ID.

Meine Frage: Gibt es eine Möglichkeit, den Snapshot einer vorhandenen Instanz wiederherzustellen?

Denn in einem anderen Fall wird eine neue Instanz mit einem anderen Endpunkt (Hostname) erstellt und ich muss meine Konfigurationen ändern, um auf die Datenbank zugreifen zu können. Oder gibt es einen besseren Weg, um solche Fälle zu verwalten?


4
Löschen Sie einfach Ihre alte Instanz. Problem gelöst.
Mike Brant

Antworten:


67

Nein, Sie können Ihre vorhandene DB-Instanz weder in einer manuellen Sicherung noch in einem Snapshot zu einem bestimmten Zeitpunkt wiederherstellen.

Die einzige Möglichkeit, die manuelle Sicherung oder den automatisierten Snapshot zu verwenden, besteht darin, damit eine neue RDS DB-Instanz zu erstellen. Sobald die neue DB-Instanz erstellt wurde, können Sie den Endpunkt der DB in Ihrer App / Ihrem Code ändern und die alte DB-Instanz löschen.

Fazit: Sie müssen die Konfigurationseinstellungen in Ihrer App ändern. Keine andere Option.


33
Richtig, obwohl "jetzt" ein guter Zeitpunkt wäre, um a CNAMEin DNS zu konfigurieren und auf Ihren RDS-Hostnamen zu verweisen. Konfigurieren Sie dann die Anwendung neu, um den c-Namen zu verwenden. Dann müssen Sie in Zukunft nur noch eine Änderung vornehmen - in DNS.
Michael - sqlbot

Richtig, ich habe es nicht versucht; aber ich denke das sollte funktionieren. Angenommen, das würde funktionieren; Der Nachteil davon ist, dass der DNS-Cache und die Weitergabe möglicherweise länger dauern und sich Ihre App möglicherweise seltsam verhält. Ich persönlich bin der Meinung, dass das Ändern der Konfigurationseinstellungen der App das Beste ist, um diese Art von Problemen zu mindern.
Naveen Vijay

4
Richtig, aber wenn Sie das DNS steuern und vernünftige TTL verwenden, sollte es kein Deal-Breaker sein. Welcher Ansatz am besten geeignet ist, hängt auch davon ab, an wie vielen Stellen die App neu konfiguriert werden muss oder wie viele verschiedene Apps für eine Datenbank ausgeführt werden.
Michael - sqlbot

Es gibt also keinen Dienst wie die elastische IP für EC2, bei dem Sie einen statischen Endpunkt für Ihre Datenbank erhalten können? Das ist umständlich =) Danke für die Antworten!
SmxCde

Andernfalls kopieren Sie einfach die Datenbank aus dem wiederhergestellten Snapshot, anstatt den Endpunkt zu ändern.
Jontro

60

Wenn jemand hierher gekommen ist (genau wie ich), um nur Daten wiederherzustellen, ohne Ihre Konfiguration zu ändern.

Hier sind die Schritte:

  • Erstellen Sie eine neue Instanz (temporär) aus Ihren automatischen oder manuell erstellten Snapshots.
  • Stellen Sie über Sequel Pro oder MySQL Workbench eine Verbindung zu dieser Instanz her.
  • Nehmen Sie einen SQL-Speicherauszug aller Daten, die Sie von dieser temporären Instanz benötigen.
  • Verbinden Sie Ihre Produktionsinstanz und stellen Sie sie wieder her.
  • Löschen Sie nun die von Ihnen erstellte temporäre Instanz.

2
Der Hauptvorteil dieses Ansatzes besteht darin, dass Sie eine neue Produktionsinstanz mit denselben Skripten und Konfigurationen erstellen können, wie Sie es normalerweise tun, und dann Daten wie in den Schritten angegeben in sie kopieren können.
Max

Das hat mich gerettet, aber um auf das Offensichtliche hinzuweisen: Wenn Sie viele Daten haben, kann dies eine Weile dauern!
Crazometer

25

Benennen Sie die ursprüngliche Instanz um und benennen Sie die neue Instanz mit dem ursprünglichen Namen

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


Dieser Link dient zum Ändern des aws-Instanznamens, wodurch natürlich auch Ihr Endpunkt umbenannt wird.
Swapnil Boralkar

Die nützlichste Antwort ist oft unten :(
Randolpho

Obwohl die Idee großartig erscheint, bleiben Read Replica's an die ältere Instanz gebunden (ich habe gerade dieses Verfahren überprüft). Ich vermute, wir müssen diese neu wiederhergestellte Instanz für Multi-AZ neu konfigurieren (falls dies während der Wiederherstellung nicht erfolgt) und auch neue Lesereplikate erstellen!
Koushik Shom Choudhury

9

Ich hatte heute das gleiche Problem. Ich denke, Sie haben zwei Möglichkeiten, ohne die Konfigurationseinstellung der Anwendung zu ändern.

  1. Löschen Sie die alte Instanz wie von Mike vorgeschlagen und stellen Sie sie dann wieder her.

  2. Benennen Sie zuerst die alte Instanz um (aktivieren Sie beim Umbenennen die Option "Sofort anwenden").


Meinten Sie "benennen Sie die neue Instanz als nächstes um (müssen Sie die Option" Sofort anwenden "aktivieren, wenn Sie sie umbenennen)." ?
AgBorkowski

1
Nein, ich meine "alte Instanz umbenennen". Anschließend können Sie die Sicherung auf den ursprünglichen Namen zurücksetzen.
jack.chen.job


0

Lösung, wenn Sie AWS CLI ausführen möchten. Ersetzen Sie ORIG_NAME und NEW_NAME durch Ihre Werte

$ 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

  • Wenn Sie keine benutzerdefinierte VPC haben, können Sie diese überspringen --db-subnet-group-name
  • Wenn Sie keine benutzerdefinierte Sicherheitsgruppe für Ihr RDS haben, können Sie diese überspringen --vpc-security-group-ids
  • Wenn Sie keinen öffentlichen Zugriff auf Ihre Instanz benötigen, überspringen Sie --publicly-accessible

Eine kurze Version der aws rds restore-db-instance-to-point-in-time wäre also:

$ 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

Nachdem Sie die wiederhergestellte Datenbank mit einem neuen Namen erstellt haben, können Sie die aktuelle Instanz in ... alt umbenennen. Dadurch wird auch die Datenbank-URL umbenannt. Nachdem auch die URL geändert wurde, müssen Sie die wiederhergestellte Datenbank in den zuvor verwendeten Namen umbenennen und warten, bis sich die URL der Datenbank ändert. Dann müssen Sie Ihre Dienste neu starten, und sie stellen eine Verbindung zur wiederhergestellten Datenbank her.

Dies verursacht überhaupt keinen Ausfall.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.