找不到“时间线历史文件”来使复制工作

val*_*lya 5 postgresql replication

我正在运行 PostgreSQL 9.4,试图进行复制。

我在做什么,从维基文档说明中获得灵感:

  1. SELECT pg_start_backup('clone', true);
  2. rsync 数据库到可能的副本
  3. SELECT pg_stop_backup();
  4. rsync在的pg_xlog文件夹到想成为副本

我开始复制,它说:

LOG:  fetching timeline history file for timeline 3 from primary server
FATAL:  could not receive timeline history file from the primary server:
    ERROR:  could not open file "pg_xlog/00000003.history": No such file or directory
Run Code Online (Sandbox Code Playgroud)

当然,我正在两台服务器上查找.history文件pg_xlog/,但没有。

我正在浏览文档以找出

要使用备份,您需要保留文件系统备份期间和之后生成的所有 WAL 段文件。为了帮助您执行此操作, pg_stop_backup 函数会创建一个备份历史文件,该文件会立即存储到 WAL 归档区中。此文件以文件系统备份所需的第一个 WAL 段文件命名。例如,如果起始 WAL 文件是 0000000100001234000055CD,则备份历史文件将命名为类似 0000000100001234000055CD.007C9330.backup 的名称。

然而,碰巧的是,在我这样做之后,pg_stop_backup()pg_xlog/或任何地方仍然没有这样的东西。

那么我从哪里得到这个“时间线历史文件”呢?

Vom*_*yle 3

根据“六对二”帖子,您可能只能创建一个文件,然后它将继续进行复制设置,但本质上这是一个 PostgresSQL 错误,它需要此文件,即使它不适用或已根据手术。

注意: 对于 Postgresql 10 及更高版本,该函数已重命名为pg_current_wal_lsn()

当 PostgreSQL 升级新的主服务器时,它会以放置在 WAL 文件目录中的小文本文件的形式创建时间线分割的标记。该文件使得在一些相当复杂的故障转移和故障恢复场景下实现时间点恢复成为可能。

所以看来您必须重新创建该文件。您可以在 Postgres wiki 上找到 .history 文件的非常好的摘要。不过,由于信息采用 .pdf 格式,因此索引起来往往比较困难,因此,如果您还不知道该文档的存在,则可能很难找到该文档。

但我们永远不会回到那个时间线,因为那是在我们升级之前。重新创建丢失的文件所需的只是一个足够好的数字。你可以通过运行获得一个:

# SELECT pg_current_xlog_location();
 pg_current_xlog_location
--------------------------
 1/38F70328
(1 row)
Run Code Online (Sandbox Code Playgroud)

使用这些值在 WAL 目录中模拟一个 .history 文件,等等。副本将立即能够启动。

来源

使用这些(上面)结果创建文件,但使用每个错误的预期名称。


更多资源

  • 了解 PostgreSQL 时间表

  • 系统管理功能

    姓名: pg_current_xlog_location()

    返回类型: 文本

    描述: 获取当前事务日志写入位置

    pg_current_xlog_location以与上述函数使用的相同格式显示当前事务日志写入位置。类似地,pg_current_xlog_insert_location 显示当前事务日志插入点。插入点是事务日志在任何时刻的“逻辑”末尾,而写入位置是实际从服务器内部缓冲区写出的内容的末尾。写入位置是可以从服务器外部检查的内容的末尾,如果您有兴趣归档部分完整的事务日志文件,通常就是您想要的位置。插入点主要用于服务器调试目的。这些都是只读操作,不需要超级用户权限。

    您可以使用pg_xlogfile_name_offset从上述任何函数的结果中提取相应的事务日志文件名和字节偏移量。

    同样,pg_xlogfile_name仅提取事务日志文件名。当给定的事务日志位置恰好位于事务日志文件边界时,这两个函数都返回前一个事务日志文件的名称。这通常是管理事务日志归档行为所需的行为,因为前一个文件是当前需要归档的最后一个文件。

    来源