Barman 是一个为 PostgreSQL 数据库执行备份和恢复的工具。它可以使用两种方法进行备份:
- rsync/ssh
- 流媒体
在这里,我尝试使用流式方法进行 PITR 恢复,它准确地显示了我需要的内容。它在恢复.signal 文件生成和 postgresql.conf 中的 archive_command 参数由 barman 评论的那一点恢复。
接下来,我成功启动了 postgresql,没有任何从 barman 备份中恢复的特定时间的更改。
后来我取消注释archive_command并删除recovery.signal,然后我重新启动我的postgresql服务器然后它成功启动但PITR在特定时间没有按预期工作。它显示了所有数据,直到最后一次备份。
Barman 的 PITR 命令,其中 192.168.43.21 是 PostgreSQL 服务器,pg 是 barman 的服务器配置。在恢复到 PostgreSQL /var/lib/pgsql/12/data 目录之前,postgresql 已经停止并删除了它以前的内容。
PITR 命令:
barman recover --remote-ssh-command "ssh postgres@192.168.43.21" --target-time=”2022–02–24 04:00:00.588245+00:00" pg 20180722T233002 /var/lib/pgsql/12/数据
例子:
假设我们在凌晨 1 点 2 点 3 点 4 点 5 点有 5 个备份,但我想恢复到凌晨 4 点。并且还想排除凌晨 4 点到 5 点之后的所有数据。从酒保备份数据恢复后,它恢复到凌晨 4 点,但是当我在 postgresql.conf 中取消注释 archive_command 参数并从数据目录中删除 restore.signal 后重新启动时,它也将凌晨 4 点恢复到凌晨 5 点。为什么会这样?
我的问题是 Streaming 方法是否支持 PITR,如果支持,我该怎么做?是不是我做错了什么?流式传输方法有什么限制吗?
从 Barman 恢复到数据目录 /var/lib/pgsql/12/data 的 PostgreSQL 服务器后:
在 postgresql.conf 文件中从 Barman 恢复到 PostgreSQL 服务器后:
在 PostgreSQL 服务器 postgresql.conf 文件更改后,我取消注释 archive_command 并注释掉 archive_commmend=false: