在热备服务器上运行 pg_dump?

jbe*_*man 23 postgresql replication backup

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

我想pg_dumpall从运行流式复制的热备用服务器运行夜间备份作业(通过),以避免将负载置于主服务器上。我只看到提到人们遇到的一些问题,例如这里这里,但很少有指导。如果备份稍微落后于主要,只要它是一致的(它应该是一致的)就可以了。

我的问题是:

  1. 我真的想这样做,还是应该在主服务器上进行备份?为什么?

  2. 在备用服务器上进行转储时,我需要哪些设置以及应该使用哪些程序来正确执行此操作?例如,我必须在备份期间停止复制吗?

Cra*_*ger 23

AFAIK,pg_dump在热备用上运行是备用的主要用途之一。这是完全安全的,虽然它不是完全可靠的 - 如果备用数据库在它落后于主数据库太远时中止事务,则转储可能会失败。

您真正需要注意的唯一一件事是确保待机状态是最新的并且跟上。如果备用数据库失去了与主数据库的连接并且落后太多,您就不想快乐地备份一个三周过时的备用数据库。

您将需要在备份期间允许备用服务器远远落后于主服务器,否则它必须取消您的pg_dump事务才能继续重放 WAL。请参阅有关热备份的文档,特别是“处理查询冲突”部分以及max_standby_archive_delaymax_standby_streaming_delay参数。

请注意,master 必须愿意保留足够的 WAL 档案以允许 slave 再次赶上。


Rus*_*lin 12

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

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