【问题标题】:how to backup a django db如何备份 django 数据库
【发布时间】:2014-01-29 17:19:51
【问题描述】:

我有一个使用 Postgres 数据库的 Django 应用程序。我需要能够备份和恢复数据库,以确保没有数据丢失,并能够在测试期间将数据从生产服务器复制到开发服务器。

似乎有几种不同的方法可以做到这一点:

  1. 直接与数据库交互。因此,对于 Postgres,我可能会使用 pg_dumpallpsql 编写一个脚本。

  2. 使用 Django 自带的sqlclear/sqlall 命令。

  3. 使用 Django 附带的 dumpdata/loaddata 命令。因此,从您要备份的数据库中创建新的灯具,然后将它们加载到您要恢复的数据库中。

  4. 使用像django-dbbackup这样的Django插件。

我真的不明白这些不同技术的优缺点。

突然想到:选项 1 是特定于数据库的,选项 3 似乎更适合设置初始数据。但我仍然不确定选项 4 比选项 2 有什么优势。

【问题讨论】:

标签: django database-backups database-restore


【解决方案1】:

选项 1-3 的问题是媒体文件(通过 FileField 上传的任何内容)不包括在备份中。可以单独备份包含媒体文件的目录。但是,由于 Django 不会在文件不再被 FileField 引用时删除它们,因此您将不可避免地在备份中得到不需要的文件。

这就是为什么我会选择选项 #4。特别推荐django-archive*。它的一些功能包括:

  • 转储所有重要模型的内容(默认情况下排除 ContentTypePermissionSession,因为它们由 manage.py migrate 填充)并允许您选择要排除的其他模型。

  • 包括FileFieldImageField 字段引用的媒体文件。请注意,包含数据库中行引用的文件;删除行留下的文件将被忽略。

  • 生成包含数据库备份和媒体文件的单个存档。

  • 提供用于自定义归档存储位置、文件名格式和归档类型(gzbz2)的选项。

安装就像将django_archive 添加到INSTALLED_APPS 并在需要时在settings.py 中设置选项一样简单。安装后,您可以立即通过运行以下命令创建整个数据库(包括媒体文件)的存档:

./manage.py archive

* 免责声明:我是包的作者

【讨论】:

  • 这是一个很好的观点。对于我的特定项目,我不必担心媒体文件。但其他用户可能会发现您的包很有用。
  • 有没有办法从 Django 应用程序中以编程方式调用它,而不是 manage.py
  • 另外,我在 Windows Python 3.7 上得到了一个损坏的存档。
  • 迁移后是否恢复对内容类型的引用?
  • @SergeRogatch 以编程方式调用它,您可以使用 call_command : from django.core.management import call_command
【解决方案2】:

对于定期备份,我会选择选项 1,使用 PostgreSQL 自己的本机工具,因为它可能是最有效的。

我认为选项 2 主要与创建表和加载初始数据有关,因此不适合备份。

选项 3 可用于备份,如果您需要迁移到不同的数据库平台,这将特别有用,因为数据以非 SQL 形式转储,即 Django 可以理解的 JSON。

选项 4 该插件似乎使用 db 自己的备份工具(根据选项 1),但还提供帮助将您的备份推送到 Amazon S3 或 Dropbox 中的云存储中

【讨论】:

  • 我最终编写了自己的 Python 脚本来备份/恢复数据库。他们从 Django 设置模块中读取数据以确定它是什么类型的数据库。目前,它只支持 postgres。但也有其他格式的钩子。
  • @trubliphone 您可以将其上传到 Git 或其他地方并提供脚本。 ?
  • @ajinzrathod - 我已经有 没有使用过这段代码了。但我可以在上面的 cmets 中找到我的旧脚本的链接:pastebin.com/3afcrHqepastebin.com/2hbkwsp0。 (请注意,这些已经 5 年以上;Django 可能在此期间继续前进。)
  • 哦,对不起,我没有看到年份。还是谢谢。
猜你喜欢
  • 1970-01-01
  • 2019-07-17
  • 2011-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
  • 2017-09-18
相关资源
最近更新 更多