pg_receivewal -h 192.168.111.132 -U postgres -D /data/pgsql/pg_receivewal --synchronous
pg_receivewal -h 192.168.111.132 -U postgres -D F:\data\pgsql\pg_receivewal --synchronous
C:\Program Files\PostgreSQL\11\bin>pg_receivewal.exe --help
pg_receivewal 接收PostgreSQL的流预写日志.
使用方法:
pg_receivewal [选项]...
选项:
-D, --directory=DIR 接收预写日志到指定的目录
-E, --endpos=LSN 收到指定LSN后退出
--if-not-exists 在创建一个槽时如果槽已经存在则不产生错误
-n, --no-loop 连接丢失时不进行循环处理
--no-sync 不用等待变化安全写入磁盘
-s, --status-interval=SECS
发往服务器的状态包的时间间隔 (默认为: 10)
-S, --slot=SLOTNAME 用于复制的槽名
--synchronous 在写入后立即刷写预写日志
-v, --verbose 输出详细的消息
-V, --version 输出版本信息, 然后退出
-Z, --compress=0-9 按给定的压缩级别对日志文件进行压缩
-?, --help 显示帮助, 然后退出
联接选项:
-d, --dbname=CONNSTR 连接串
-h, --host=HOSTNAME 数据库服务器主机或者是socket目录
-p, --port=PORT 数据库服务器端口号
-U, --username=NAME 指定连接所需的数据库用户名
-w, --no-password 禁用输入密码的提示
-W, --password 强制提示输入密码 (应该自动发生)
可选动作:
--create-slot 创建新的复制槽(槽名请参考选项 --slot)
--drop-slot 删除复制槽 (槽名请参考选项 --slot)
报告错误至 <pgql-bugs@postgresql.org>.
C:\Program Files\PostgreSQL\11\bin>
pg_receivewal
pg_receivewal - 从PostgreSQL服务器流式预读日志
概要
pg_receivewal
[ option
...]
说明
pg_receivewal用于从正在运行的PostgreSQL集群中流式传输预写日志。预写日志使用流复制协议进行流式处理,并写入本地文件目录。此目录可用作使用时间点恢复进行还原的存档位置(请参阅 Section 25.3 )。
pg_receivewal在服务器上生成时实时流式传输预写日志,并且不会像 archive_command 那样等待段完成。因此,使用pg_receivewal时无需设置 archive_timeout 。
与PostgreSQL备用服务器的WAL接收器不同,pg_receivewal默认情况下仅在WAL文件关闭时刷新WAL数据。必须指定选项 --synchronous
以实时刷新WAL数据。
预写日志通过常规PostgreSQL连接进行流式传输,并使用复制协议。必须与超级用户或具有 REPLICATION
权限的用户 Build 连接(请参阅 Section 21.2 ),并且 pg_hba.conf
必须允许复制连接。还必须将服务器配置为 max_wal_senders 设置为足够高,以便为流保留至少一个可用的会话。
如果连接丢失,或者无法初始 Build 连接,并且发生非致命错误,pg_receivewal将无限期地重试连接,并尽快重新 Build 流式传输。要避免此行为,请使用 -n
参数。
在没有致命错误的情况下,pg_receivewal将一直运行,直到被SIGINT信号终止( Control C )。
选项
-
-D directory
--directory=directory
- 将输出写入的目录。
此参数是必需的。
-
-E lsn
--endpos=lsn
- 当接收到达指定的LSN时,自动停止复制并以正常退出状态0退出。
如果存在LSN完全等于 lsn
的记录,则将处理该记录。
-
--if-not-exists
- 指定
--create-slot
并且已存在具有指定名称的插槽时,不要输出错误。
- 指定
-
-n
--no-loop
- 不要循环连接错误。相反,立即退出并出现错误。
-
--no-sync
- 此选项导致
pg_receivewal
不强制将WAL数据刷新到磁盘。这更快,但意味着后续操作系统崩溃可能使WAL段损坏。通常,此选项对于测试很有用,但在 生产环境 部署上执行WAL归档时不应使用此选项。
- 此选项导致
此选项与 --synchronous
不兼容。
-
-s interval
--status-interval=interval
- 指定发送回服务器的状态数据包之间的秒数。这样可以更轻松地监视服务器的进度。值为零会完全禁用周期性状态更新,但在服务器请求时仍会发送更新,以避免超时断开连接。默认值为10秒。
-
-S slotname
--slot=slotname
- 要求pg_receivewal使用现有复制槽(请参阅 Section 26.2.6 )。使用此选项时,pg_receivewal将向服务器报告刷新位置,指示每个段何时已同步到磁盘,以便服务器可以删除该段(如果不需要)。
当pg_receivewal的复制客户端在服务器上配置为同步备用数据库时,使用复制槽将向服务器报告刷新位置,但仅在WAL文件关闭时。因此,该配置将导致主服务器上的事务等待很长时间并且实际上不能令人满意地工作。除了使其正常工作之外,还必须指定选项 --synchronous
(见下文)。
-
--synchronous
- 收到WAL数据后立即将其刷新到磁盘。无论
--status-interval
如何,在刷新后立即将状态包发送回服务器。
- 收到WAL数据后立即将其刷新到磁盘。无论
如果在服务器上将pg_receivewal的复制客户端配置为同步备用,则应指定此选项,以确保及时向服务器发送反馈。
-
-v
--verbose
- 启用详细模式。
-
-Z level
--compress=level
- 启用预写日志的gzip压缩,并指定压缩级别(0到9,0表示无压缩,9表示最佳压缩)。后缀
.gz
将自动添加到所有文件名中。
- 启用预写日志的gzip压缩,并指定压缩级别(0到9,0表示无压缩,9表示最佳压缩)。后缀
以下命令行选项控制数据库连接参数。
-
-d connstr
--dbname=connstr
- 指定用于连接到服务器的参数,作为连接字符串。有关更多信息,请参见 Section 34.1.1 。
该选项被称为 --dbname
以与其他客户端应用程序保持一致,但由于pg_receivewal未连接到 集群 中的任何特定数据库,因此将忽略连接字符串中的数据库名称。
-
-h host
--host=host
- 指定运行服务器的计算机的主机名。如果值以斜杠开头,则将其用作Unix域套接字的目录。默认值取自
PGHOST
环境变量(如果已设置),否则尝试使用Unix域套接字连接。
- 指定运行服务器的计算机的主机名。如果值以斜杠开头,则将其用作Unix域套接字的目录。默认值取自
-
-p port
--port=port
- 指定服务器正在侦听连接的TCP端口或本地Unix域套接字文件扩展名。默认为
PGPORT
环境变量(如果已设置)或已编译的默认值。
- 指定服务器正在侦听连接的TCP端口或本地Unix域套接字文件扩展名。默认为
-
-U username
--username=username
- 要连接的用户名。
-
-w
--no-password
- 从不发出密码提示。如果服务器需要密码身份验证,并且其他方式(例如
.pgpass
文件)无法使用密码,则连接尝试将失败。此选项在没有用户输入密码的批处理作业和脚本中非常有用。
- 从不发出密码提示。如果服务器需要密码身份验证,并且其他方式(例如
-
-W
--password
- 强制pg_receivewal在连接数据库之前提示输入密码。
此选项永远不是必需的,因为如果服务器需要密码验证,pg_receivewal将自动提示输入密码。然而,pg_receivewal将浪费连接尝试,发现服务器需要密码。在某些情况下,值得输入 -W
以避免额外的连接尝试。
pg_receivewal可以执行以下两个操作之一以控制物理复制槽:
-
--create-slot
- 使用
--slot
中指定的名称创建新的物理复制槽,然后退出。
- 使用
-
--drop-slot
- 删除具有
--slot
中指定名称的复制槽,然后退出。
- 删除具有
其他选项也可用:
-
-V
--version
- 打印pg_receivewal版本并退出。
-
-?
--help
- 显示有关pg_receivewal命令行参数的帮助,然后退出。
退出状态
当SIGINT信号终止时,pg_receivewal将以状态0退出。 (这是结束它的常规方法。因此它不是错误。)对于致命错误或其他信号,退出状态将为非零。
环境
与大多数其他PostgreSQL实用程序一样,此实用程序使用libpq支持的环境变量(请参阅 Section 34.14 )。
注意事项
当使用pg_receivewal而不是 archive_command 作为主要的WAL备份方法时,强烈建议使用复制槽。否则,服务器可以在备份之前自由回收或删除预写日志文件,因为它没有来自 archive_command 或复制插槽的任何信息,关于WAL流的存档距离。但请注意,如果接收器无法获取WAL数据,则复制槽将填满服务器的磁盘空间。
如果在源 集群 上启用了组权限,pg_receivewal将保留对收到的WAL文件的组权限。
例子
要在 mydbserver
从服务器流式传输预写日志,并将其存储在本地目录 /usr/local/pgsql/archive
中:
$ pg_receivewal -h mydbserver -D /usr/local/pgsql/archive