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

Pet*_*ens 33 mysql mysqldump backup xtrabackup

我有两个目的:

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

目前,亚马逊似乎不支持这两个开箱即用的用例。

我已经看到提到了mysqldump 和 xtrabackup(参见表格帖子)。

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

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

提示和建议表示赞赏。

Aar*_*own 24

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

如果您需要跨区域容错(好计划!),如果不从 mysqldump 中“艰难地”恢复数据,就无法在另一个区域恢复您的数据。您的替代方案是使用 mysqldump 进行备份(对于任何合理大小的数据集来说都很慢而且很糟糕),或者在另一个区域设置您自己的基于 EC2 的从站并使用任何可用的方法(xtrabackup、EBS 快照等)进行备份。但是,您又要重新管理自己的 MySQL 实例,因此您不妨完全放弃 RDS。

在我看来,RDS 在任何方面都绝对没有任何好处,而且在性能、灵活性和可靠性方面有很多缺点。我会问自己 RDS 为您提供了什么价值。

  • 现在可以将 RDS 快照复制到其他区域。请参阅 [本公告](https://aws.amazon.com/blogs/aws/cross-region-snapshot-copy-for-amazon-rds/) 和 [本文档](http://docs.aws.amazon .com/AmazonRDS/latest/UserGuide/USER_CopySnapshot.html#USER_CopySnapshot.CrossRegion)了解详情。 (4认同)

小智 12

我遇到过同样的问题。我的解决方案是编写一个简单的 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"
Run Code Online (Sandbox Code Playgroud)


小智 7

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

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