将MySQL / Amazon RDS数据库备份到S3的推荐方法是什么?


31

我有两个目的:

  1. 在Amazon Web Services出现区域性问题时进行场外备份。
  2. 将生产数据从生产帐单帐户复制到Beta帐单帐户。

当前,亚马逊似乎并没有开箱即用地支持这两种用例之一。

我已经看到提到了mysqldump和xtrabackup(请参阅表单发布)。

我还看到了一个更复杂的过程(在此处记录

  1. 源计费帐户(prod)中的新RDS服务器从最近的备份中分离出来。
  2. 在步骤1中启动了一个新的EC2实例,该实例可以访问RDS服务器。
  3. mysqldump用于对该数据库进行备份。
  4. 备份已复制到异地位置(S3?)。
  5. 在单独的帐户和/或区域中,将启动一个新的RDS服务器。
  6. 数据库转储已导入。

提示和建议,不胜感激。

Answers:


22

推荐的备份RDS的方法是使用自动备份数据库快照。DB快照与EBS快照基本相同,后者存储在后台的S3中,但仅在同一区域内可用。

如果您需要跨区域的容错能力(好的计划!),那么没有从mysqldump进行的“困难的方式” ,就无法在另一个区域恢复数据。您的替代方法是使用mysqldump备份(对于任何合理大小的数据集,它都非常缓慢和可怕),或者在另一个区域中建立自己的基于EC2的从属,并使用任何可用的方法(xtrabackup,EBS快照等)进行备份。但是,然后您将返回到管理自己的MySQL实例,因此您也可能会完全放弃RDS。

用我的钱,RDS绝对不会以任何方式带来任何好处,并且在性能,灵活性和可靠性方面会带来很多劣势。我想问问自己,RDS给您带来什么价值。


对于我当前的需求,mysqldump可能工作正常。我不希望有庞大的数据集,而且通常不需要太快地移动数据。我希望RDS能够支持从另一个帐户的快照中启动新服务器的功能。另一个有用的功能是使用S3或其导入/导出服务器从Amazon导入/导出快照。无论如何,谢谢您的回答。
彼得·史蒂芬斯

4
现在可以将RDS快照复制到其他区域。有关详细信息,请参见此公告本文档
Shelley

9

我遇到过同样的问题。我的解决方案是编写一个简单的bash脚本。但是,它仅限于单个区域。

这是有问题的脚本:

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

我强烈建议在运行mysqldump时进行--single-transaction
user1250 2013年

7

AWS RDS现在支持跨区域和跨账户的快照复制,这使您仅需使用RDS即可完成目标。

此时,您仍然必须使用转储脚本方法将备份获取到S3。就节省成本而言,使用S3-IA或Glacier的能力会更好,因为RDS备份成本为S3 Standard或更高(因数据库而异)。


1
每个帐户每个区域有100个手动快照的软限制。
裘德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.