3

我们正在为在 VM 管理程序上运行的 Django/Postgres 站点提供服务。我们现在正试图找出我们的备份策略,并有两个可能的选择:

  1. 直接使用备份数据库pg_dump
  2. 通过复制VM镜像直接备份VM

我认为我支持后者,我可以简单地备份与该站点有关的所有内容。我不确定我是否必须为此关闭虚拟机。

备份数据库的更好和更推荐的方法是什么?是否有任何不使用 VM 备份的原因?

谢谢

4

3 回答 3

3

这个问题基本上可以归结为,您可以考虑将 PostgreSQL 数据文件的热副本作为备份吗?

答案是:不是。PostgreSQL 非常努力地通过使用 WAL 来确保它的文件始终处于一致的状态,并且它可以在电源故障中幸存下来,但是从这些文件的副本启动它会使 PostgreSQL 进入恢复模式。如果备份发生在错误的时间,而 PostgreSQL 无法从这些文件的状态中恢复,那么您的备份将毫无用处。您不希望您的备份/恢复机制依赖于恢复机制(除非您正在处理“仅崩溃”软件,而 PostgreSQL 不是)。

PostgreSQL 无法从这些文件中恢复的概率不高,但也不为零。另一方面,PostgreSQL 无法加载它所做的 SQL 转储的概率为零。我更喜欢失败概率较低的备份选择。pg_dump专为进行备份而设计。

于 2011-08-29T17:05:43.783 回答
2

PostgreSQL 建议使用 pg_dump 进行备份,因为文件系统(或 VM)备份需要关闭数据库(并且有其他缺点):

http://www.postgresql.org/docs/8.1/static/backup-file.html

编辑:此外,pg_dump 备份将明显小于同一数据库的文件系统转储。

于 2011-08-29T16:55:25.473 回答
0

还有一个附加选项。使用 PostgreSQL,您可以进行在线备份,以便您对文件系统进行快照并保持一致性。您可以在此处查看详细信息: http ://www.postgresql.org/docs/9.0/static/continuous-archiving.html

当我们在 VM 中运行 PostgreSQL 时,我们使用这种精确的方法进行备份。

于 2011-08-29T20:36:12.117 回答