如何备份django db

tru*_*one 41 django database-restore database-backups

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

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

  1. 只需直接与db交互.因此,对于Postgres,我可能会使用pg_dumpall和编写脚本psql.

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

  3. 使用Django 附带的dumpdata/ loaddata命令.因此,从要备份的db创建新的fixture,然后将它们加载到要还原的db中.

  4. 使用Django插件,如django-dbbackup.

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

刚刚开始:选项1是特定于数据库的,选项3似乎更适合设置初始数据.但我仍然不确定选项4对选项2的优势.

Nat*_*man 25

选项1-3的问题是媒体文件(通过其上传的任何内容FileField)不包含在备份中.可以单独备份包含媒体文件的目录.但是,因为当Django不再被a引用时不删除文件,所以FileField你将不可避免地得到备份中不需要存在的文件.

这就是我选择#4选项的原因.特别是,我推荐django-archive *.它的一些功能包括:

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

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

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

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

安装是将简单django_archiveINSTALLED_APPS和设置选项中settings.py如果需要的话.安装后,您可以通过运行以下命令立即创建整个数据库(包括媒体文件)的存档:

./manage.py archive
Run Code Online (Sandbox Code Playgroud)

*免责声明:我是该套餐的作者


Ane*_*pic 22

对于常规备份,我会选择使用PostgreSQL自带的本机工具,因为它可能是最有效的.

我认为选项2主要涉及创建表和加载初始数据,因此不适合备份.

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

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