在 Postgres 中处理大型 table (>1 TB) 的备份?

Handling backups of a large table (>1 TB) in Postgres?

我有一个 1TB table (X) 很难备份。

table X 包含创建后不经常更新的历史日志数据。我们通常一次只访问一行,所以性能还是很好的。

我们目前每晚进行完整逻辑备份,为了备份时间和space排除X。我们不需要 X 的历史备份,因为填充它的日志文件本身已备份。但是,通过重新处理日志文件来恢复 X 将花费不必要的长时间。

我想将 X 包括在我们的备份策略中,以便我们的恢复时间可以更快。在夜间逻辑备份中包含 X 似乎不可行。

理想情况下,我想要一个增量更新的 X 的完整备份(纯粹是为了节省时间)。

我缺乏单独调查解决方案的经验,我想知道我的选择是什么?

增量更新的酒保?分区 X?两个?

在阅读更多内容后,我倾向于对 table 进行分区并编写夜间脚本以仅对更改的 table 分区执行逻辑备份(并替换以前的备份)。但是,此策略在恢复过程中可能仍需要很长时间 pg_restore... Thoughts?

谢谢!

我认为将 barman 与 rsync/SSH + WAL 流选项一起使用并执行增量备份是您的最佳选择。这样做可以使您的夜间备份更容易且成本更低,因为一旦您配置了酒保,您就不必自己做太多逻辑。我将很快在我的博客中更新此内容,详细说明这些步骤。

在处理大型数据库时,逻辑备份可能不是定期备份的正确方法。当使用物理备份时,即使您的备份大小很大,它在获取和恢复成本(性能、速度和简单性)方面的补偿还是有余的。

谢谢

更新 (2020-08-27):

下面是一个带有端对端演示的 git 回购协议。有很多版本的实现已经做到了,但是如果你想从头开始做一些事情并保持图像简单(避免不必要的依赖),请看一下这个实现,

https://github.com/softwarebrahma/PostgreSQL-Disaster-Recovery-With-Barman

谢谢