↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2
历史版本。 PostgreSQL 9.5 已结束支持。 2021-02-11. 请参阅 当前版本手册.

pg_receivexlog

pg_receivexlog — 从一个 PostgreSQL 服务器流式接收事务日志

大纲

pg_receivexlog [option...]

描述

pg_receivexlog 用于从一个正在运行的 PostgreSQL 集簇流式接收事务日志。事务日志使用流复制协议接收,并写入一个本地文件目录。该目录可用作执行时间点恢复(见第 24.3 节)时的归档位置。

pg_receivexlog 会实时流式接收服务器上正在生成的事务日志,而不像archive_command那样等待段文件完成。因此,使用 pg_receivexlog 时无需设置archive_timeout。

与 PostgreSQL 备库的 WAL 接收器不同,pg_receivexlog 默认只在 WAL 文件关闭时才刷写 WAL 数据。要实时刷写 WAL 数据,必须指定 --synchronous 选项。

事务日志通过一个常规的 PostgreSQL 连接并使用复制协议进行流式传输。建立连接时必须使用超级用户或具有 REPLICATION 权限的用户(参见第 20.2 节),并且 pg_hba.conf 必须允许复制连接。服务器还必须将max_wal_senders设置得足够高,以便至少为该流保留一个可用会话。

如果连接丢失,或者最初就无法建立连接,且错误不是致命的, pg_receivexlog 将无限重试连接,并尽快恢复流式传输。要避免这种行为,可使用 -n 参数。

选项

-D directory
--directory=directory

要把输出写入的目录。

此参数为必需项。

--if-not-exists

当指定 --create-slot 而同名复制槽已存在时,不报错。

-n
--no-loop

不在连接错误上循环重试,而是立即报错退出。

-s interval
--status-interval=interval

指定向服务器发回状态包的间隔秒数。这使服务器端更容易监控进度。值为零将完全禁用周期性状态更新,不过当服务器请求时仍会发送一次更新,以避免超时断开连接。默认值为 10 秒。

-S slotname
--slot=slotname

要求 pg_receivexlog 使用一个现有的复制槽(见第 25.2.6 节)。使用此选项时, pg_receivexlog 会向服务器报告刷写位置,指明每个段何时已同步到磁盘,这样服务器就可以在不需要该段时将其删除。

当 pg_receivexlog 的复制客户端在服务器上被配置为同步备库时,使用复制槽会向服务器报告刷写位置,但只在 WAL 文件关闭时报告。因此,这种配置会导致主库上的事务长时间等待,实际上无法令人满意地工作。要使其正确工作,还必须指定 --synchronous 选项(见下文)。

--synchronous

收到 WAL 数据后立即将其刷写到磁盘。同时在刷写之后立即向服务器发回一个状态包,而不考虑 --status-interval。

如果 pg_receivexlog 的复制客户端在服务器上被配置为同步备库,就应指定此选项,以确保向服务器发送及时的反馈。

-v
--verbose

启用详细输出模式。

下列命令行选项控制数据库连接参数。

-d connstr
--dbname=connstr

以连接字符串的形式指定用于连接服务器的参数。更多信息见第 31.1.1 节。

出于与其他客户端应用一致的考虑,该选项名为 --dbname,但由于 pg_receivexlog 并不连接到集簇中的任何特定数据库,连接字符串中的数据库名会被忽略。

-h host
--host=host

指定服务器所在主机的主机名。如果该值以斜杠开头,则将其用作 Unix 域套接字所在目录。默认值取自 PGHOST 环境变量(若已设置),否则尝试 Unix 域套接字连接。

-p port
--port=port

指定服务器监听连接所用的 TCP 端口或本地 Unix 域套接字文件扩展名。默认为 PGPORT 环境变量(若已设置),否则为编译时的内置默认值。

-U username
--username=username

要用来连接的用户名。

-w
--no-password

绝不提示输入密码。如果服务器要求密码认证,而密码又无法通过诸如 .pgpass 文件等其他方式获得,则连接尝试将失败。该选项可用于没有用户在场输入密码的批处理作业和脚本。

-W
--password

强制 pg_receivexlog 在连接数据库之前提示输入密码。

该选项绝非必需,因为如果服务器要求密码认证, pg_receivexlog 会自动提示输入密码。不过, pg_receivexlog 会浪费一次连接尝试来发现服务器需要密码。在某些情况下,输入 -W 可以避免这次额外的连接尝试。

为了控制物理复制槽,pg_receivexlog 可以执行以下两种动作之一:

--create-slot

以 --slot 指定的名称创建一个新的物理复制槽,然后退出。

--drop-slot

删除以 --slot 指定名称的复制槽,然后退出。

还有其他一些可用选项:

-V
--version

打印 pg_receivexlog 的版本并退出。

-?
--help

显示有关 pg_receivexlog 命令行参数的帮助并退出。

环境

和大部分其他 PostgreSQL 工具一样,这个工具也使用 libpq 支持的环境变量(参见第 31.14 节)。

注解

当使用 pg_receivexlog 而不是archive_command作为主要 WAL 备份方法时,强烈建议使用复制槽。否则,服务器可以随意回收或删除尚未备份的事务日志文件,因为它无法从archive_command或复制槽获得 WAL 流已被归档到什么位置的任何信息。但请注意,如果接收端没有及时获取 WAL 数据,复制槽会占满服务器的磁盘空间。

示例

要从位于 mydbserver 的服务器流式接收事务日志,并把它存储到本地目录 /usr/local/pgsql/archive:

$ pg_receivexlog -h mydbserver -D /usr/local/pgsql/archive

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.