我在亚马逊云中运行我的数据库服务器,并在单独的EBS卷上有数据库文件。 当涉及到备份/恢复操作时,我发现只需执行文件系统级备份而不是sql转储就简单多了,因为我可以立即创build备份并从中进行恢复。
如果我坚持仅使用文件系统级备份,是否有可能忽略的问题?
在Ubuntu 12.04上运行PostgreSQL 9.1(今年晚些时候更新到9.3)
如果我坚持仅使用文件系统级备份,是否有可能忽略的任何问题?
是的 – 但不是你想的那个。 只要你做文件系统级别的拷贝权利是安全的,那就是依赖物理备份就是风险。
在写这篇文章时,我注意到文件系统级备份的章节需要更新,以指向pg_basebackup和pg_start_backup() 。 虽然技术上来说,stream复制和PITR的一部分,但这些工具只是制作安全,一致的文件系统级副本的方法,应在文档的该部分中引用。
根据PostgreSQL文件系统级备份的文档以及做一个基础备份 ,只要你按照给定的规则进行文件系统级拷贝是非常安全的,即执行以下操作之一:
在备份之前停止服务器并将其closures直到备份完成;
使用pg_basebackup ;
使用pg_start_backup()和pg_stop_backup() 并复制pg_stop_backup()生成的文件 ; 要么
使用primefaces文件系统快照并从快照中复制,在这种情况下没有任何东西可以写入,因为它是一个快照。
你也可以使用pg_basebackup -X stream ,这是我的首选。 它使用复制协议来执行文件系统级副本,照顾pg_start_backup()等。
物理备份具有可用作时间点恢复基础的主要优点。
快照的情况是安全的,因为它就像一个崩溃。 没有文字logging,数据库状态在特定时刻被捕获。 预写日志包含所有已提交的事务数据,因此在DB恢复时,从数据库中重新启动尚未刷新到堆中的任何数据。 这就像在崩溃后启动。 如果您正在复制仍在写入的实时数据库目录,则只需要pg_start_backup()和好友; 快照避免了这一点。
请注意, 如果快照实际上是primefaces级的 ,那么依靠快照仅是安全的 ,即它在一个瞬间捕获文件系统状态。 如果只涉及一个卷/文件系统,也是安全的 – 不能使用两个独立文件系统的两个快照进行备份,它们将不会在同一瞬间完成。 如果使用表空间,快照备份是不安全的,但是pg_basebackup或pg_start_backup() ,rsync, pg_stop_backup()仍然是安全的。
这意味着如果你的数据库文件系统是在一个md RAIDarrays中的(比如说)四个EBS卷,或者你有一个用于pg_xlog而另一个用于数据库的其余部分,那么你不能使用EBS快照进行一致的备份。 如果一切都是一个EBS卷,则EBS快照是安全的。
您也可以在运行备份之前停止PostgreSQL,然后启动它。 如果您是能够承受备份停机时间的幸运者之一,那很酷。 我个人更喜欢热备份。
真正需要关注的问题是,当您进行物理备份时,您会复制未经validation的数据库结构。 如果没有检测到腐败,那么您的备份可能比您想象的要less得多。 我个人也会使用逻辑转储。
一个有用的折中可以是一旦你做了副本,启动你的文件系统级备份,然后从文件系统级备份做一个pg_dump 。 这确保了它的可读性,并给你一个逻辑副本。 如果您的逻辑转储失败,您的自动化应该通过电子邮件发送给您,并尖叫寻求帮助,因为这表明您的物理副本可能也会被损坏。
顺便说一句,我前一阵子写了一堆关于避免数据丢失/腐败的问题 – 请参阅避免PostgreSQL数据库损坏 。
如果您完全closuresPostgres,则可以执行可靠的文件系统备份,然后在Postgresclosures时执行备份。 备份完成后,启动Postgres。
如果Postgres在备份期间运行,所有投注都closures。
最好是在“Postgres”数据库备份中进行上述操作。