Django的备份策略

26

我最近部署了一些使用 Django(在 WebFaction 上)构建的 web 应用程序。

这些将是我第一次处理的此规模项目,因此我想知道在 WebFaction 上和备用位置上维护备份的有效策略是什么。

编辑:

我想备份什么?

数据库和用户上传媒体。(我的代码通过 git 管理)

1个回答

16

我不确定是否有一个适用于所有情况的答案,特别是因为您没有说明要备份什么。 我通常的做法是:

  • 源代码:使用源代码控制,例如svn或git。这意味着您通常会对代码(特别是在drsc中)拥有dev、deploy和存储库备份。
  • 数据库:这也取决于使用情况,但通常如下:
    • 有一个dump_database.py管理命令,将内省设置,并为每个db输出正确的db转储命令(考虑了db类型和数据库名称)。
    • 在另一台服务器上设置cron作业,通过ssh连接到应用程序服务器,执行转储db管理命令,使用db名称+时间戳作为文件名压缩sql文件,并将其上传到另一台服务器(在我的情况下是amazon's s3)。
  • 媒体文件:例如用户上传。 在另一台服务器上保持一个cron作业,可以ssh进入应用程序服务器并调用rsync到另一台服务器。

需要记住的是,备份的预期目的是什么。如果是由于磁盘故障、错误或SQL注入而造成的意外数据丢失或仅仅是还原,那么可以将这些cron作业保留在同一台服务器上。

但是,如果您还想在服务器受到威胁的情况下安全,则不能将远程备份凭据(sshkeys、amazon secret等)保存在应用程序服务器上!否则,攻击者将获得访问备份服务器的权限。


2
我建议使用数据库的转储工具,例如mysqldump,而不是dump_database.py。非常简单,适用于任何一组Django模型,维护成本更低。我同意你答案中的其他部分。 - Spike Gronim
4
抱歉,我想我表达不够清晰。我的意思是您可以编写自己的Dump数据库程序,该程序能够自省设置并生成与特定数据库无关的命令。 - Arthur Debert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接