1

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

堆栈:-Ubuntu 服务器 12.04 LTS-Apache 2.2.1-PHP 5.4.4

4

3 回答 3

1

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

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

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

Glacier 的恢复等待时间很长(几个小时)和最短恢复时间(如果在 90 天之前恢复,则会受到处罚)。因此,如果您想长时间存储大量备份,您应该只考虑它。你不能用它来进行灾难恢复,除非你可以忍受几个小时的停机。

于 2013-06-16T00:22:27.797 回答
0

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

  1. 安装s3cmd. 它可能已经在您的存储库中可用
  2. 决定如何备份文件。例如,您是想同步所有图像,还是每天都创建一个图像文件夹的新副本?根据您的首选策略使用 s3cmd sync 或 put。
  3. 将数据库转储到 SQL 文件。压缩那个 sql 文件。您可能希望在名称中包含日期,例如 YYYY-MM-DD.sql.gz
  4. 使用 s3cmd 将该文件复制到您喜欢的存储桶中。

您可以将所有这些一起编写成一个简单的 bash 脚本,并定期使用 cron 执行它。请记住,备份确实会在一定程度上影响性能,并且应该安排在非高峰期。

于 2013-06-06T15:55:58.343 回答
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 文档,他们有另一个命令“同步”,您可以使用它来推送您的图像,

希望能帮助到你

于 2013-06-06T15:56:24.377 回答