我是否应该以及如何备份托管在 Amazon EC2 服务器上的 Web 应用程序的数据库?

我是否应该以及如何备份托管在 Amazon EC2 服务器上的 Web 应用程序的数据库?

我设立亚马逊 EC2使用 Ubuntu 服务器版本,我安装了堆栈上。我创建了一个在 MySQL 上运行的 PHP Web 应用程序。我在 Amazon EC2 上测试了该 Web 应用程序,并且它运行正常。

我还没有正式启动,但在启动之前我需要知道这一点。我应该备份我的数据库数据吗?如果需要,我应该如何尽可能经济高效地备份?

之前,我为另一个 Web 应用程序编写了一个 Perl 或 Bash 脚本(记不清了),该脚本将由计划任务以一天为周期。

然后,脚本会将数据库备份到单个.sql文件中,并作为电子邮件附件发送到我的 Gmail 帐户。

该 Web 应用程序位于共享主机上,因此我确信我需要备份数据库。我的文件位于 Git 存储库中,因此我并不担心这一点。

对于此新的 Web 应用程序亚马逊网络服务(AWS),我还没有决定,因为:

  1. 我不认为这是一个好的解决方案,因为通过电子邮件发送的数据不安全。据我所知,虽然这是一个便宜的解决方案,但没有 SSL。免费。可轻松按日期检索。

  2. Amazon 可能让我不再需要备份,因为他们已经做了备份。我只需要知道如何在发生灾难时恢复它(触摸木头

    • (我怀疑)有一种更好且经济有效的方法可以让我使用亚马逊 S3
  3. 我允许用户上传文件,所以我需要以某种方式备份这些文件。我不知道该怎么做,而且之前从未以任何形式做过。

我想要的是:尽可能经济高效地每天备份我的数据库和图像文件,并提供清晰的、循序渐进的指南来实现这一点,并在发生灾难时恢复它们。

背景:

  • 我对 AWS 完全不熟悉。只知道如何设置账户。仅此而已。

  • << 作为 Ubuntu 新手,我有一年的使用经验。我的大部分时间都在使用 Windows。

  • 熟悉PHP编程,其他编程语言由于使用较少,掌握得不是很好。

答案1

Amazon 将您的数据库文件保存在冗余存储中,但仅提供有关其配置方式的有限信息,因此您必须自行判断这是否适合您的需求。但是,他们不会保留旧版本,因此这只能保护您免受硬件故障的影响,而不能保护您免受某种用户错误的影响(这比硬件故障更可能发生)。

另外,请注意,如果您的 EC2 服务器位于实例存储中,则一旦服务器停止,数据将被清除。对于持久存储,您的数据必须位于弹性块存储 (EBS) 卷中。一旦数据位于 EBS 卷中,您就可以定期拍摄快照(手动或使用 Amazon API 自动拍摄),然后您就可以回滚到旧版本。适用于 PHP 的 AWS SDK 非常好,您可以在此处找到它:http://aws.amazon.com/sdkforphp/

答案2

亚马逊的服务非常多,有时各种不同的技术可能会让人感到困惑。请记住,亚马逊创建所有这些服务都是为了解决特定问题。

在 S3 中备份 MySQL 非常常见,并且许多博客都对此进行了详尽的记录。我建议遵循此处的指南http://agiliq.com/blog/2009/02/automatically-backup-mysql-database-to-amazon-s3-u/

永远不要假设任何事情,S3 被设计为容错存储设备,但这不会阻止我在本地计算机上或其他提供商处备份所有内容。EBS 卷不够可靠,不能作为备份的唯一存储设备,更不用说如果您的数据库也存储在同一磁盘上。

无论您选择哪种方法,我都会在备份时遵循以下步骤

  1. 每日创建备份
  2. 将备份发送到 S3(确保使用 MD5 校验,以便您知道备份是好的)
  3. 从 S3 本地下载备份或者从其他非 S3 提供商下载备份
  4. 使用滚动备份类型历史记录清理旧备份
    • 存储最近 7 天的备份
    • 存储每周星期五的备份,为期 1 个月
    • 将上个月的备份保存 1 年

相关内容