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