EC2中的备份数据库和Web文件夹

时间:2013-06-06 15:44:43

标签: amazon-s3 amazon-ec2 backup amazon

我已经将我的第一个站点移动到EC2微实例,现在项目正在运行我正在尝试备份数据库和图像文件夹,如果可能的话在亚马逊(Glacier?S3?)中。 我已经阅读了很多关于它的内容,但我确信之前有人已经编写了这个脚本。

堆栈: - Ubuntu Server 12.04 LTS - Apache 2.2.1 - PHP 5.4.4

3 个答案:

答案 0 :(得分:1)

通常,您希望使用EBS快照作为第一道防线。制作一个脚本,每天创建一次EBS备份并删除旧版本。把它放在cron中。

  • 如果您的服务器上意外删除了某些内容,请从快照创建一个EBS驱动器并将其安装到某个位置,然后复制出您需要的内容。
  • 如果服务器硬件死机,您可以将上一个快照转换为EBS驱动器并从中启动。有一个优化,您从死计算机中取出现有驱动器并从中启动 - 但不要依赖于该工作。有时,当您的服务器出现故障时,驱动器会在断开连接时“卡住”数小时。另外,您只能恢复到同一区域中的计算机,而这些计算机并不灵活。
  • 如果您需要从旧备份中读取数据,则可以将新服务器启动一小时并关闭数据。 (总费用:8或9美分。确保并在之后删除驱动器。)
  • 请注意,您的备份将共享未更改的数据块。这意味着每个备份的外观和行为都像完整备份,但您需要为增量备份付费。

如果您想要“额外保险”,如果EBS / EC2存在大量问题,您可以考虑使用S3。使用其他答案中指出的s3sync。最好使用压缩。备份之间没有“成本分摊”,就像EBS快照一样。

Glacier有很长的等待时间(很多小时)和最短的恢复时间(如果你在90天之前恢复,你会受到惩罚)。因此,如果要长时间存储大量备份,则只应查看它。你不能用它来进行灾难恢复,除非你被耽搁了好几个小时。

答案 1 :(得分:0)

这很容易做到。你现在可能想要使用s3。

  1. 安装s3cmd。它可能已在您的存储库中可用
  2. 决定如何备份文件。例如,您想要同步所有图像,还是想每天创建图像文件夹的新副本?根据您的首选策略使用s3cmd同步或放置。
  3. 将数据库转储到SQL文件。压缩那个sql文件。您可能希望在名称中包含日期,如YYYY-MM-DD.sql.gz
  4. 将带有s3cmd的文件复制到您喜欢的存储桶中。
  5. 您可以将所有这些编写成一个简单的bash脚本,并定期执行cron。请记住,备份确实会对性能产生影响,应该在非高峰期安排。

答案 2 :(得分:0)

这是非常基本的脚本,这些是以下步骤:

  • 从官方网站安装s3cmd
  • 在您的shell中调用s3cmd并添加您的AWS凭据
  • 创建一个新的S3存储桶来存储文件,优于Glacier
  • 在您的存储桶属性中将生命周期设置为在90天后自动移植它们
  • 返回shell并粘贴下面的脚本
  • 现在创建一个日志文件/ var / log / my_backups_to_s3
  • 授予要执行的脚本和日志文件
  • 的权限
  • 尝试使用./your_script_name

示例脚本到MYSQLDUMP并推送到S3

#!/bin/bash    
MY_FOLDER="/__PATH_TO_WRITABLE_FOLDER__/"
    NOW="`date +%Y-%m-%d-%R`"
    FILE=$MY_FOLDER"___FILE_NAME___"$NOW".sql"
    mysqldump -h localhost -u USER_DB -pPASSDB -c --add-drop-table --add-locks --quick --lock-tables DBNAME > $FILE
    s3cmd put $FILE s3://___YOUR_BUCKET_NAME___
    echo "`date -u`" "BACKUP DONE - MySQL uploaded to hipespace ^^ -> ".$FILE  >> /var/log/my_backups_to_s3     

注意:

  • -p和PASSDB之间没有空格
  • 我在推送到S3之前保存文件,这不是强制性的
  • 在我出现连接错误之前,需要大约30分钟才能完全可用

无论如何这只是备份数据库,尝试s3cmd文档,他们有另一个命令“sync”,你可以用来推送你的图像,

希望有所帮助