PostgreSQL:单个数据库而不是整个集群的时间点恢复

Posted

技术标签:

【中文标题】PostgreSQL:单个数据库而不是整个集群的时间点恢复【英文标题】:PostgreSQL: point-in-time recovery for individual database and not whole cluster 【发布时间】:2019-04-09 08:27:58 【问题描述】:

按照标准 Postgres documentation

与普通文件系统备份技术一样,这种方法只能支持整个数据库集群的恢复,而不是一个子集。

据此,我了解到无法为集群中的单个数据库(即包含多个数据库的数据库实例)设置 PITR。 如果我的理解不正确,可能问题的下一部分是不相关的,但如果不是,这里是:

理论上我仍然没有遇到问题,因为每个数据库都在生成自己的 WAL 存档。

这里的问题是:我需要设置多个 Postgres clusters 并且不知何故我只有 2 台 RHEL 7.6 机器来处理这个问题。我正在尝试将这 2 台机器上的集群数量减少到只有 2 个。我计划创建多个数据库而不是多个实例来处理客户应用程序。但这意味着我必须牺牲 PITS,因为 PITR 只能在实例/集群级别执行,而不能在数据库级别执行(根据官方文档)。

有人可以帮助澄清我的误解。

【问题讨论】:

【参考方案1】:

你是对的,你只能在 PostgreSQL 数据库集群上做 PITR,而不是在单个数据库上。

整个数据库集群只有一个 WAL 流; WAL没有按数据库分开。

如果这对您有利,请不要犹豫,在一台机器上运行多个 PostgreSQL 集群。

运行第二个数据库集群的开销很小。集群占用的最大资源是共享缓冲区,但无论如何您希望它只是可用 RAM 的一小部分。大部分内存应该留给所有 PostgreSQL 集群共享的文件系统缓存。

【讨论】:

谢谢,还有一个查询,正如您所说:整个数据库集群只有一个 WAL 流...。我无法完全理解它。我有多个数据库,每个数据库都生成 wal_archive 去不同的目录,这是否意味着它们都是相同的流,或者我是否误解了一些非常基本的错误。 你可能有多个 clusters 写入不同的 WAL 归档目录。一个集群中所有数据库的所有 WAL 肯定会归档到同一个目录中。

以上是关于PostgreSQL:单个数据库而不是整个集群的时间点恢复的主要内容,如果未能解决你的问题,请参考以下文章

Postgresql 服务器上名为 postgres 的默认数据库

Spark 从 PostgreSQL 表中读取单列

如何使用 R 而不是整个数据表更改 excel 文件中的单个条目?

使用 fs 修改 json 文件的单个部分,而不是覆盖整个内容

有没有办法告诉 crossfilter 将数组元素视为单独的记录,而不是将整个数组视为单个键?

蓝牙 SCO 到单个 android 应用程序,而不是整个 android 系统