我设立亚马逊 EC2使用 Ubuntu 服务器版本,我安装了灯堆栈上。我创建了一个在 MySQL 上运行的 PHP Web 应用程序。我在 Amazon EC2 上测试了该 Web 应用程序,并且它运行正常。
我还没有正式启动,但在启动之前我需要知道这一点。我应该备份我的数据库数据吗?如果需要,我应该如何尽可能经济高效地备份?
之前,我为另一个 Web 应用程序编写了一个 Perl 或 Bash 脚本(记不清了),该脚本将由计划任务以一天为周期。
然后,脚本会将数据库备份到单个.sql
文件中,并作为电子邮件附件发送到我的 Gmail 帐户。
该 Web 应用程序位于共享主机上,因此我确信我需要备份数据库。我的文件位于 Git 存储库中,因此我并不担心这一点。
对于此新的 Web 应用程序亚马逊网络服务(AWS),我还没有决定,因为:
我不认为这是一个好的解决方案,因为通过电子邮件发送的数据不安全。据我所知,虽然这是一个便宜的解决方案,但没有 SSL。免费。可轻松按日期检索。
Amazon 可能让我不再需要备份,因为他们已经做了备份。我只需要知道如何在发生灾难时恢复它(触摸木头)
- (我怀疑)有一种更好且经济有效的方法可以让我使用亚马逊 S3。
我允许用户上传文件,所以我需要以某种方式备份这些文件。我不知道该怎么做,而且之前从未以任何形式做过。
我想要的是:尽可能经济高效地每天备份我的数据库和图像文件,并提供清晰的、循序渐进的指南来实现这一点,并在发生灾难时恢复它们。
背景:
我对 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 卷不够可靠,不能作为备份的唯一存储设备,更不用说如果您的数据库也存储在同一磁盘上。
无论您选择哪种方法,我都会在备份时遵循以下步骤
- 每日创建备份
- 将备份发送到 S3(确保使用 MD5 校验,以便您知道备份是好的)
- 从 S3 本地下载备份或者从其他非 S3 提供商下载备份
- 使用滚动备份类型历史记录清理旧备份
- 存储最近 7 天的备份
- 存储每周星期五的备份,为期 1 个月
- 将上个月的备份保存 1 年