Qual è il modo consigliato per eseguire il backup di un database MySQL / Amazon RDS su S3?


31

Ho due scopi per questo:

  1. Avere un backup fuori sede in caso di un problema a livello di regione con Amazon Web Services.
  2. Per copiare i dati di produzione da un account di fatturazione di produzione a un account di fatturazione beta.

Attualmente non sembra che Amazon supporti uno di questi due casi di utilizzo.

Ho visto menzionato mysqldump e xtrabackup (vedi modulo post).

Ho anche visto un processo più complicato (documentato qui )

  1. Un nuovo server RDS nell'account di fatturazione di origine (prod) viene espulso da un backup recente.
  2. Viene creata una nuova istanza EC2 che ha accesso al server RDS nel passaggio 1.
  3. mysqldump viene utilizzato per eseguire un backup di questo database.
  4. Il backup viene copiato in una posizione esterna (S3?).
  5. In un account e / o area separati, viene avviato un nuovo server RDS.
  6. Il dump del database è stato importato.

Suggerimenti e suggerimenti sono apprezzati.

Risposte:


22

Il modo consigliato per eseguire il backup di RDS è con backup automatici e snapshot DB . Gli snapshot DB sono sostanzialmente gli stessi degli snapshot EBS, che sono memorizzati in S3 dietro le quinte, ma sono disponibili solo nella stessa regione.

Se hai bisogno di tolleranza ai guasti tra regioni (buon piano!), Non c'è modo di ripristinare i tuoi dati in un'altra regione senza farlo "nel modo più duro" da un mysqldump. Le alternative sono eseguire il backup utilizzando mysqldump (lento e terribile per qualsiasi set di dati di dimensioni ragionevoli) o impostare il proprio slave basato su EC2 in un'altra regione e eseguire il backup utilizzando qualsiasi metodo disponibile (xtrabackup, snapshot EBS, ecc.). Tuttavia, sei tornato a gestire le tue istanze MySQL, quindi potresti anche abbandonare completamente RDS.

Per quanto mi riguarda, RDS non offre assolutamente alcun vantaggio in alcun modo e molti svantaggi in termini di prestazioni, flessibilità e affidabilità. Vorrei chiederti quale valore ti offre RDS.


Per le mie esigenze attuali mysqldump potrebbe funzionare bene. Non mi aspetto enormi set di dati e in genere non ho bisogno che i dati vengano spostati troppo rapidamente. Spero che RDS supporterà una funzione per far girare un nuovo server da un'istantanea in un altro account. Un'altra utile funzione sarebbe quella di importare / esportare le istantanee da Amazon usando S3 o il loro server di importazione / esportazione. Comunque, grazie per la risposta.
Peter Stephens,

4
Le istantanee RDS ora possono essere copiate in altre regioni. Vedi questo annuncio e questa documentazione per i dettagli.
shelley,

9

Ho avuto lo stesso problema. La mia soluzione era scrivere un semplice script bash . Tuttavia, è limitato a una singola regione.

Ecco lo script in questione:

#!/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"

Consiglio vivamente - single transazione durante l'esecuzione di mysqldump
user1250

7

AWS RDS ora supporta la copia cross-region e cross-account di snapshot che ti permetterà di completare i tuoi obiettivi semplicemente usando RDS.

A questo punto è ancora necessario utilizzare un metodo di script di dump per ottenere backup su S3. La capacità di utilizzare S3-IA o Glacier sarebbe buona in termini di risparmi sui costi poiché i costi di backup RDS sono di livello S3 standard o superiore (variano in base al db).


1
Esiste un limite soft di 100 istantanee manuali per regione, per account.
Giuda,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.