Wie kann eine MySQL / Amazon RDS-Datenbank auf S3 gesichert werden?

31

Ich habe zwei Gründe dafür:

  1. Offsite-Sicherung für den Fall eines regionalen Problems mit Amazon Web Services.
  2. So kopieren Sie Produktionsdaten von einem Produktionsabrechnungskonto auf ein Beta-Abrechnungskonto.

Derzeit scheint es nicht so zu sein, dass Amazon einen dieser beiden Anwendungsfälle standardmäßig unterstützt.

Ich habe mysqldump und xtrabackup (siehe Formularpost ) erwähnt.

Ich habe auch einen komplizierteren Prozess gesehen ( hier dokumentiert )

  1. Ein neuer RDS-Server im Quellabrechnungskonto (prod) wird aus einer kürzlich erstellten Sicherung ausgegliedert.
  2. In Schritt 1 wird eine neue EC2-Instanz gestartet, die Zugriff auf den RDS-Server hat.
  3. Mit mysqldump wird ein Backup dieser Datenbank erstellt.
  4. Das Backup wird an einen externen Speicherort kopiert (S3?).
  5. In einem separaten Konto und / oder einer separaten Region wird ein neuer RDS-Server hochgefahren.
  6. Der Datenbankspeicherauszug wird importiert.

Tipps und Vorschläge sind willkommen.

Peter Stephens
quelle

Antworten:

22

Die empfohlene Methode zum Sichern von RDS sind automatische Sicherungen und DB-Snapshots . DB-Snapshots sind im Grunde die gleichen wie EBS-Snapshots, die in S3 hinter den Kulissen gespeichert werden, jedoch nur in derselben Region verfügbar sind.

Wenn Sie eine überregionale Fehlertoleranz benötigen (guter Plan!), Können Sie Ihre Daten in einer anderen Region nicht wiederherstellen, ohne dies "auf die harte Tour" von einem mysqldump aus zu tun. Sie können alternativ mysqldump verwenden (langsam und fürchterlich für einen vernünftig großen Datensatz) oder einen eigenen EC2-basierten Slave in einer anderen Region einrichten und mit einer beliebigen verfügbaren Methode (xtrabackup, EBS-Snapshots usw.) sichern. Dann können Sie jedoch wieder Ihre eigenen MySQL-Instanzen verwalten, sodass Sie RDS genauso gut ganz aufgeben können.

Für mein Geld bietet RDS keinerlei Vorteile und eine Reihe von Nachteilen in Bezug auf Leistung, Flexibilität und Zuverlässigkeit. Ich würde mich fragen, welchen Wert RDS für Sie hat.

Aaron Brown
quelle
Für meine aktuellen Bedürfnisse kann mysqldump ok funktionieren. Ich erwarte keine massiven Datenmengen und brauche die Daten im Allgemeinen nicht zu schnell zu verschieben. Ich hoffe, dass RDS eine Funktion zum Hochfahren eines neuen Servers von einem Snapshot in einem anderen Konto unterstützt. Eine weitere nützliche Funktion ist das Importieren / Exportieren der Snapshots aus Amazon mit S3 oder dem entsprechenden Import / Export-Server. Trotzdem danke für die Antwort.
Peter Stephens
4
RDS-Schnappschüsse können jetzt in andere Regionen kopiert werden. Einzelheiten finden Sie in dieser Ankündigung und dieser Dokumentation .
Shelley
9

Ich hatte das gleiche Problem. Meine Lösung bestand darin, ein einfaches Bash-Skript zu schreiben . Es ist jedoch auf eine einzelne Region beschränkt.

Hier ist das fragliche Skript:

#!/bin/bash
NOWDATE=`date +%Y-%m-%d`
BACKUPNAME="$NOWDATE.sql.gz"

echo "Creating backup of database finances to $BACKUPNAME"
mysqldump user=user password=password database_name | gzip -9 > $BACKUPNAME

echo "Succesfully created database backup"

echo "Uploading backup to Amazon S3 bucket…"
s3cmd put $BACKUPNAME s3://path/to/file/$BACKUPNAME

echo "Successfully uploaded backup to S3"

echo "Deleting backup file…"
rm $BACKUPNAME

echo "Done"
Jeevan Dongre
quelle
Ich kann --single-transaction nur empfehlen, wenn mysqldump
user1250 am
7

AWS RDS unterstützt jetzt das Kopieren von Snapshots über Regionen und Konten hinweg , sodass Sie Ihre Ziele einfach mit RDS erreichen können.

Zu diesem Zeitpunkt müssen Sie noch eine Speicherauszugskriptmethode verwenden, um Sicherungen in S3 zu erhalten. Die Fähigkeit, S3-IA oder Glacier zu verwenden, wäre im Hinblick auf Kosteneinsparungen gut, da die RDS-Sicherungskosten bei S3-Standard oder höher liegen (je nach DB unterschiedlich).

Mike Lapinskas
quelle
1
Pro Region und Konto sind maximal 100 manuelle Snapshots zulässig.
Judas