Postgresql PITR备份:处理多个数据库的最佳做法?[英] Postgresql PITR backup: best practices to handle multiple databases?

本文是小编为大家收集整理的关于Postgresql PITR备份:处理多个数据库的最佳做法?的处理方法,想解了Postgresql PITR备份:处理多个数据库的最佳做法?的问题怎么解决?Postgresql PITR备份:处理多个数据库的最佳做法?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

大家好,我有一个带有许多数据库postgresql 8.3 服务器.

其实,我打算用一个脚本来备份这些数据库,该脚本会将所有备份存储在一个与数据库同名的文件夹中,例如:

/mypath/backup/my_database1/
/mypath/backup/my_database2/
/mypath/backup/foo_database/

我每天每 2 小时进行 1 次转储,每天覆盖文件...例如,在我的 my_database1 文件夹中:

my_database1.backup-00.sql  //backup made everyday at the 00.00 AM
my_database1.backup-02.sql  //backup made everyday at the 02.00 AM
my_database1.backup-04.sql  //backup made everyday at the 04.00 AM
my_database1.backup-06.sql  //backup made everyday at the 06.00 AM
my_database1.backup-08.sql  //backup made everyday at the 08.00 AM
my_database1.backup-10.sql  //backup made everyday at the 10.00 AM
[...and so on...]

这就是我真正保证自己能够恢复丢失至少 2 小时数据的每个数据库的方式.

2 小时看起来还是太长了.

我查看了 postgresql pitr trought 的 WAL 文件,但是,这些文件似乎包含 all 关于我的数据库all 的数据.

我需要分离这些文件,就像分离转储文件一样.

怎么做?

否则,还有另一个易于安装的备份程序,允许我在 10 秒前仅恢复 1 个备份,但无需每 10 秒创建转储文件?

推荐答案

为什么要分离数据库?

PITR 的工作方式是不可能的,因为它适用于整个集群.在这种情况下,您可以做的是为每个数据库创建一个数据目录和一个单独的集群(虽然不推荐,因为它需要不同的端口和 postmaster 实例).

我相信使用 PITR 而不是常规转储的好处超过了为每个数据库单独备份,因此也许您可以重新考虑为什么需要将其分开的原因.

另一种方法是使用 Slony-I 设置一些复制,但是将需要一个单独的机器(或实例)来接收数据.另一方面,这样您将拥有一个近乎实时的复制系统.

评论更新:

要从错误中恢复,例如删除表,PITR 将是完美的,因为您可以重播到特定时间.但是,对于 500 个数据库,我知道这可能是很多开销.Slony-我可能不会工作,因为它正在复制.不确定它如何处理表删除.

我不知道你还有其他方法可以走.我会做的可能仍然是 PITR,只是不犯任何错误;).除了笑话,这可能是一个解决方案:

  • 为 PITR 设置它
  • 让第二个实例处于待命状态.
  • 发生错误时,在第二个实例上重播还原到该时间点.
  • 从该实例中对受影响的数据库执行 pg_dump.
  • 在该数据库的生产实例上执行 pg_restore.

但是,这需要您准备好第二个实例,无论是在同一台服务器上还是在不同的服务器上(建议使用不同的服务器).此外,还原时间会更长一些,因为它需要您进行一次额外的转储和还原.

本文地址:https://www.itbaoku.cn/post/1764211.html