• 金仓数据库KingbaseES客户端应用参考手册--14. sys_receivewal


    目录

    14.1. 简介 ¶

    14.2. 命令行参数 ¶

    14.3. 参数说明 ¶

    14.4. 环境变量 ¶

    14.5. 错误信息诊断 ¶

    14.6. 示例 ¶

    14.7. 备注 ¶

    14.7.1. 退出状态 ¶

    14.8. 参见 ¶


    14.1. 简介 

    sys_receivewal — 从KingbaseES服务器上以流的方式得到预写式日志

    sys_receivewal是用来从一个正在运行的KingbaseES集群以流的方式得到WAL日志,通过使用流复制协议接收WAL日志,将其写入到本地WAL文件,并存放于指定目录下。在做时间点恢复(PITR)时,这个目录作为归档位置使用。

    当KingbaseES服务器上产生WAL日志时,sys_receivewal以流的方式实时接收WAL日志,不需要像 archive_command 那样等待段完成。因此,在使用sys_receivewal时不必设置 archive_timeout 。

    sys_receivewal与 KingbaseES 后备服务器上的 WAL 接收进程不同,默认情况下,仅在关闭WAL文件时才会将缓存中的WAL数据刷新到WAL文件中。如果需要将缓存中的WAL数据实时刷新到WAL文件中,就必须指定选项 --synchronous 。 由于sys_receivewal不会重做接收的WAL,当 synchronous_commit 设置为 remote_apply 时,不能设置它为同步备用,否则它将作为一个永远无法达到同步状态的备用服务器,主服务器为了等待它达到同步状态而阻塞所有事务提交。为了避免出现这种情况,在有sys_receivewal的场景下尽量不要将 synchronous_commit 设置为 remote_apply ,如果必须要设置为 remote_apply ,那么应该将 synchronous_standby_names 配置为一个不包含sys_receivewal对应 application_name 的值。

    建立流复制连接的用户必须是超级用户或者是具有 REPLICATION 权限(见 角色属性 )的用户,并且 sys_hba.conf 必须设置为允许以流复制的方式连接KingbaseES服务器,同时服务器也必须配置足够大的 max_wal_senders ,以便于保证至少提供一个可用的会话供流复制传输时使用。

    如果该连接断开,或者它一开始就由于非致命错误而没有建立连接,sys_receivewal会不断尝试重新建立流复制连接,直到建立成功或人为中断。如果不希望无限重试下去,则可以使用 -n 参数来指定重试次数,一旦达到指定次数仍然没有重连成功就会自动退出。 在没有出现致命错误的情况下,sys_receivewal会一直运行,如果有WAL数据则会接收,没有则一直等待。可以使用SIGINT信号(Control+C)终止它。

    14.2. 命令行参数 

    sys_receivewal option ...]

    14.3. 参数说明 

    -D directory --directory=directory

    本地目录,接收WAL数据后生成的WAL文件会保存在该目录下。

    该参数为必选参数。

    -E lsn --endpos=lsn

    当接收到的WAL的LSN大于此参数指定的LSN后,会停止接收,并且以正常退出状态0退出。

    如果当前接收的WAL记录的LSN和指定的 ``lsn`` 完全相等,会正常处理并继续接收,直到接收的WAL的LSN大于指定值。

    --if-not-exists

    当指定 --create-slot 并且具有指定名称的槽已经存在的情况下不要抛出错误。

    -n --no-loop

    出现连接错误后立刻退出。如果不指定此参数,连接错误后会不断尝试重连。

    --no-sync

    这个选项可以使 sys_receivewal 不强制将WAL数据刷回磁盘。这样会更快,但是一旦此程序或者操作系统崩溃,WAL文件会丢失没有刷回磁盘的WAL数据,最严重时会导致WAL文件损坏。通常情况下,这个选项对于测试时有用,但是在对生产部署进行WAL归档时不应该使用。

    这个选项与 --synchronous 不兼容。

    -s interval --status-interval=interval

    该选项指定发送回服务器状态包之间的间隔秒数,这样可以让我们更方便地监控服务器的进度。 当设定值为0时,则完全禁用定期状态更新。为了避免发生超时断开连接的情况,当服务器请求时,仍然会发送更新。 默认值为 10 秒。

    -S slotname --slot=slotname

    要求sys_receivewal使用现有的复制槽。 当使用这个选项时,sys_receivewal向服务器上报刷新位置,显示每段是何时同步到磁盘的,当服务器不需要该段时,可以移除它。

    当sys_receivewal的复制客户端在服务器上配置为同步后备时,则使用复制槽将会向服务器上报刷新位置,但只有在关闭 WAL 文件时才会上报。 因此,该配置将导致主服务器上的事务等待时间过长,并且实际效果也无法令人满意。 为了避免这种情况,还必须指定选项 --synchronous (见下文)。

    --synchronous

    在收到 WAL 数据后立刻刷入磁盘,同时在刷新后立即将状态包发送回服务器(不考虑 --status-interval )。

    如果sys_receivewal的复制客户端在服务器上配置为同步后备,则应该指定该选项,以确保能及时向服务器发送响应。

    -v --verbose

    开启详细输出模式。

    -Z level --compress=level

    启用WAL日志上的gzip压缩,并且指定压缩级别(共分为0到9个等级,0是不压缩而9是最大压缩)。所有的文件名后面都将自动添加后缀 .gz 

    下列命令行选项指定数据库连接参数。

    -d connstr --dbname=connstr

    以连接字符串的方式来指定用于连接到服务器的参数。

    为了和其他客户端应用程序保持一致,该选项又被称为 --dbname 。但是由于sys_receivewal并没有连接到集群中任何特定的数据库,因此将忽略掉连接字符串中的数据库名称。

    -h host --host=host

    指定运行服务器的主机名。如果该值以斜线开始,则用作 Unix 域套接字的目录。默认值取自 KINGBASE_HOST 环境变量的值(前提条件是已设置该环境变量),否则通过重试 Unix 域套接字连接来获得。

    -p port --port=port

    指定服务器正在监听连接的 TCP 端口或者本地 Unix 域套接字文件扩展名。默认值取自 KINGBASE_PORT 环境变量中(前提条件是已设置该环境变量),否则使用在程序中编译的默认值。

    -U username --username=username

    指定哪个用户连接。

    -w --no-password

    不需要密码认证。如果服务器要求密码认证,而密码无法通过其他方式获得(例如 .kbpass 文件),那么连接将会失败。 这个选项一般用于无法交互(输入密码)的批处理任务或脚本。

    -W --password

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

    这个选项不是必选的。当服务器要求密码认证时,sys_receivewal将自动提示输入密码。如果服务器需要密码认证,sys_receivewal会先尝试连接,连接失败后再提示需要输入密码,用户输入密码后再次尝试连接。这种情况下,使用 -W 参数,sys_receivewal会直接提示输入密码,不会连接失败后再提示。

    为了指定物理复制槽,sys_receivewal 可以执行下列两种操作中的其中一种:

    --create-slot

    使用 --slot 中指定的名称创建新的物理复制槽,然后退出。

    --drop-slot

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

    其他选项也可用:

    -V --version

    打印sys_receivewal的版本信息,然后退出。

    -? --help

    显示关于sys_receivewal命令行参数的帮助信息,然后退出。

    14.4. 环境变量 

    和大多数其他KingbaseES工具一样,这个工具也使用libkci支持的环境变量。

    环境变量 SYS_COLOR 指定是否在诊断消息中使用颜色。 取值范围有 always auto never 

    14.5. 错误信息诊断 

    14.6. 示例 

    从服务器 mydbserver 上流式接收WAL日志,并且将它存储在本地目录 /opt/Kingbase/ES/V8/archive 

    $ sys_receivewal -h mydbserver -D /opt/Kingbase/ES/V8/archive
    

    从服务器 mydbserver 上流式接收WAL日志,并且将它存储在本地目录 /opt/Kingbase/ES/V8/archive ,当出现错误时,不再循环重试,而是立刻退出 :

    $ sys_receivewal -h mydbserver -D /opt/Kingbase/ES/V8/archive -n
    

    从服务器 mydbserver 上流式接收WAL日志,并且将它存储在本地目录 /opt/Kingbase/ES/V8/archive ,用户名为test,端口号为54321,密码为123456,并且将接收到的日志进行压缩处理,压缩级别为6 :

    $ sys_receivewal -h mydbserver -D /opt/Kingbase/ES/V8/archive -U test -p 54321 -W 123456 -Z 6
    

    从服务器 mydbserver 上流式接收WAL日志,并且将它存储在本地目录 /opt/Kingbase/ES/V8/archive ,指定复制槽为test,并以这个名称创建新的物理复制槽,该槽已经存在时不要抛出错误 :

    $ sys_receivewal -h mydbserver -D /opt/Kingbase/ES/V8/archive -S test --create-slot --if-not-exists
    

    从服务器 mydbserver 上流式接收WAL日志,并且将它存储在本地目录 /opt/Kingbase/ES/V8/archive ,指定复制槽为test,并且在收到 WAL 数据后立即刷入磁盘,同时在刷新后立即将状态返回给服务器 :

    $ sys_receivewal -h mydbserver -D /opt/Kingbase/ES/V8/archive -S test --synchronous
    

    14.7. 备注 

    当使用sys_receivewal而不是 archive_command 作为主要的 WAL 备份方式时,强烈建议使用复制槽,否则在没有任何信息(不管是来自 archive_command 还是来自复制槽)能够显示 WAL 流已经归档到什么程度的情况下,服务器在备份好WAL日志文件之前就已经重用或者移除它们。不过需要注意的是,如果接收方没有及时获取 WAL 数据,则复制槽将会填满服务器的整个磁盘空间。

    如果在源集群上启用了组权限,sys_receivewal将会在接收到的WAL文件上保留组权限。

    14.7.1. 退出状态 

    在SIGINT信号终止sys_receivewal时,退出状态将以正常状态0退出(由于这是以正常的方式结束的,因此这不是一种错误)。 而对于致命错误或者其他信号,退出状态将为非0。

    14.8. 参见 

    sys_basebackup

  • 相关阅读:
    spark广播导致的问题
    自动化运维工具Ansible教程(二)【进阶篇】
    果然AIGC还是对动漫制作下手了,不过是从数据集AnimeRun开始
    论文阅读 3 | Few-shot Domain Adaptation by Causal Mechanism Transfer
    jQuery实现黑暗模式
    宏集干货 | 手把手教你通过CODESYS V3进行PLC编程(三)
    【OpenVINO 】在 MacOS 上编译 OpenVINO C++ 项目
    推荐一款网络拓扑自动扫描工具
    五.Dockerfile文件编写的常用指令记录解释
    基于目标检测实现遥感场景下的车辆检测计数
  • 原文地址:https://blog.csdn.net/arthemis_14/article/details/126650004