jberryman Asked: 2012-12-18 11:25:30 +0800 CST2012-12-18 11:25:30 +0800 CST 2012-12-18 11:25:30 +0800 CST 在热备用服务器上运行 pg_dump? 772 免责声明:我承认我还没有尝试过,但我不确定我是否会知道它是否工作不正常,所以我想问一下。 我想pg_dumpall从运行流复制的热备用服务器运行每晚备份作业(通过),以避免将负载放在主服务器上。我只看到提到人们遇到的一些问题,例如这里和这里,但很少有指导。如果备份稍微落后于主数据库,这没关系,只要它是一致的(它应该是)。 我的问题是: 我真的要这样做,还是应该在主服务器上进行备份?为什么? 在备用设备上进行转储时,我需要哪些设置以及我应该使用哪些程序来正确执行此操作?例如,我必须在备份期间停止复制吗? postgresql replication 3 个回答 Voted Best Answer Craig Ringer 2012-12-18T15:49:53+08:002012-12-18T15:49:53+08:00 AFAIK,pg_dump在热备用上运行是备用的主要用途之一。它是完全安全的,尽管它不是完全可靠的——如果备用数据库落后于主数据库太远而中止事务,则转储可能会失败。 您真正需要注意的唯一一件事是确保待机是最新的并且跟上。如果备用数据库失去了与主数据库的连接并且落后太远,那么您不会想要愉快地备份一个三周过时的备用数据库。 在备份期间,您需要让备用服务器远远落后于主服务器,否则它必须取消您的pg_dump事务才能继续重播 WAL。请参阅有关热备的文档,尤其是“处理查询冲突”部分以及max_standby_archive_delay和max_standby_streaming_delay参数。 请注意,master 必须愿意保留足够的 WAL 档案以允许 slave 再次赶上。 Ruslan Kabalin 2014-02-08T03:53:05+08:002014-02-08T03:53:05+08:00 我们在待机时进行备份,这非常好。 为避免在备用系统上备份期间取消的语句冲突,您需要使用 暂停备用上的复制SELECT pg_xlog_replay_pause();,然后运行备份,一旦完成运行SELECT pg_xlog_replay_resume();以恢复复制。请记住,运行上述命令将导致从属设备上的恢复延迟,这可能会非常大,具体取决于您的数据库大小。此外,请考虑 WAL 段将占用的空间,因为在暂停期间它们不会在从站上重播。 您可能会在文档中找到一些其他有用的管理功能。例如,在暂停服务器之前检查服务器是否真的处于恢复中:SELECT pg_is_in_recovery(). Pablo Luna 2016-08-20T02:57:07+08:002016-08-20T02:57:07+08:00 免责声明:仅适用于PG12,PG13+使用复制槽 如果您在备份期间暂停复制,(这是保持完整性和一致性的好主意),您可以在您的主 postgresql 中编辑一些行: 有多少时间习惯性地延迟备份。确保主节点保留恢复复制所需的整个 x_log 文件。你可以在 postgresql.conf 编辑中做到这一点 wal_keep_segments = 32 # in logfile segments, 16MB each; 0 disables 如果你不修改这个并且你的备份过程太长,可能是主节点在将它们发送到从节点之前删除了xlog文件。
AFAIK,
pg_dump
在热备用上运行是备用的主要用途之一。它是完全安全的,尽管它不是完全可靠的——如果备用数据库落后于主数据库太远而中止事务,则转储可能会失败。您真正需要注意的唯一一件事是确保待机是最新的并且跟上。如果备用数据库失去了与主数据库的连接并且落后太远,那么您不会想要愉快地备份一个三周过时的备用数据库。
在备份期间,您需要让备用服务器远远落后于主服务器,否则它必须取消您的
pg_dump
事务才能继续重播 WAL。请参阅有关热备的文档,尤其是“处理查询冲突”部分以及max_standby_archive_delay
和max_standby_streaming_delay
参数。请注意,master 必须愿意保留足够的 WAL 档案以允许 slave 再次赶上。
SELECT pg_xlog_replay_pause();
,然后运行备份,一旦完成运行SELECT pg_xlog_replay_resume();
以恢复复制。请记住,运行上述命令将导致从属设备上的恢复延迟,这可能会非常大,具体取决于您的数据库大小。此外,请考虑 WAL 段将占用的空间,因为在暂停期间它们不会在从站上重播。您可能会在文档中找到一些其他有用的管理功能。例如,在暂停服务器之前检查服务器是否真的处于恢复中:
SELECT pg_is_in_recovery()
.免责声明:仅适用于PG12,PG13+使用复制槽
如果您在备份期间暂停复制,(这是保持完整性和一致性的好主意),您可以在您的主 postgresql 中编辑一些行:
有多少时间习惯性地延迟备份。确保主节点保留恢复复制所需的整个 x_log 文件。你可以在 postgresql.conf 编辑中做到这一点
如果你不修改这个并且你的备份过程太长,可能是主节点在将它们发送到从节点之前删除了xlog文件。