试图找出一种正确的方法来清理位于存档目录中的旧 WAL 文件,以便进行时间点恢复。我知道我可以像这样使用 WAL 段的硬编码名称:
pg_archivecleanup.exe H:\Backup\pgArchive 0000000100000001000000C1
但显然我想自动化这个过程。
谢谢你。
试图找出一种正确的方法来清理位于存档目录中的旧 WAL 文件,以便进行时间点恢复。我知道我可以像这样使用 WAL 段的硬编码名称:
pg_archivecleanup.exe H:\Backup\pgArchive 0000000100000001000000C1
但显然我想自动化这个过程。
谢谢你。
一旦您知道要删除的内容,自动化该过程就很简单。
我可以给你一些提示:
通常,您希望删除所有早于要保留的最旧基础备份的 WAL 存档。
每当基本备份完成时,PostgreSQL 将存档一个名为
*.backup
.您可以使用此文件作为第二个参数
pg_archivecleanup
来删除比该备份更旧的所有内容。因此,要保留最后三个备份,您可以查看所有
*.backup
文件,按修改时间对它们进行排序并找到第三个最年轻的文件,然后pg_archivecleanup
将该文件用作第二个参数。您可能应该使用罐装解决方案,而不是尝试创建自己的解决方案。但是,据我所知,唯一明确表示支持 Windows 的开源罐装解决方案是pg_probackup,我从未使用过。
你说你最多可以损失 15 分钟的工作时间。因此,如果没有流媒体解决方案,您的“archive_timeout”需要少于 15 分钟。并且您的 archive_command 需要“fsync”(或等效)远程端的数据,这很难做到,并且是罐装解决方案真正可以提供帮助的地方。
但在时间政策的另一端,事情变得更加困难,我想你已经知道了。一旦你的第二个最旧的基础备份获得一个月的年龄,你需要删除最旧的基础备份和所有只需要支持该备份的 WAL。确定第二旧备份的年龄可能取决于您为它们使用的命名约定,这由您自行决定。并且将该基础备份与相应的 .backup 文件可靠地配对也并非易事。因此,您可以查看第二老的 .backup 文件,并查看内部您可以识别与之对应的基本备份(假设您正确配置了 pg_basebackup——这不是默认配置)。然后您就已经知道要将什么文件提供给 pg_archivecleanup,因为这是您的起点。
当然,如果您想让它起作用,您必须至少每月进行一次基本备份。