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

时间:2018-10-12 00:30:33

标签: postgresql partitioning database-backups database-partitioning barman

我有一个1TB的表(X),很难备份。

表X包含历史日志数据,创建后并不经常更新。我们通常一次只能访问一行,因此性能仍然非常好。

我们目前每夜进行一次完整逻辑备份,并且为了备份时间和空间而排除X。我们不需要X的历史备份,因为从中填充X的日志文件会自己备份。但是,通过重新处理日志文件来恢复X会花费不必要的长时间。

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

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

我缺乏独自研究解决方案的经验,我想知道我的选择是什么?

酒保进行增量更新?分区X?都是吗?

经过更多阅读之后,我倾向于对表进行分区并编写一个夜间脚本,以仅对更改后的表分区执行逻辑备份(并替换以前的备份)。但是,在恢复过程中,pg_restore ...这个想法可能仍然需要很长时间?

谢谢!

1 个答案:

答案 0 :(得分:2)

我认为,将酒保与rsync / SSH + WAL流式传输选项一起使用并执行增量备份是您的最佳选择。这样一来,使您的夜间备份变得更容易且成本更低,因为一旦配置了酒保,您就不必自己做太多的逻辑了。我将在不久的将来通过我的博客进行更新,详细说明步骤。

在处理大型数据库时,逻辑备份可能不是定期备份的正确方法。使用物理备份时,即使您的备份大小很大,也远远超过了获取和还原成本(性能,速度和简便性)的补偿。

谢谢

更新(2020-08-27):

以下是带有最终演示的git repo。有很多实现的版本,但是如果您想从头开始做一些事情并保持图像简单(避免不必要的依赖),请查看此实现,

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

谢谢