pg_receivexlog
pg_receivexlog — 从一个 PostgreSQL 服务器流式接收事务日志
大纲
pg_receivexlog [option...]
描述
pg_receivexlog 用于从一个正在运行的 PostgreSQL 集簇流式接收事务日志。事务日志使用流复制协议接收,并写入一个本地文件目录。该目录可用作执行时间点恢复(见第 24.3 节)时的归档位置。
pg_receivexlog 会实时流式接收服务器上正在生成的事务日志,而不像archive_command那样等待段文件完成。因此,使用 pg_receivexlog 时无需设置archive_timeout。
事务日志通过一个常规的 PostgreSQL 连接并使用复制协议进行流式传输。建立连接时必须使用超级用户或具有
REPLICATION 权限的用户(参见第 20.2 节),并且 pg_hba.conf 必须允许复制连接。服务器还必须将max_wal_senders设置得足够高,以便至少为该流保留一个可用会话。
如果连接丢失,或者最初就无法建立连接,且错误不是致命的,
pg_receivexlog 将无限重试连接,并尽快恢复流式传输。要避免这种行为,可使用 -n 参数。
选项
-Ddirectory--directory=directory要把输出写入的目录。
此参数为必需项。
-n--no-loop不在连接错误上循环重试,而是立即报错退出。
-sinterval--status-interval=interval指定向服务器发回状态包的间隔秒数。这使服务器端更容易监控进度。值为零将完全禁用周期性状态更新,不过当服务器请求时仍会发送一次更新,以避免超时断开连接。默认值为 10 秒。
-Sslotname--slot=slotname要求 pg_receivexlog 使用一个现有的复制槽(见第 25.2.6 节)。使用此选项时, pg_receivexlog 会向服务器报告刷写位置,指明每个段何时已同步到磁盘,这样服务器就可以在不需要该段时将其删除。使用此参数时,务必确保 pg_receivexlog 不会因synchronous_standby_names的不当设置而成为同步备库;它刷写数据的频率不足以让这种配置正确工作。
-v--verbose启用详细输出模式。
下列命令行选项控制数据库连接参数。
-dconnstr--dbname=connstr以连接字符串的形式指定用于连接服务器的参数。更多信息见第 31.1.1 节。
出于与其他客户端应用一致的考虑,该选项名为
--dbname,但由于 pg_receivexlog 并不连接到集簇中的任何特定数据库,连接字符串中的数据库名会被忽略。-hhost--host=host指定服务器所在主机的主机名。如果该值以斜杠开头,则将其用作 Unix 域套接字所在目录。默认值取自
PGHOST环境变量(若已设置),否则尝试 Unix 域套接字连接。-pport--port=port指定服务器监听连接所用的 TCP 端口或本地 Unix 域套接字文件扩展名。默认为
PGPORT环境变量(若已设置),否则为编译时的内置默认值。-Uusername--username=username要用来连接的用户名。
-w--no-password绝不提示输入密码。如果服务器要求密码认证,而密码又无法通过诸如
.pgpass文件等其他方式获得,则连接尝试将失败。该选项可用于没有用户在场输入密码的批处理作业和脚本。-W--password强制 pg_receivexlog 在连接数据库之前提示输入密码。
该选项绝非必需,因为如果服务器要求密码认证, pg_receivexlog 会自动提示输入密码。不过, pg_receivexlog 会浪费一次连接尝试来发现服务器需要密码。在某些情况下,输入
-W可以避免这次额外的连接尝试。
还有其他一些可用选项:
-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