在热备用服务器上运行pg_dump?


21

免责声明:我承认还没有尝试过,但是我不确定我是否知道它是否无法正常工作,所以我想问一下。

我想pg_dumpall从运行流复制的热备用服务器(通过)运行每晚备份作业,以避免将该负载放在主服务器上。我只看到有人遇到过一些麻烦,例如在这里这里,但很少有指导。只要备份保持一致(应该是一致的),只要备份稍微落后于主数据库就可以。

我的问题是:

  1. 我是否真的要这样做,还是应该在主服务器上完成备份?为什么?

  2. 在备用数据库上进行转储时,需要哪些设置以及正确使用该过程的步骤?例如,我必须在备份期间停止复制吗?


我希望,如果您的复制使备用数据库保持一致状态,则备份将保持一致。如pg_dump文档所述:“即使同时使用数据库,它也会进行一致的备份。” pg_dumpall为每个数据库运行前者。
dezso 2012年

Answers:


21

pg_dump在热备用数据库上运行的AFAIK 是备用数据库非常有用的主要功能之一。这是绝对安全的,尽管它不是绝对可靠的-如果备用数据库在与主服务器之间的距离太远时中止了交易,则转储可能会失败。

您真正需要注意的唯一一件事就是确保备用电源是最新的并且保持正常运行。如果备用数据库失去了与主数据库的连接并落在后面太远,您就不会很乐意备份三个星期过期的备用数据库。

您将需要允许备用数据库在备份期间远远落后于主数据库,因为否则它将不得不取消您的pg_dump事务以继续重放WAL。请参阅有关热备用的文档,尤其是“处理查询冲突”部分以及max_standby_archive_delaymax_standby_streaming_delay参数。

请注意,主机必须愿意保留足够的WAL存档,以使从机能够再次追赶。


12
  1. 我们做备用的备份,这很好。
  2. 为避免在备用系统上进行备份时取消语句冲突,您需要使用暂停备用数据库上的复制SELECT pg_xlog_replay_pause();,然后在完成备份后运行备份SELECT pg_xlog_replay_resume();以继续复制。请记住,运行上述命令将导致从属服务器的恢复滞后,这可能会很大,具体取决于您的数据库大小。另外,还要考虑WAL段将占用的空间,因为它们在暂停期间不会在从属服务器上重播。

您可能会在文档中找到一些其他有用的管理功能。例如,在暂停服务器之前,检查服务器是否确实处于恢复状态SELECT pg_is_in_recovery()


0

如果在备份过程中暂停复制(这是保持完整性和一致性的好方法),则可以在主postgresql中编辑一些行:

有多少时间习惯性地延迟了备份。确保主节点保留恢复复制所需的整个x_log文件。您可以在postgresql.conf编辑中做到这一点

wal_keep_segments = 32      # in logfile segments, 16MB each; 0 disables

如果不进行此修改,并且备份过程太长,则可能是主节点在将xlog文件发送到从属节点之前先将其删除。


仅流复制需要此设置。我正在使用常规复制,并且wal被保留在备用主机中,即使备用Postgres服务器已暂停也是如此。
david.perez '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.