使用流复制时,有人可以解释PostgreSQL中archive_command和restore_command的目的吗?
正如我在流复制辅助服务器中研究的那样,读取并应用部分填充的WAL文件。假设我在pg_xlog中有wal段位置,并使用archive_command将其复制到本地存档目录中,例如/arclogs。
因此,如果辅助服务器要通过网络从pg_xlog读取部分填充的存档日志,那么/arclogs中保存的文件的用途是什么。
而且文件只有在16 MB时才会发送到/arclogs吗?
我是PostgreSQL的新手,您的帮助将非常热烈。
最佳答案
主机通常仅在pg_xlog
中保留有限数量的WAL,这由主机的 wal_keep_segments
设置控制。如果副本太慢或断开连接的时间太长,则主服务器将删除这些事务日志,以确保副本可以继续运行而不会用完磁盘空间。
如果发生这种情况,副本将无法追上原版,因为它需要连续无间隙的WAL流。
这样你就可以:
archive_command
和 archive_mode
)作为后备,因此,如果主服务器从pg_xlog
中删除所需的WAL,则副本可以切换到从存档重播WAL。该副本使用其 restore_command
获取WAL。重要的是,存档的WAL不必与主服务器在同一台计算机上,通常也不需要。 或者
primary_slot_name
in recovery.conf
)将副本连接到主数据库。如果使用插槽,则即使副本断开连接,主服务器也知道副本需要什么WAL。因此,它不会从pg_xlog
中删除副本仍需要的WAL。但是不利的是,如果副本关闭时间过长,pg_xlog
可能会填满,从而由于磁盘空间不足而导致主服务器失败。 或者
该文档确实需要一个概述,以将所有这些内容放在一起。
WAL归档还有另一个好处:如果您将服务器的base backup制成,则可以使用它以及WAL存档来制作主服务器的point-in-time restore。这使您可以从意外表丢失之类的事件中恢复数据。
PgBarman
是可以帮助您解决此问题的工具之一。关于postgresql - 在PostgreSQL流复制中使用archive_command,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45703167/