我对 PostgreSQL 复制命令有一些疑问。我正在做一些研究,我发现了几个配置。
第一个是:
archive_mode = on
archive_command = 'cd .'
第二个是:
cp -i %p /var/lib/postgresql/9.1/archive/%f'
然后我的问题是:
- 有什么不同?
- 第一个选项( command )对我来说真的很奇怪。它有什么作用?
我对 PostgreSQL 复制命令有一些疑问。我正在做一些研究,我发现了几个配置。
第一个是:
archive_mode = on
archive_command = 'cd .'
第二个是:
cp -i %p /var/lib/postgresql/9.1/archive/%f'
然后我的问题是:
第一个 (
cd .
) 什么都不做。这是一个占位符。以我的观点写会更好true
,所以它更明显是作为无操作的。打开
archive_mode
但设置一个无操作archive_command
是一个 hacky 解决方法,因为更改archive_command
只需要重新加载服务器,但更改archive_mode
需要完全重新启动服务器,这可能会破坏生产。的目的
archive_command
以及所有其他内容都包含在文档中,因此我不会在那里重复所有这些材料。我和你遇到了同样的问题。
使用流式复制时,理论上不需要将归档的 Xlog 发送到备用服务器。
但是归档的 Xlogs 也是正常恢复所必需的,如果备用服务器无法赶上主服务器(例如,如果它停止了一段时间),也可能需要它们。请注意,我不是 100% 确定在这种情况下是否需要存档,因为还有复制槽的概念,主服务器通过它知道从服务器消耗了什么(我的理解)。有了复制槽,我认为只要从站需要,主站就会积累 XLOGS(如果从站没有回来并且文件系统已满,则停止运行?)
我要做的是将它们运送给奴隶,甚至在主人身上保留一份副本。
所以,在主
但是,我想我会使用一个 shell 脚本来将文件复制到本地并将其同步到从站。这个 shell 脚本还可以检查它是否在从属服务器上运行,如果是,则什么也不做(这样配置文件可以在两者之间对称)。
在从站上,在 recovery.config 中,
我正在使用复制槽,但我仍然需要通过删除早于 x 天的文件的 cron 作业来清理存档的 Xlog。我还没有调查 pg_archivecleanup 程序(https://www.postgresql.org/docs/9.2/static/pgarchivecleanup.html)