¿Cuál es la forma recomendada de hacer una copia de seguridad de una base de datos MySQL / Amazon RDS en S3?

31

Tengo dos propósitos para esto:

  1. Tener una copia de seguridad fuera del sitio en caso de un problema en toda la región con Amazon Web Services.
  2. Para copiar datos de producción de una cuenta de facturación de producción a una cuenta de facturación beta.

Actualmente, no parece que Amazon admita ninguno de estos dos casos de uso listos para usar.

He visto mysqldump y xtrabackup (ver la publicación del formulario ) mencionados.

También he visto un proceso más complicado (documentado aquí )

  1. Un nuevo servidor RDS en la cuenta de facturación de origen (prod) se genera a partir de una copia de seguridad reciente.
  2. Se crea una nueva instancia EC2 que tiene acceso al servidor RDS en el paso 1.
  3. mysqldump se usa para hacer una copia de seguridad de esta base de datos.
  4. La copia de seguridad se copia en una ubicación externa (S3?).
  5. En una cuenta y / o región separada, se hace girar un nuevo servidor RDS.
  6. Se importa el volcado de la base de datos.

Consejos y sugerencias son apreciados.

Peter Stephens
fuente

Respuestas:

22

La forma recomendada de hacer una copia de seguridad de RDS es con copias de seguridad automáticas e instantáneas de base de datos . Las instantáneas de DB son básicamente lo mismo que las instantáneas de EBS, que se almacenan en S3 detrás de escena, pero solo están disponibles dentro de la misma región.

Si necesita tolerancia a fallos entre regiones (¡buen plan!), No hay forma de restaurar sus datos en otra región sin hacerlo "por las malas" desde un mysqldump. Sus alternativas son hacer una copia de seguridad usando mysqldump (lento y terrible para cualquier conjunto de datos de tamaño razonable), o configurar su propio esclavo basado en EC2 en otra región y hacer una copia de seguridad usando cualquier método disponible (xtrabackup, instantáneas de EBS, etc.). Sin embargo, entonces vuelve a administrar sus propias instancias de MySQL, por lo que podría abandonar RDS por completo.

Por mi dinero, RDS no ofrece absolutamente ningún beneficio de ninguna manera y muchas desventajas en cuanto a rendimiento, flexibilidad y confiabilidad. Me pregunto qué valor le proporciona RDS.

Aaron Brown
fuente
Para mis necesidades actuales, mysqldump puede funcionar bien. No espero conjuntos de datos masivos y generalmente no necesito que los datos se muevan demasiado rápido. Espero que RDS admita una función para activar un nuevo servidor de una instantánea en otra cuenta. Otra característica útil sería importar / exportar las instantáneas fuera de Amazon usando S3 o su servidor Importar / Exportar. De todos modos, gracias por la respuesta.
Peter Stephens
44
Las instantáneas de RDS ahora se pueden copiar a otras regiones. Vea este anuncio y esta documentación para más detalles.
shelley
9

Tuve el mismo problema. Mi solución fue escribir un script bash simple . Sin embargo, se limita a una sola región.

Aquí está el guión en cuestión:

#!/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
fuente
Recomiendo encarecidamente una transacción cuando se ejecuta mysqldump
user1250
7

AWS RDS ahora admite la copia de instantáneas entre regiones y cuentas cruzadas, lo que le permitirá completar sus objetivos simplemente usando RDS.

Todavía tiene que usar un método de script de volcado para obtener copias de seguridad en S3 en este punto. La capacidad de usar S3-IA o Glacier sería buena en términos de ahorro de costos ya que los costos de respaldo de RDS están en S3 Standard o superior (varían según db).

Mike Lapinskas
fuente
1
Hay un límite flexible de 100 instantáneas manuales por región, por cuenta.
Jude