我们正在为在 VM 管理程序上运行的 Django/Postgres 站点提供服务。我们现在正试图找出我们的备份策略,并有两个可能的选择:
- 直接使用备份数据库
pg_dump
- 通过复制VM镜像直接备份VM
我认为我支持后者,我可以简单地备份与该站点有关的所有内容。我不确定我是否必须为此关闭虚拟机。
备份数据库的更好和更推荐的方法是什么?是否有任何不使用 VM 备份的原因?
谢谢
我们正在为在 VM 管理程序上运行的 Django/Postgres 站点提供服务。我们现在正试图找出我们的备份策略,并有两个可能的选择:
pg_dump
我认为我支持后者,我可以简单地备份与该站点有关的所有内容。我不确定我是否必须为此关闭虚拟机。
备份数据库的更好和更推荐的方法是什么?是否有任何不使用 VM 备份的原因?
谢谢
这个问题基本上可以归结为,您可以考虑将 PostgreSQL 数据文件的热副本作为备份吗?
答案是:不是。PostgreSQL 非常努力地通过使用 WAL 来确保它的文件始终处于一致的状态,并且它可以在电源故障中幸存下来,但是从这些文件的副本启动它会使 PostgreSQL 进入恢复模式。如果备份发生在错误的时间,而 PostgreSQL 无法从这些文件的状态中恢复,那么您的备份将毫无用处。您不希望您的备份/恢复机制依赖于恢复机制(除非您正在处理“仅崩溃”软件,而 PostgreSQL 不是)。
PostgreSQL 无法从这些文件中恢复的概率不高,但也不为零。另一方面,PostgreSQL 无法加载它所做的 SQL 转储的概率为零。我更喜欢失败概率较低的备份选择。pg_dump
专为进行备份而设计。
PostgreSQL 建议使用 pg_dump 进行备份,因为文件系统(或 VM)备份需要关闭数据库(并且有其他缺点):
http://www.postgresql.org/docs/8.1/static/backup-file.html
编辑:此外,pg_dump 备份将明显小于同一数据库的文件系统转储。
还有一个附加选项。使用 PostgreSQL,您可以进行在线备份,以便您对文件系统进行快照并保持一致性。您可以在此处查看详细信息: http ://www.postgresql.org/docs/9.0/static/continuous-archiving.html
当我们在 VM 中运行 PostgreSQL 时,我们使用这种精确的方法进行备份。