我正在为时间点恢复配置基于 PostgreSQL WAL 的备份。实际上,我真的不需要超过 1 个月前的任何时间点,也不想为早于此的日志浪费时间。
是否可以将旧日志与当前基线快照结合起来,以获得一个新的快照,就像它是 1 个月前制作的一样,同时保留所有较新的日志以进行 PITR 恢复?
示意性地解释一下:
current_database == base1.tgz + older_logs + newer_logs
== base2.tgz + newer_logs
如何获得base2.tgz
?
没有一种神奇的方法可以做到这一点,我看到的选项是:
在定义的时间间隔内,执行另一个基本备份并删除旧备份。您可以使用
pg_archivecleanup
contrib删除旧存档(读取 basebackup 中包含的backup_label
文件内容以检查每个 basebackup 需要哪些文件)。这是一种广泛使用的方法,因其简单性而被推荐。另一种方法是将 basebackup 提取到一个目录中,添加一个
recovery.conf
文件并启动 PostgreSQL 以使用存档。recovery.conf
以下是实现该目标的示例:问题是你需要手工完成这一切。我没有时间自己测试它,但你可以尝试看看下面的 shell 脚本是否适用于这样的事情:
您还可以使用
recovery_end_command
重新创建.tar.gz
文件或仅将备份保留为目录。对于未经测试的解决方案,我们深表歉意,但您可以尝试一下,如果发现任何错误,我可以进行编辑。