Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何备份django数据库_Django_Database Backups_Database Restore - Fatal编程技术网

如何备份django数据库

如何备份django数据库,django,database-backups,database-restore,Django,Database Backups,Database Restore,我有一个Django应用程序,它使用Postgres数据库。我需要能够备份和恢复数据库,以确保没有数据丢失,并能够在测试期间将数据从生产服务器复制到开发服务器 似乎有几种不同的方法可以做到这一点: 直接与数据库交互即可。因此,对于Postgres,我可能会使用pg_dumpall和psql编写一个脚本 使用Django附带的sqlclear/sqlall命令 使用Django附带的dumpdata/loaddata命令。因此,从要备份的数据库中创建新设备,然后将它们加载到要恢复的数据库中 使用D

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

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

  • 直接与数据库交互即可。因此,对于Postgres,我可能会使用
    pg_dumpall
    psql
    编写一个脚本

  • 使用Django附带的
    sqlclear
    /
    sqlall
    命令

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

  • 使用Django插件,如

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


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

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

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

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


    选项4该插件似乎使用db自己的备份工具(根据选项1),但还提供了将备份推送到Amazon S3或Dropbox中的云存储的帮助。选项1-3的问题是备份中不包括媒体文件(通过上传的任何内容)。可以单独备份包含媒体文件的目录。但是,由于Django不会在文件不再被
    文件字段
    引用时删除这些文件,因此您将不可避免地得到备份中不需要的文件

    这就是为什么我会选择选项4。我特别推荐*。它的一些特点包括:

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

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

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

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

    安装非常简单,只需将
    django_归档文件
    添加到
    INSTALLED_应用程序
    ,并根据需要在
    settings.py
    中设置选项即可。安装后,您可以通过运行以下命令立即创建整个数据库(包括媒体文件)的存档:

    ./manage.py archive
    


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

    为什么不创建整个数据库的副本呢?django dbbackup还能工作吗?我清楚地看到了那里的代码,但这并没有发挥作用的机会:公平地说,我会对包含如此明显错误思想的代码保持谨慎。特别是对于像备份这样重要的任务。@Chozabu-我写的脚本可以在这里找到:。它假设一个标准的Django“settings.py”,包含所有数据库信息。@Chozabu-还原过程非常相似:。我最后编写了自己的Python脚本来备份/还原数据库。他们从Django设置模块中读取数据,以确定它是什么类型的db。目前,它只支持postgres。但是还有其他格式的钩子。@trubliphone可以将它上传到Git或其他地方并提供脚本吗@ajinzrathod-我已经好几年没有使用这个代码了。但是我想你可以在上面的评论中找到我的旧脚本的链接:和。(请注意,这些都是5岁以上的孩子了;Django可能在这段时间内离开了。)哦,对不起,我没有看到这一年。无论如何,谢谢。这是一个很好的观点。对于我的特殊项目,我不必担心媒体文件。但是其他用户可能会发现您的包很有用。是否有方法从Django应用程序以编程方式调用它,而不是
    manage.py
    ,我在Windows Python 3.7上得到一个损坏的存档。对内容类型的引用是否在迁移后恢复?@SergeRogatch要以编程方式调用它,可以使用call_命令:from django.core.management import call_命令