pg_receivexlog

Name

pg_receivexlog -- 以流的方式从一个PostgreSQL集簇得到事务日志

Synopsis

pg_receivexlog [option...]

描述

pg_receivexlog被用来从一个运行着的PostgreSQL集簇以流的方式得到事务日志。事务日志会被使用流复制协议以流的方式传送,并且被写入到文件的一个本地目录。这个目录可以被用作归档位置来做一次使用时间点恢复的恢复(见Section 24.3)。

当事务日志在服务器上被产生时,pg_receivexlog实时以流的方式传输事务日志,并且不像archive_command那样等待段完成。由于这个原因,在使用pg_receivexlog时不必设置archive_timeout

事务日志在一个常规PostgreSQL连接上被以流式传送,并且使用复制协议。连接必须由一个超级用户或一个具有REPLICATION权限(见Section 20.2)的用户建立,并且pg_hba.conf必须显式允许复制连接。服务器也必须被配置一个足够高的max_wal_senders来至少留出一个可用会话给流。

如果该连接丢失,或者它一开始就由于一个非致命错误而没有被建立,pg_receivexlog将无限期地重试连接并且尽可能重新建立流。为了避免这种行为,使用-n参数。

选项

下列命令行选项控制输出的位置和格式。

-D directory
--directory=directory

要把输出写到哪个目录。

这个参数是必需的。

下列命令行选项控制程序的运行。

-n
--no-loop

不要在连接错误上循环。相反,碰到一个错误时立刻退出。

-v
--verbose

启用冗长模式。

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

-d connstr
--dbname=connstr

指定用于连接到服务器的参数为一个连接字符串。详见Section 31.1.1

为了和其他客户端应用一致,该选项被称为--dbname。但是因为pg_receivexlog并不连接到集簇中的任何特定数据库,连接字符串中的数据库名将被忽略。

-h host
--host=host

指定运行服务器的机器的主机名。如果该值以一个斜线开始,它被用作 Unix 域套接字的目录。默认值取自PGHOST环境变量(如果设置),否则会尝试一个 Unix 域套接字连接。

-p port
--port=port

指定服务器正在监听连接的 TCP 端口或本地 Unix 域套接字文件扩展。默认用PGPORT环境变量中的值(如果设置),或者一个编译在程序中的默认值。

-s interval
--status-interval=interval

指定发送回服务器的状态包之间的秒数。这允许我们更容易地监控服务器的进度。一个零值完全禁用这种周期性的状态更新,不过当服务器需要时还是会有一个更新会被发送来避免超时导致的断开连接。默认值是 10 秒。

-U username
--username=username

要作为哪个用户连接。

-w
--no-password

从不发出一个口令提示。如果服务器要求口令认证并且没有其他方式提供口令(例如一个.pgpass文件),那儿连接尝试将失败。这个选项对于批处理任务和脚本有用,因为在其中没有一个用户来输入口令。

-W
--password

强制pg_receivexlog在连接到一个数据库之前提示要求一个口令。

这个选项不是必不可少的,因为如果服务器要求口令认证,pg_receivexlog将自动提示要求一个口令。但是,pg_receivexlog将浪费一次连接尝试来发现服务器想要一个口令。在某些情况下值得用-W来避免额外的连接尝试。

其他选项也可用:

-V
--version

打印pg_receivexlog版本并退出。

-?
--help

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

环境

和大部分其他PostgreSQL工具相似,这个工具也使用libpq(见Section 31.14)支持的环境变量。

注解

当使用pg_receivexlog取代archive_command时,即使备份没有被正确地归档,服务器也将继续重复利用事务日志文件,因为没有命令失败。这可以通过设置一个当文件没有被正确地归档时失败的archive_command来变通,例如:

archive_command = 'sleep 5 && test -f /mnt/server/archivedir/%f'

初始的超时是需要的,因为pg_receivexlog使用异步复制工作并且因此会略微落后于主控机。

例子

要从位于mydbserver的服务器流式传送事务日志并且将它存储在本地目录/usr/local/pgsql/archive

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

参见

pg_basebackup