备份数据库与备份虚拟机

备份数据库与备份虚拟机

问题描述:

我们正在运行在虚拟机管理程序上运行的Django/Postgres站点。现在我们正在试图找出我们的备份策略,有两个可能的选择:直接使用pg_dump 备份数据库与备份虚拟机

  • 备份虚拟机直接通过复制虚拟机图像
    1. 备份DB正如我想的那样,我跟随后者,我可以简单地备份与网站相关的所有内容。我不确定是否必须关闭虚拟机。

      什么是备份数据库的更好和更推荐的方法?是否有任何理由不使用虚拟机备份?

      感谢

    +0

    为什么我想知道“关闭”标志?我认为这不符合SO准则,或者如果是这样,我错过了一些东西。 –

    PostgreSQL的建议使用pg_dump的备份,作为文件系统(或VM)备份要求关闭数据库(并有其他缺点):

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

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

    +2

    请注意,这些说明适用于8.1,不一定是最新的。现在还有其他方法可以做到这一点(或者至少是更简单的方法) - 您应该查看http://www.postgresql.org/docs/9.0/static/backup.html上的9.0文档 –

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

    答案是:不是。 PostgreSQL通过使用WAL来确保其文件始终处于一致状态,并且可以在电源故障后继续运行,但是从这些文件的副本中启动PostgreSQL将使PostgreSQL进入恢复模式。如果备份发生在错误的时间,并且PostgreSQL无法从这些文件的状态中恢复,则备份是无用的。你不希望你的备份/恢复机制依赖于恢复机制(除非你正在处理PostgreSQL不支持的“crash only”软件)。

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

    还有一个选项。通过PostgreSQL,您可以创建联机备份,使您可以快照文件系统并保持一致性。您可以在此处看到详细信息: http://www.postgresql.org/docs/9.0/static/continuous-archiving.html

    我们在VM中运行PostgreSQL时使用此确切方法进行备份。