服务端工具

1.initdb

initdb — 创建一个新的 UXsinoDB 数据库集群

概要

initdb [option...] [ --uxdata | -D ]directory

描述

initdb 创建一个新的 UXsinoDB 数据库集群。一个数据库集群是由单个服务器实例管理的数据库集合。

创建数据库集群包括创建数据库数据所在的目录,生成共享目录表(属于整个集群而不是任何特定数据库的表),以及创建uxdbtemplate1template0 数据库。 uxdb数据库是一个默认数据库,供用户、实用程序和第三方应用程序使用。template1template0 是源数据库,将由后续的 CREATE DATABASE 命令复制。template0 不应该被修改,但是您可以向 template1添加对象,默认情况下将被复制到稍后创建的数据库中。

尽管 initdb 将尝试创建指定的数据目录,但如果所需数据目录的父目录是 root 所有,则可能没有权限。在这种设置中初始化,需要以root 身份创建一个空的数据目录,然后使用 chown 将该目录的所有权分配给数据库用户帐户,然后使用 su 成为数据库用户以运行initdb

initdb 必须作为将拥有服务器进程的用户运行,因为服务器需要访问数据库数据目录。 由于服务器不能以 root 用户身份运行,因此您也不能以 root 用户身份运行initdb。(实际上,它会拒绝这样做。)

出于安全原因,initdb 创建的新集群默认只能由集群所有者访问。选项 --allow-group-access允许与集群所有者在同一组中的任何用户读取集群中的文件。这对于以非特权用户执行备份非常有用。

initdb 初始化数据库集群的默认区域设置和字符集编码。在创建每个数据库时,这些也可以单独设置。 initdb确定模板数据库的这些设置,这将成为所有其他数据库的默认设置。默认情况下,initdb使用区域设置提供程序 libc,从环境中获取区域设置,并从区域设置确定编码。这几乎总是足够的,除非有特殊要求。

要为集群选择不同的区域设置,请使用选项 --locale。还有单独的选项--lc-*(见下文)来设置各个区域设置类别的值。请注意,不同区域设置类别的不一致设置可能会导致无意义的结果,因此应谨慎使用。

或者,可以使用 ICU 库提供区域设置服务。(同样,这仅设置随后创建的数据库的默认值。)要选择此选项,请指定--locale-provider=icu。要选择要应用的特定 ICU 区域设置 ID,请使用选项--icu-locale。请注意,出于实现原因和支持旧代码的原因,当使用 ICU区域设置提供程序时,initdb 仍将选择和初始化 libc 区域设置。

initdb 运行时,它将打印出它选择的区域设置。如果您有复杂的要求或指定了多个选项,则建议检查结果是否与预期相符。

要更改默认编码,请使用 --encoding

大小写敏感,使用--ignore-case,可以选择查询结果按照原文还是转化成小写输出创建时的表名、列名、索引名等。

选项

-A authmethod
--auth=authmethod
此选项指定本地用户在 ux_hba.confhostlocal行)中使用的默认身份验证方法。

initdb 将使用指定的身份验证方法预填充 ux_hba.conf 条目,用于非复制和复制连接。

除非您信任系统上的所有本地用户,否则不要使用 trust。出于安装方便,trust 是默认设置。

--auth-host=authmethod
此选项指定通过 TCP/IP 连接使用的本地用户的身份验证方法,在 ux_hba.conf 中使用。 (host 行)。

--auth-local=authmethod
此选项指定本地用户通过 Unix 域套接字连接在 ux_hba.conflocal 行)中使用的身份验证方法。

-D directory
--uxdata=directory
此选项指定应存储数据库群集的目录。这是唯一由 initdb 需要的信息,但您可以通过设置 UXDATA环境变量来避免编写它,这可能很方便,因为数据库服务器(uxdb)可以稍后通过相同的变量找到数据库目录。

-E encoding
--encoding=encoding
选择模板数据库的编码。这也将是您稍后创建的任何数据库的默认编码,除非您在那时覆盖它。默认值来自区域设置,如果使用 libc区域设置提供程序,则派生自区域设置,如果使用 ICU 区域设置提供程序,则为 UTF8

在windows10环境下,数据库安装到带中文的路径时,使用init指定-E UTF8编码初始化实例操作时需要进行以下操作:

(Chinese 936)是微软的简体中文字符集标准,其最初版本和GB 2312一模一样,在推出Windows 95时扩展成GBK。报错是因为客户端操作系统与数据库服务端编码不一致,initdb发出的copy命令带有sql文件的绝对路径,路径里以Chinese 936编码的中文字符无法被服务端utf8解码。

Windows10的解决方法:

  1. 按win键,输入并选择“区域与语言设置”
  2. 选择管理语言设置
  3. 在弹出框中选择更改系统区域设置
  4. 勾选Unicode UTF-8并点击确定
  5. 重启操作系统

-g
--allow-group-access
允许与群集所有者在同一组中的用户读取由 initdb 创建的所有群集文件。在 Windows 上忽略此选项,因为它不支持 POSIX样式的组权限。

--icu-locale=locale
如果使用 ICU 区域设置提供程序,则指定 ICU 区域设置 ID。

-k
--data-checksums
在数据页面上使用校验和以帮助检测 I/O系统的损坏,否则将是静默的。启用校验和可能会产生明显的性能损失。如果设置,将为所有对象的所有数据库计算校验和。所有校验和失败都将在ux_stat_database视图中报告。

--locale=locale
设置数据库群集的默认区域设置。如果未指定此选项,则从 initdb 运行的环境继承区域设置。

--lc-collate=locale
--lc-ctype=locale
--lc-messages=locale
--lc-monetary=locale
--lc-numeric=locale
--lc-time=locale
类似于 --locale,但仅在指定的类别中设置区域设置。

--running-mode=[standard]|[compatible/oracle]|[mysql]
uxdb运行模式,默认模式是standard。standard表示标准模式;oracle与compatible相同,表示oracle模式;mysql表示mysql模式。

--no-locale
等同于 --locale=C

--locale-provider={libc|icu}
此选项设置新集群中创建的数据库的区域设置提供程序。可以在随后创建新数据库时在 CREATE DATABASE 命令中覆盖它。默认值为libc

-N
--no-sync
默认情况下,initdb 将等待所有文件安全写入磁盘。此选项使 initdb返回而不等待,这更快,但意味着随后的操作系统崩溃可能会使数据目录损坏。通常,此选项对于测试很有用,但在创建生产安装时不应使用。

--no-instructions
默认情况下,initdb将在其输出的末尾写入启动集群的说明。此选项会导致省略这些说明。这主要用于包装平台特定行为的工具,其中这些说明可能不正确。

--pwfile=filename
initdb 从一个文件读取数据库用户的密码。初始化不带安全功能的实例(不带-a--security选项),该文件的第一行被当作密码。初始化带安全功能的实例(带-a--security选项),则文件中至少包含三行有效密码,有效密码是指符合UXDB口令强度限制,详情参见《优炫数据库管理系统安全功能手册》中“用户标识与鉴别”章节的“强化口令鉴别”小节。

-a
--security
初始化带有安全功能的UXDB实例。安全功能请参见《优炫数据库管理系统安全功能手册》。

-S
--sync-only
安全地将所有数据库文件写入磁盘并退出。这不执行任何正常的 initdb 操作。通常,此选项对于在将fsync从 off 更改为 on后确保可靠恢复很有用。

-T config
--text-search-config=config
设置默认的文本搜索配置。

-U username
--username=username
选择数据库超级用户的用户名。默认为运行 initdb的有效用户的名称。超级用户的名称是可以自定义的,但是通常会选择保留惯用名称uxdb,即使操作系统用户的名称不同也是如此。若不指定自定义用户名,默认的用户名设置为:兼容模式UXDB,其余模式:uxdb。

-W
--pwprompt
initdb提示要求操作者为数据库用户设置一个口令,该口令会被程序以MD5默认加密算法加密后存储至系统表ux_authid中的rolepassword字段中。当数据库集群启动后,如果数据库用户请求登录,则服务器程序根据初始化数据库用户创建时保存的口令进行身份鉴别。若输入密码为空,则为当前用户赋一个密码以便正常登录,设置的默认密码为当前用户名字串。

-X directory
--waldir=directory
此选项指定写前日志应存储的目录。

--ignore-case
该选项只在initdb初始化数据库时设置有效。在数据库中使用show ignore_case来查询“大小写敏感”的情况,on为元组中数据检索大小的不敏感,off为元组中数据检索大小的敏感。

--wal-segsize=size
设置WAL段大小(以兆字节为单位)。这是WAL日志中每个单独文件的大小。默认大小为16兆字节。该值必须是介于1和1024(兆字节)之间的2的幂。此选项只能在初始化期间设置,以后无法更改。

调整此大小可能有助于控制WAL日志传送或归档的粒度。此外,在WAL数量很大的数据库中,每个目录中的WAL文件数量可能会成为性能和管理问题。增加WAL文件大小将减少WAL文件数量。

还有其他不常用的选项:

-d
--debug
从引导后端和其他少数不太重要的消息中打印调试输出。引导后端是程序initdb用于创建目录表的程序。此选项会生成大量极其无聊的输出。

--discard-caches
使用debug_discard_caches=1选项运行引导后端。这需要很长时间,只适用于深度调试。

-L directory
指定initdb应在其中查找其输入文件以初始化数据库群集的位置。通常不需要这样做。如果需要明确指定它们的位置,您将收到通知。

-n
--no-clean
默认情况下,当initdb确定错误阻止其完全创建数据库群集时,它会删除在发现无法完成作业之前可能创建的任何文件。此选项禁止整理,因此对于调试非常有用。

其他选项:

-V
--version
打印initdb版本并退出。

-?
--help
显示有关initdb命令行参数的帮助信息,并退出。

环境变量

UXDATA
指定数据库集群存储的目录;可以使用-D选项覆盖。

UX_COLOR
指定是否在诊断消息中使用颜色。可能的值为alwaysautonever

TZ
指定创建的数据库集群的默认时区。该值应为完整的时区名称。

像大多数其他UXsinoDB实用程序一样, 也使用libuxsql支持的环境变量。

注解

initdb也可以通过 ux_ctl initdb调用。

另请参阅

ux_ctluxdb


2.initdb图形化

initdb图形化 — 与initdb的功能相同,此工具支持initdb的所有参数项

概要

配置数据库工具图形化工具支持当前配置文件uxsinodb.conf中的所有配置项的修改,且若实例处于启动状态,修改配置信息之后,会提供使其生效的重载或重启功能。

  • 环境要求

    要求jdk1.8以上的版本。

  • 启动

    • Linux系统:启动提供的Initdb.sh或ModifyConf.sh脚本。

    • Windows系统:启动提供的Initdb.bat或ModifyConf.bat脚本。

示例

  1. 初始化数据库实例

    使用脚本Initdb.bat或Initdb.sh启动后,页面分为四个部分,从上到下依次为:参数多选框,当前可配置参数输入框或选择框,初始化实例日志框和确认框。

    勾选“是否开启安全功能”,勾选“是否开启全库加密”,“是否开启审计加密”默认选中且无法变更,如下图所示。

    数据库实例密码提示“至少包含一个大写字母、一个小写字母、一个数字和特殊字符,且收尾不能为空格,长度为8-100”。

    勾选“是否开启安全功能”,未选“是否开启全库加密”,“是否开启审计加密”是可选的,如下图所示。

    启动后,用户可勾选配置参数多选框中的参数项,此处展示的是当前版本initdb工具的可选参数。可选参数勾选后,会根据当前参数需要填写的信息,在中间块添加一行/几行参数框,如下图所示。

    在选中“wal段的大小”之后,增加了“wal段的大小”参数框。

    填写完所有信息之后,单击“确定”按钮,即可创建数据库实例。创建完成后,会弹框“数据库实例**创建完成!”

  2. 配置数据库

    使用脚本ModifyConf.bat或ModifyConf.sh启动后,界面如下图所示。页面分为三个部分,从上到下依次为:数据库信息选择框,当前可配置参数框和确认框。

    首先,选择一个数据库实例,如果选中的是未启动实例,则参数配置框变为可用状态,并显示当前配置文件中的对应配置值,修改参数值后,单击修改配置按钮。

    如果选中的是启动中的实例,则启动中实例连接所需信息输入框变为可用状态,如下图所示。

    填写监听地址、监听端口、数据库密码后,单击载入参数,当前实例正在使用的相关参数值会载入参数配置框,同时,修改配置按钮变为下一页按钮,如下图所示。

    修改参数值后,单击下一页按钮,显示参数配置页面修改的所有参数项,按照重载参数项和重启参数项分类显示,如下图所示。

重要

参数生效的方式有两种:重载或重启数据库实例。

  • 重载操作:单击重载按钮,重载信息框的所有信息修改,并重载当前数据库实例使其生效。

  • 重启操作:如果是加密实例,需要填写加密密码,然后单击重启按钮,重启信息框的所有信息修改,并重启当前数据库实例使其生效。

注意

当前云实例仅支持未启动且配置文件本地化的情况。

数据库配置支持启动中的云实例。

数据库配置支持配置文件未本地化的云实例。


3.removedb

removedb — 移除UXDB数据库集群

概要

removedb [option...] [ --uxdata | -D ]directory

选项

-D directory
--uxdata=directory
指定数据库集群的数据目录。

-F
--force
强制删除给定的数据库集群,谨慎使用这个选项。

-V
--version
打印removedb版本并退出。

-?
--help
显示removedb命令行参数的帮助并退出。

环境变量

UXDATA
指定数据库集群应该被存放的目录,可以使用-D选项覆盖。

示例

$ removedb -D /home/uxdb/uxdbinstall/dbsql/bin/test/

4.ux_archivecleanup

ux_archivecleanup — 清理 UXsinoDB WAL 归档文件

概要

ux_archivecleanup [option...] archivelocation oldestkeptwalfile

描述

ux_archivecleanup 被设计为作为一个 archive_cleanup_command 在作为一个备用服务器运行时清理WAL 文件归档。

ux_archivecleanup 也可以作为一个独立的程序来清理 WAL 文件归档。

要配置一个备用服务器使用 ux_archivecleanup,将以下内容放入其 uxsinodb.conf 配置文件中:

archive_cleanup_command = 'ux_archivecleanup archivelocation %r'

其中 archivelocation 是应该从中删除 WAL 段文件的目录。

当在archive_cleanup_command中使用时,逻辑上位于 %r 参数值之前的所有 WAL 文件将从 archivelocation 中删除。这最小化了需要保留的文件数量,同时保留了崩溃重启能力。如果 archivelocation 是特定备用服务器的临时暂存区域,使用此参数是适当的,但如果 archivelocation 旨在作为长期 WAL归档区域使用,或者多个备用服务器从同一归档位置恢复,则不适用。

当作为独立程序使用时,逻辑上位于 oldestkeptwalfile 之前的所有 WAL 文件将从 archivelocation 中删除。在此模式下,如果指定了.partial.backup文件名,则只使用文件前缀作为 oldestkeptwalfile 。这种对.backup文件名的处理允许您在没有错误的情况下删除所有早于特定基本备份的WAL文件。例如,以下示例将删除所有早于WAL文件名000000010000003700000010的文件:

ux_archivecleanup -d archive 000000010000003700000010.00000020.backup

ux_archivecleanup:  keep WAL file "archive/000000010000003700000010" and later
ux_archivecleanup:  removing file "archive/00000001000000370000000F"
ux_archivecleanup:  removing file "archive/00000001000000370000000E"

ux_archivecleanup假定 archivelocation 是由服务器所有用户可读写的目录。

选项

ux_archivecleanup接受以下命令行参数:

-d
stderr上打印大量调试日志输出。

-n
stdout上打印将被删除的文件的名称(执行干运行)。

-V
--version
打印ux_archivecleanup版本并退出。

-x extension
提供一个扩展名,该扩展名将在决定是否删除它们之前从所有文件名中删除。这通常对于清理已在存储期间进行了压缩并因此由压缩程序添加了扩展名的存档非常有用。例如:-x .gz

-?
--help
显示有关ux_archivecleanup命令行参数的帮助,并退出。

环境变量

环境变量UX_COLOR指定是否在诊断消息中使用颜色。可能的值为alwaysautonever

注解

当作为独立实用程序使用时,ux_archivecleanup设计用于与UXsinoDB配合使用,或者当作为存档清理命令使用时,与UXsinoDB配合使用。

ux_archivecleanup是用C编写的,具有易于修改的源代码,具有专门指定的部分,可根据您自己的需求进行修改。

示例

在Linux或Unix系统上,您可能会使用:

archive_cleanup_command = 'ux_archivecleanup -d /mnt/standby/archive %r 2>>cleanup.log'

其中存档目录位于备用服务器上,因此archive_command通过NFS访问它,但文件对于备用服务器来说是本地的。这将:

  • cleanup.log中产生调试输出

  • 从存档目录中删除不再需要的文件


5.ux_checksums

ux_checksums — 启用、禁用或检查 UXsinoDB 数据库集群中的数据校验和

概述

ux_checksums [option...] [[ -D | --uxdata ] datadir ]

描述

ux_checksums 检查、启用或禁用 UXsinoDB 集群中的数据校验和。在运行 ux_checksums之前,必须正常关闭服务器。在验证校验和时,如果没有校验和错误,则退出状态为零,如果检测到至少一个校验和失败,则退出状态为非零。在启用或禁用校验和时,如果操作失败,则退出状态为非零。

在验证校验和时,会扫描集群中的每个文件。在启用校验和时,会原地重写每个关系文件块的更改校验和。禁用校验和只会更新文件 ux_control

选项

以下命令行选项可用:

-D directory
--uxdata=directory
指定存储数据库集群的目录。

-c
--check
检查校验和。如果没有指定其他模式,则为默认模式。

-d
--disable
禁用校验和。

-e
--enable
启用校验和。

-f filenode
--filenode=filenode
仅验证与文件节点 filenode 相关的校验和。

-N
--no-sync
默认情况下,ux_checksums 将等待所有文件安全写入磁盘。此选项使得 ux_checksums在不等待的情况下返回,这样更快,但是意味着后续的操作系统崩溃可能会使更新的数据目录损坏。通常,此选项对于测试很有用,但不应在生产安装中使用。在使用--check 时,此选项无效。

-P
--progress
启用进度报告。打开此选项将在检查或启用校验和时提供进度报告。

-v
--verbose
启用详细输出。列出所有已检查的文件。

-V
--version
打印 ux_checksums 的版本并退出。

-?
--help
显示关于 ux_checksums 命令行参数的帮助信息,并退出。

环境变量

UXDATA
指定存储数据库集群的目录;可以使用 -D 选项覆盖。

UX_COLOR
指定是否在诊断消息中使用颜色。可能的值为 alwaysautonever

注意

在大型集群中启用校验和可能需要很长时间。在此操作期间,不能启动集群或其他写入数据目录的程序,否则可能会导致数据丢失。

在使用执行关系文件块的直接复制的复制设置(例如ux_rewind),启用或禁用校验和可能会导致页面损坏,例如错误的校验和,如果操作在所有节点上不一致地执行。因此,在复制设置中启用或禁用校验和时,建议在切换所有节点之前停止所有集群。销毁所有备机,对主机执行操作,最后从头开始重新创建备机也是安全的。

如果在启用或禁用校验和时中止或杀死 ux_checksums,则集群的数据校验和配置保持不变,可以重新运行 ux_checksums执行相同的操作。


6.ux_controldata

ux_controldata — 显示 UXsinoDB 数据库集群的控制信息

概要

ux_controldata [ option ] [[ -D | --uxdata ] datadir ]

描述

ux_controldata 打印在 initdb 初始化期间初始化的信息,例如目录版本。它还显示有关预写日志和检查点处理的信息。这些信息是集群范围的,不特定于任何一个数据库。

通过ux_controldata工具可以查看当前数据库集群是否已打开安全功能开关。若打开安全功能开关,ux_controldata工具可查SecurityCluster参数值为on,反之则为off

此实用程序只能由初始化集群的用户运行,因为它需要读取数据目录的访问权限。 您可以在命令行上指定数据目录,也可以使用环境变量UXDATA。此实用程序支持选项 -V--version,它们打印 ux_controldata版本并退出。它还支持选项 -?--help,它们输出支持的参数。

环境变量

UXDATA
默认数据目录位置

UX_COLOR
指定是否在诊断消息中使用颜色。可能的值为 alwaysautonever


7.ux_ctl

ux_ctl — 初始化、启动、停止或控制 UXsinoDB 服务器

概要

ux_ctl init[db] [-D datadir] [-s] [-oinitdb-options ]

ux_ctl start [-D datadir ] [-l filename ] [-W] [-t seconds ] [-s] [-o options ] [-p path ] [-c]

ux_ctl stop [-D datadir ] [-m s[mart] | f[ast] |i[mmediate] ] [-W] [-t seconds ] [-s]

ux_ctl restart [-D datadir ] [-m s[mart] | f[ast] |i[mmediate] ] [-W] [-t seconds ] [-s] [-o options ] [-c]

ux_ctl reload [-D datadir ] [-s]

ux_ctl status [-D datadir ]

ux_ctl promote [-D datadir ] [-W] [-t seconds ] [-s]

ux_ctl logrotate [-D datadir ] [-s]

ux_ctl kill signal_name process_id

在微软的Windows系统上也是如此:

ux_ctl register [-D datadir ] [-N servicename ] [-U username ] [-P password ] [-S a[uto] | d[emand] ] [-e source ] [-W] [-t seconds ] [-s] [-o options ]

ux_ctl unregister [-N servicename ]

描述

ux_ctl 是一个用于初始化 UXsinoDB 数据库集群、启动、停止或重新启动 UXsinoDB数据库服务器 (uxdb)或显示正在运行的服务器状态的实用程序。虽然可以手动启动服务器,但 ux_ctl封装了诸如重定向日志输出和正确分离终端和进程组等任务。它还提供了方便的选项来进行受控关闭。

initinitdb模式创建一个新的 UXsinoDB 数据库集群,即由单个服务器实例管理的数据库集合。此模式调用 initdb命令。有关详细信息,请参见 initdb

start模式启动一个新的服务器。服务器在后台启动,其标准输入连接到/dev/null(在Windows上为nul)。在类Unix系统上,默认情况下,服务器的标准输出和标准错误会发送到ux_ctl的标准输出(而不是标准错误)。然后应将ux_ctl的标准输出重定向到文件或管道到另一个进程,例如日志旋转程序rotatelogs;否则,uxdb将在控制终端(从后台)写入其输出,并且不会离开shell的进程组。在Windows上,默认情况下,服务器的标准输出和标准错误发送到终端。可以使用-l将服务器的输出附加到日志文件中来更改这些默认行为。建议使用-l或输出重定向。

stop模式关闭在指定数据目录中运行的服务器。可以使用-m选项选择三种不同的关闭方法。智能模式禁止新连接,然后等待所有现有客户端断开连接。如果服务器处于热备状态,则恢复和流式复制将在所有客户端断开连接后终止。快速模式(默认)不等待客户端断开连接。所有活动事务都将回滚,并强制断开客户端,然后关闭服务器。立即模式将立即中止所有服务器进程,而不进行干净的关闭。这种选择将导致下一次服务器启动时进行崩溃恢复循环。

restart模式实际上执行了一个停止,然后是一个启动。这允许更改uxdb命令行选项,或更改不能在不重新启动服务器的情况下更改的配置文件选项。如果在服务器启动期间在命令行上使用了相对路径,则可能会导致restart失败,除非在与服务器启动时相同的当前目录中执行ux_ctl。

reload模式只是向uxdb服务器进程发送一个SIGHUP信号,导致它重新读取其配置文件(uxsinodb.confux_hba.conf等)。这允许更改不需要完全重新启动服务器即可生效的配置文件选项。

status模式检查指定数据目录中是否正在运行服务器。如果是,则显示服务器的PID和用于调用它的命令行选项。如果服务器未运行,ux_ctl返回退出状态3。如果未指定可访问的数据目录,则ux_ctl返回退出状态4。

promote模式命令在指定数据目录中运行的备用服务器结束备用模式并开始读写操作。

logrotate模式旋转服务器日志文件。

kill模式向指定进程发送信号。这主要对于没有内置kill命令的Microsoft Windows非常有价值。使用使用--help查看支持的信号名称列表。

register模式将UXsinoDB服务器注册为Microsoft Windows系统服务。-S选项允许选择服务启动类型,可以是“auto”(系统启动时自动启动服务)或“demand”(按需启动服务)。

unregister模式取消在Microsoft Windows上的系统服务注册。这将撤销register命令的效果。

选项

-c
--core-files
尝试允许服务器崩溃产生核心文件(在可能的平台上),通过解除对核心文件的软资源限制。这在调试或诊断问题时很有用,可以从失败的服务器进程中获取堆栈跟踪。

-D datadir
--uxdata=datadir
指定数据库配置文件的文件系统位置。如果省略此选项,则使用环境变量UXDATA

-l filename
--log=filename
将服务器日志输出附加到 filename 。如果文件不存在,则创建该文件。umask设置为077,因此默认情况下禁止其他用户访问日志文件。

-m mode
--mode=mode
指定关闭模式。

mode 可以是smartfastimmediate,或这三个中的一个的第一个字母。如果省略此选项,则默认为fast

-o options
--options=options
指定要直接传递给uxdb命令的选项。可以多次指定-o,所有给定的选项都将通过。

options 通常应该用单引号或双引号括起来,以确保它们作为一组传递。

-o initdb-options
--options=initdb-options
指定要直接传递给initdb命令的选项。可以多次指定-o,所有给定的选项都将通过。

initdb-options 通常应该用单引号或双引号括起来,以确保它们作为一组传递。

-p path
指定 uxdb 可执行文件的位置。默认情况下,uxdb 可执行文件取自与 ux_ctl相同的目录,或者在失败时取自硬编码的安装目录。除非您正在执行一些不寻常的操作并且出现了uxdb 可执行文件未找到的错误,否则不需要使用此选项。

init 模式下,此选项类似地指定了 initdb 可执行文件的位置。

-s
--silent
仅打印错误,不打印信息性消息。

-t seconds
--timeout=seconds
指定等待操作完成的最大秒数(参见选项 -w)。默认值为 UXCTLTIMEOUT 环境变量的值,如果未设置,则为 60 秒。

-V
--version
打印 ux_ctl 版本并退出。

-w
--wait
等待操作完成。此选项支持 startstoprestartpromoteregister模式,并且是这些模式的默认选项。

等待时,ux_ctl 会重复检查服务器的 PID 文件,在检查之间短暂休眠。当 PID文件指示服务器已准备好接受连接时,启动被认为已完成。当服务器删除PID 文件时,关闭被认为已完成。ux_ctl 根据启动或关闭的成功情况返回退出代码。

如果操作在超时时间内(参见选项 -t)未完成,则 ux_ctl 以非零退出状态退出。但请注意,操作可能在后台继续并最终成功。

-W
--no-wait
不等待操作完成。这与选项 -w 相反。

如果禁用等待,则触发所请求的操作,但没有关于其成功的反馈。在这种情况下,必须使用服务器日志文件或外部监视系统来检查操作的进度和成功情况。

在 UXsinoDB 的早期版本中,除了 stop 模式外,这是默认选项。

-?
--help
显示关于 ux_ctl 命令行参数的帮助信息,并退出。

如果指定了有效但与所选操作模式无关的选项,则 ux_ctl 会忽略它。

Windows选项

-e source
用于在Windows服务运行时记录事件日志的事件源名称。默认值为UXsinoDB。请注意,这仅控制ux_ctl本身发送的消息;一旦启动,服务器将使用其event_source参数指定的事件源。如果服务器在启动之前非常早地失败,尚未设置该参数,则可能还会使用默认事件源名称UXsinoDB进行记录。

-N servicename
要注册的系统服务的名称。此名称将用作服务名称和显示名称。默认值为UXsinoDB

-P password
运行服务的用户的密码。

-S start-type
系统服务的启动类型。 start-type 可以是autodemand或这两个中的一个的第一个字母。如果省略此选项,则默认值为auto

-U username
运行服务的用户的用户名。对于域用户,请使用DOMAIN\username格式。

环境变量

UXCTLTIMEOUT
等待启动或关闭完成的秒数的默认限制。如果未设置,则默认值为60秒。

UXDATA
默认数据目录位置。

大多数ux_ctl模式需要知道数据目录位置;因此,除非设置了UXDATA,否则需要-D选项。

与大多数其他UXsinoDB实用程序一样, ux_ctl还使用libuxsql支持的环境变量。

有关影响服务器的其他变量, 请参见uxdb

文件

uxmaster.pid
ux_ctl检查数据目录中的此文件以确定服务器当前是否正在运行。

uxmaster.opts
如果数据目录中存在此文件, 则ux_ctl(在restart模式下)将文件的内容作为选项传递给uxdb,除非被-o选项覆盖。此文件的内容也会在status模式下显示。

示例

  • 启动服务器

    要启动服务器并等待服务器接受连接:

    $ ux_ctl start
    

    要使用端口 5433 启动服务器,并且不使用 fsync,请使用:

    $ ux_ctl -o "-F -p 5433" start
    
  • 停止服务器

    要停止服务器,请使用:

    $ ux_ctl stop
    

    -m 选项允许控制服务器关闭的方式:

    $ ux_ctl stop -m smart
    
  • 重新启动服务器

    重新启动服务器几乎相当于停止服务器并重新启动它,除了默认情况下,ux_ctl保存并重用传递给先前运行实例的命令行选项。要使用与之前相同的选项重新启动服务器,请使用:

    $ ux_ctl restart
    

    但是,如果指定了 -o,则会替换任何先前的选项。要使用端口 5433 重新启动并在重新启动时禁用 fsync

    $ ux_ctl -o "-F -p 5433" restart
    
  • 显示服务器状态

    这是 ux_ctl 的示例状态输出:

    $ ux_ctl status
    
    ux_ctl: server is running (PID: 13718)
    /usr/local/uxsql/bin/uxdb "-D" "/usr/local/uxsql/data" "-p" "5433" "-B" "128"
    

    第二行是在重新启动模式下将调用的命令。

另请参阅

initdbuxdb


8.ux_diagnose

ux_diagnose — 分析和重置UXDB数据库集群的预写式日志

概要

ux_diagnose [option...] [[-D] datadir ]

选项

-D directory
指定数据库集群的数据目录。

-m mxid,mxid
手工设置下一个和最老的多事务ID。

确定下一个多事务ID(第一部分)的安全值的方法:在数据目录下的ux_multixact/offsets目录中查找最大的数字文件名,然后在它的基础上加一并且乘以 65536 (0x10000)。确定最老的多事务ID(第二部分)的方法:在同一个目录中查找最小的数字文件名并且乘以65536。文件名是十六进制的数字,因此实现上述方法最简单的方式是以十六进制指定选项值并且追加四个零。

-O mxoff
手工设置下一个多事务偏移量。

查找数据目录下ux_multixact/members目录中最大的数字文件名,然后在它的基础上加一并且乘以52352 (0xCC80)。文件名是十六进制数字。没有像其他选项那样追加零的简单方法。

-x xid
手工设置下一个事务 ID。

在数据目录下的ux_xact目录中查找最大的数字文件名, 然后在它的基础上加一并且乘以1048576 (0x100000)。注意文件名是十六进制的数字。通常以十六进制的形式指定该选项值也是最容易的。例如,如果0011是ux_xact中的最大项,-x 0x1200000就可以 (五个尾部的零就表示了前面说的乘数)。

-p port
--port=port
指定服务器正在监听连接的TCP端口或本地Unix域套接字文件扩展。

-U username
--username=username
要作为哪个用户连接。

-V
--version
打印版本信息并退出。

-?
--help
显示帮助并退出。

示例

$  ./ux_diagnose -D /home/uxdb/uxdbinstall/dbsql/bin/test

9.ux_resetwal

ux_resetwal — 重置 UXsinoDB 数据库集群的写入前日志和其他控制信息

概要

ux_resetwal [ -f | --force ] [ -n | --dry-run ] [option...] [ -D | --uxdata ]datadir

描述

ux_resetwal 清除写入前日志(WAL)并可选地重置存储在 ux_control文件中的一些其他控制信息。如果这些文件已经损坏,有时需要使用此函数。仅在服务器由于此类损坏而无法启动时才应使用它。

运行此命令后,应该可以启动服务器,但请记住,由于部分提交的事务,数据库可能包含不一致的数据。您应立即转储数据,运行 initdb并进行恢复。恢复后,请检查不一致性并根据需要进行修复。

此实用程序只能由安装服务器的用户运行,因为它需要对数据目录进行读写访问。出于安全原因,必须在命令行上指定数据目录。 ux_resetwal不使用环境变量 UXDATA

如果 ux_resetwal 抱怨无法确定 ux_control 的有效数据,则可以通过指定-f(强制)选项来强制执行。在这种情况下,将为缺失的数据替换合理的值。大多数字段可以期望匹配,但可能需要手动协助下一个OID、下一个事务 ID 和时代、下一个多事务 ID 和偏移以及 WAL起始位置字段。可以使用下面讨论的选项设置这些字段。如果无法确定所有这些字段的正确值,则仍然可以使用-f,但是可能需要手动修复不一致性。

恢复的数据库必须比平常更加谨慎地处理:必须立即进行转储和恢复。在转储之前不要执行任何修改数据的操作,因为任何此类操作都可能使损坏加剧。

选项

-f
--force
即使无法确定 ux_control 的有效数据,也要强制ux_resetwal 继续进行。

-n
--dry-run
指示 ux_resetwal 打印从 ux_control重建的值和即将更改的值,然后退出而不进行任何修改。这主要是一个调试工具,但在允许ux_resetwal 真正进行之前进行检查可能很有用。

-V
--version
显示版本信息,然后退出。

-?
--help
显示帮助,然后退出。 只有在 ux_resetwal 无法通过读取 ux_control确定适当的值时才需要以下选项。可以按照下面的说明确定安全值。对于需要数字参数的值,可以使用前缀 0x指定十六进制值。

-c xid,xid
--commit-timestamp-ids=xid,xid
手动设置可以检索提交时间的最旧和最新事务ID。 可以通过查找数据目录下 ux_commit_ts 目录中数字最小的文件名来确定可以检索提交时间的最旧事务ID(第一部分)的安全值。相反,可以通过查找相同目录中数字最大的文件名来确定可以检索提交时间的最新事务ID(第二部分)的安全值。文件名是十六进制的。

-e xid_epoch
--epoch=xid_epoch
手动设置下一个事务 ID的时代。 事务 ID 时代实际上并没有存储在数据库中的任何地方,除了由 ux_resetwal设置的字段之外,因此任何值都可以在数据库本身方面工作。您可能需要调整此值以确保复制系统(如Slony-I 和 Skytools)正常工作-如果是这样,应该可以从下游复制数据库的状态中获得适当的值。

-l walfile
--next-wal-file=walfile
通过指定下一个 WAL 段文件的名称,手动设置 WAL 的起始位置。

下一个 WAL 段文件的名称应该比数据目录下 ux_wal 目录中当前存在的任何 WAL段文件名称都要大。这些名称也是十六进制的,由三部分组成。第一部分是“timeline ID”,通常应该保持不变。例如,如果 00000001000000320000004Aux_wal 中最大的条目,则使用-l 00000001000000320000004B 或更高的值。

请注意,当使用非默认的 WAL 段大小时,WAL 文件名称中的数字与系统函数和系统视图报告的 LSN 不同。此选项接受 WAL 文件名,而不是LSN。

注意
ux_resetwal 本身会查看 ux_wal 中的文件,并选择一个默认的 -l设置,超出最后一个现有文件名称。因此,只有在您知道当前不存在于ux_wal 中的 WAL 段文件(例如离线存档中的条目)或者 ux_wal 的内容已经完全丢失时,才需要手动调整 -l

-m mxid,mxid
--multixact-ids=mxid,mxid
手动设置下一个和最旧的多事务 ID。

下一个多事务 ID(第一部分)的安全值可以通过查找数据目录下 ux_multixact/offsets目录中数字最大的文件名,加上一,然后乘以65536(0x10000)来确定。相反,最旧的多事务 ID(-m的第二部分)的安全值可以通过查找相同目录中数字最小的文件名,然后乘以65536 来确定。文件名是十六进制的,因此最简单的方法是使用十六进制指定选项值,并附加四个零。

-o oid
--next-oid=oid
手动设置下一个 OID。

没有类似的简单方法可以确定超出数据库中最大 OID 的下一个 OID,但幸运的是,获取下一个 OID 设置并不是很关键。

-O mxoff
--multixact-offset=mxoff
手动设置下一个多事务偏移量。

可以通过查找数据目录下 ux_multixact/members 目录中数字最大的文件名,加上一,然后乘以52352(0xCC80)来确定安全值。文件名是十六进制的。没有像其他选项一样附加零的简单方法。

--wal-segsize=wal_segment_size
设置新的WAL段大小,以兆字节为单位。该值必须设置为2的幂,介于1到1024(兆字节)之间。有关更多信息,请参见initdb的相同选项。

注意
虽然ux_resetwal将设置WAL起始地址超出最新的现有WAL段文件,但某些段大小更改可能会导致重用以前的WAL文件名。建议使用-l与此选项一起手动设置WAL起始地址,如果WAL文件名重叠会导致您的归档策略出现问题。

-u xid
--oldest-transaction-id=xid
手动设置最旧的未冻结事务ID。

可以通过查找数据目录下ux_xact目录中数字最小的文件名,然后乘以1048576(0x100000)来确定安全值。请注意,文件名是十六进制的。通常最好也用十六进制指定选项值。例如,如果0007ux_xact中最小的条目,则-u 0x700000将起作用(五个尾随零提供正确的乘数)。

-x xid
--next-transaction-id=xid
手动设置下一个事务ID。

可以通过查找数据目录下ux_xact目录中数字最大的文件名,加上一,然后乘以1048576(0x100000)来确定安全值。请注意,文件名是十六进制的。通常最好也用十六进制指定选项值。例如,如果0011ux_xact中最大的条目,则-x 0x1200000将起作用(五个尾随零提供正确的乘数)。

环境变量

UX_COLOR
指定是否在诊断消息中使用颜色。可能的值为alwaysautonever

注解

此命令不能在服务器运行时使用。如果在数据目录中找到服务器锁定文件,ux_resetwal将拒绝启动。如果服务器崩溃,则可能留下锁定文件;在这种情况下,您可以删除锁定文件以允许ux_resetwal运行。但在这样做之前,请确保没有服务器进程仍然存在。

ux_resetwal仅适用于相同主要版本的服务器。

另请参阅

ux_controldata


10.ux_rewind

ux_rewind — 将一个 UXsinoDB 数据目录与从它派生的另一个数据目录同步

概要

ux_rewind [option...] { -D | --target-uxdata }directory {--source-uxdata=directory | --source-server=connstr }

描述

ux_rewind 是一个工具,用于在集群的时间轴发生分歧后,将一个 UXsinoDB集群与另一个相同集群的副本同步。一个典型的场景是将一个旧的主服务器作为一个遵循新主服务器的备用服务器重新上线。

成功回退后,目标数据目录的状态类似于源数据目录的基本备份。与进行新的基本备份或使用类似于 rsync 的工具不同,ux_rewind不需要比较或复制集群中未更改的关系块。只有现有关系文件中的更改块被复制;所有其他文件,包括新的关系文件、配置文件和 WAL段,都被完全复制。因此,当数据库很大且集群之间只有一小部分块不同的情况下,回退操作比其他方法快得多。

ux_rewind 检查源集群和目标集群的时间轴历史记录,以确定它们分歧的点,并期望在目标集群的 ux_wal 目录中找到WAL,一直延伸到分歧点。分歧点可以在目标时间轴、源时间轴或它们的共同祖先上找到。在典型的故障转移场景中,目标集群在分歧后不久关闭,这不是一个问题,但如果目标集群在分歧后运行了很长时间,它的旧WAL文件可能不再存在。在这种情况下,可以手动复制它们。从WAL归档目录复制到ux_wal目录,或者使用ux_rewind命令并带上-c选项自动从WAL归档中检索。使用ux_rewind不仅限于故障转移,例如,可以将一个备用服务器提升为主服务器,运行一些写事务,然后倒回成为备用服务器。

运行ux_rewind后,需要完成WAL重放以使数据目录处于一致状态。当目标服务器再次启动时,它将进入归档恢复模式,并从分歧点之前的最后一个检查点开始重放源服务器生成的所有WAL。如果在运行ux_rewind时,源服务器中的某些WAL不再可用,因此无法通过ux_rewind会话进行复制,则在启动目标服务器时必须使其可用。这可以通过在目标数据目录中创建一个recovery.signal文件,并在uxsinodb.conf中配置适当的restore_command来完成。

ux_rewind要求目标服务器在uxsinodb.conf中启用wal_log_hints选项或在使用initdb初始化集群时启用数据校验和。这两者目前都不是默认启用的。full_page_writes也必须设置为on,但默认情况下已启用。

警告

如果ux_rewind在处理过程中失败,则目标数据文件夹可能无法恢复。在这种情况下,建议进行新的备份。

由于ux_rewind完全从源复制配置文件,因此在重新启动目标服务器之前,可能需要更正用于恢复的配置,特别是如果将目标重新引入源作为备用服务器的情况下。如果在倒回操作完成后重新启动服务器,但没有配置恢复,则目标可能会再次与主服务器分歧。

如果ux_rewind发现无法直接写入的文件,则会立即失败。例如,当源服务器和目标服务器使用相同的文件映射来读取只读SSL密钥和证书时,就会发生这种情况。如果在目标服务器上存在这样的文件,则建议在运行ux_rewind之前将其删除。在进行倒回操作后,这些文件中的一些可能已从源复制,因此可能需要删除复制的数据并恢复倒回之前使用的链接集。

选项

ux_rewind接受以下命令行参数:

-D directory
--target-uxdata=directory
此选项指定与源同步的目标数据目录。在运行ux_rewind之前,必须正常关闭目标服务器。

-k
--key-path=PATH
指定wal加密参数文件路径,wal加密参数文件请参见《优炫数据库管理系统安全功能手册》“数据保密性”章节中的“ux_waldump解析加密wal日志”的“导出WAL加密信息”小节。

--source-uxdata=directory
指定源服务器的数据目录的文件系统路径。

--target-server=connstr
指定一个 libuxsql 连接字符串以连接到目标 UXsinoDB服务器进行同步。连接必须是一个普通(非复制)连接,具有足够权限的角色来执行在源服务器上由ux_rewind 使用的函数(详见注释部分)或超级用户角色。此选项要求目标服务器处于干净的关闭状态。

--source-server=connstr
指定一个 libuxsql 连接字符串以连接到源 UXsinoDB服务器进行同步。连接必须是一个普通(非复制)连接,具有足够权限的角色来执行在源服务器上由ux_rewind 使用的函数(详见注释部分)或超级用户角色。此选项要求源服务器正在运行并接受连接。

-R
--write-recovery-conf
在输出目录中创建 standby.signal 并将连接设置附加到 uxsinodb.auto.conf。此选项需要使用--source-server

-n
--dry-run
执行除实际修改目标目录之外的所有操作。

-N
--no-sync
默认情况下,ux_rewind 将等待所有文件安全写入磁盘。此选项会导致 ux_rewind在不等待的情况下返回,这样更快,但意味着随后的操作系统崩溃可能会使数据目录损坏。通常,此选项对于测试很有用,但不应在生产安装中使用。

-P
--progress
启用进度报告。打开此选项将在从源群集复制数据时提供近似进度报告。

-c
--restore-target-wal
使用目标群集配置中定义的 restore_command 从 WAL 存档中检索 WAL 文件,如果这些文件在 ux_wal目录中不再可用。

--config-file=filename
为目标群集使用指定的主服务器配置文件。这会影响 ux_rewind,当它在此群集上使用内部 uxdb命令进行倒带操作时(当使用选项 -c/--restore-target-wal检索 restore_command 时,以及强制完成崩溃恢复时)。

--debug
打印详细的调试输出,这对于开发人员调试 ux_rewind 很有用。

--no-ensure-shutdown
在倒带之前,ux_rewind 要求目标服务器干净地关闭。默认情况下,如果目标服务器没有干净地关闭,ux_rewind将在单用户模式下启动目标服务器以首先完成崩溃恢复,然后停止它。通过传递此选项,ux_rewind将跳过此步骤,并在服务器未干净关闭时立即出错。在这种情况下,用户应该自行处理这种情况。

-V
--version
显示版本信息,然后退出。

-?
--help
显示帮助信息,然后退出。

环境变量

当使用 --source-server 选项时, ux_rewind 也会使用由 libuxsql 支持的环境变量。

环境变量 UX_COLOR 指定是否在诊断消息中使用颜色。可能的值为 alwaysautonever

注解

当使用在线集群作为源时执行 ux_rewind,可以使用具有足够权限以在源集群上执行 ux_rewind使用的函数的角色,而不是超级用户。以下是如何创建这样的角色,这里命名为rewind_user

CREATE USER rewind_user LOGIN;
GRANT EXECUTE ON function ux_catalog.ux_ls_dir(text, boolean, boolean) TO rewind_user;
GRANT EXECUTE ON function ux_catalog.ux_stat_file(text, boolean) TO rewind_user;
GRANT EXECUTE ON function ux_catalog.ux_read_binary_file(text) TO rewind_user;
GRANT EXECUTE ON function ux_catalog.ux_read_binary_file(text, bigint, bigint, boolean) TO rewind_user;

当使用最近晋升的在线集群作为源执行 ux_rewind 时,需要在晋升后执行 CHECKPOINT,以使其控制文件反映最新的时间线信息,该信息由 ux_rewind 用于检查目标集群是否可以使用指定的源集群进行回滚。

工作原理

基本思路是将源集群到目标集群的所有文件系统级别的更改复制到目标集群:

  1. 从源集群的时间线历史分叉点之前的最后一个检查点开始扫描目标集群的 WAL 日志。对于每个 WAL记录,记录每个被触及的数据块。这将得到在源集群分叉之后目标集群中发生更改的所有数据块的列表。如果一些WAL 文件不再可用,请尝试使用 -c 选项重新运行 ux_rewind,以在 WAL 存档中搜索缺失的文件。

  2. 将所有这些更改的块从源集群复制到目标集群,使用直接文件系统访问(--source-uxdata)或SQL(--source-server)。现在,关系文件处于等效状态,即在源集群分叉之前的最后一个完成检查点的时刻,加上在该分叉之后在目标集群上更改的任何块的当前状态。

  3. 将所有其他文件,包括新的关系文件、WAL 段、ux_xact 和配置文件从源集群复制到目标集群。与基本备份类似,目录ux_dynshmem/ux_notify/ux_replslot/ux_serial/ux_snapshots/的内容也会被复制。ux_stat_tmp/ux_subtrans/ 目录中的数据将被省略。文件backup_labeltablespace_mapux_internal.inituxmaster.optsuxmaster.pid,以及任何以uxsql_tmp 开头的文件或目录都将被省略。

  4. 创建一个 backup_label 文件,以在故障转移时从检查点开始进行 WAL 回放,并将 ux_control文件配置为最小一致性 LSN,该 LSN 定义为从活动源进行倒带时ux_current_wal_insert_lsn() 的结果,或从停止源进行倒带时的最后一个检查点 LSN。

  5. 启动目标时,UXsinoDB 回放所有必需的 WAL,从而使数据目录处于一致状态。


11.ux_standby

ux_standby — 对创建一个UXDB热备服务器提供支持

概要

ux_standby [option...] archivelocation nextwalfile walfilepath [restartwalfile]

描述

ux_standby用于支持创建一个“热备”数据库服务器。它被设计为一个可以随时投入生产的程序,以及一个可定制的模板供你进行特定的修改。

ux_standby被设计成一个等待着的restore_command,它被用来把一次标准的归档恢复变成一次热备操作。还需要一些其他的配置,所有这些配置都在主服务器手册中有相应的描述。

要配置一台备用服务器去使用ux_standby,可以把下面的内容放在recovery.conf配置文件中:

restore_command = 'ux_standby archiveDir %f %p %r'

其中archiveDir是 WAL 段文件应该被存储的目录。

如果指定了restartwalfile(通常用%r宏指定),那么所有在逻辑上位于这个文件之前的 WAL 文件都将被从archivelocation中移除。这使需要被保留的文件数最小化,与此同时能够保持崩溃重启的能力。如果archivelocation对于这个特定备用服务器是一个临时暂存区域,使用这个参数是合适的,但当archivelocation是一个长期 WAL 归档区域时则不是合适的。

ux_standby假定archivelocation是一个拥有服务器的用户可读的目录。如果指定了restartwalfile(或者-k),archivelocation目录必须也是可写的。

当主服务器失效时,有两种方式转移到一个“热备”数据库服务器:

  • 智能故障转移

    在智能故障转移中,服务器在应用归档中可用的所有 WAL 文件之后被提升。即便备用服务器落后于主服务器,这也会导致零数据丢失,但是如果有很多未应用的 WAL,在备用服务器准备好之前就需要比较长的时间。要触发一次智能故障转移,创建一个包含单词smart的触发文件,或者只创建一个空文件。

  • 快速故障转移

    在快速故障转移中,服务器被立即提升。归档中任何还未被应用的 WAL 文件将被忽略,并且这些文件中的所有事务都会丢失。要触发一次快速故障转移,创建一个触发文件并且把单词fast写在其中。ux_standby也能被配置为在一段定义好的区间内没有新 WAL 文件出现时自动执行一次快速故障转移。

选项

ux_standby接受下列命令行参数:

-c
使用cp或者copy命令来存储来自归档的 WAL 文件。这是唯一支持的行为,因此这个选项是无用的。

-d
在stderr上打印大量调试日志输出。

-k
从archivelocation移除文件,这样当前 WAL 文件之前不超过这么多个 WAL 文件会被保留在归档中。零(默认值)意味着不从archivelocation移除任何文件。如果指定了restartwalfile,这个参数将被安静地忽略,因为那种说明方法对于决定正确的归档切断点更为精确。这个参数的使用已经被废弃,指定一个restartwalfile参数更加安全和有效。一个太小的值可能导致备用服务器的重启仍需要已经被移除的文件,而一个太大的值则浪费归档空间。

-r maxretries
设定拷贝命令失败时重试的最大次数(默认为 3)。在每一次失败后,我们等待sleeptime * num_retries,这样等待时间会逐步增加。因此默认情况下,我们将等待 5 秒、10 秒、15秒,然后向备用服务器报告失败。这将被解释为恢复的结束并且该备用服务器将会完全被提升。

-s sleeptime
设置在检查要被恢复的 WAL 文件在归档中是否可用的测试之间休眠的秒数(最高 60,默认为 5)。

-t triggerfile
指定一个触发文件,它的出现将会导致故障转移。我们推荐使用一个有结构的文件名,这样可以避免在同一个系统上有多个服务器存在时无法确定是要触发哪个服务器。例如可以用/tmp/uxsql.trigger.5432。

-V
--version
打印ux_standby版本并退出。

-w maxwaittime
设置等待下一个 WAL 文件的最大秒数,之后将会执行一次快速故障转移。设置为 0 (默认值)表示永远等待。

-?
--help
显示有关ux_standby的命令行参数,然后退出。

示例

在Linux或Unix系统上,你可能会使用:

archive_command = 'cp %p .../archive/%f'
restore_command = 'ux_standby -d -s 2 -t /tmp/uxsql.trigger.5442 .../archive %f %p %r 2>>standby.log'
recovery_end_command = 'rm -f /tmp/uxsql.trigger.5442'

因此存档目录物理上位于备用服务器上,因此archive_command通过NFS访问它,但文件是备用服务器的本地文件(支持使用ln)(启用ln)。这将:

  • 在standby.log中产生调试输出

  • 在检查下一个 WAL 文件的可用性之间睡眠 2 秒

  • 只有当一个名为/tmp/uxsql.trigger.5442的触发文件出现时停止等待并且根据其内容执行故障转移

  • 在恢复结束时移除触发文件

  • 从归档目录中移除不再需要的文件

在 Windows 上,你可能会用:

archive_command = 'copy %p ...\\archive\\%f'
restore_command = 'ux_standby -d -s 5 -t C:\uxsql.trigger.5442 ...\archive %f %p %r 2>>standby.log'
recovery_end_command = 'del C:\uxsql.trigger.5442'

注意archive_command中的反斜线需要被双写,但是在restore_command或者recovery_end_command中不需要。这将:

  • 使用copy命令恢复来自归档的 WAL 文件

  • 在standby.log中产生调试输出

  • 在检查下一个 WAL 文件的可用性之间睡眠 5 秒

  • 只有当一个名为C:\uxsql.trigger.5442的触发文件出现时停止等待并且根据其内容执行故障转移

  • 在恢复结束时移除触发文件

  • 从归档目录中移除不再需要的文件

Windows 上的copy命令在文件被完全拷贝之前就会设置最终的文件尺寸,这通常会迷惑ux_standby。因此一旦看到正确的文件尺寸,ux_standby会等待sleeptime秒。GNUWin32 的cp只会在文件拷贝完成后设置文件尺寸。

由于 Windows 的例子在两端都使用copy,一个或者两个服务器可能通过网络访问归档目录。


12.ux_test_fsync

ux_test_fsync — 确定在特定系统上最快的 wal_sync_method 以及提供诊断信息

概要

ux_test_fsync [option...]

描述

ux_test_fsync 旨在为您提供在特定系统上最快的wal_sync_method的合理想法,并在发现 I/O 问题时提供诊断信息。但是,ux_test_fsync显示的差异可能不会对实际数据库吞吐量产生任何显着影响,特别是因为许多数据库服务器的写入日志不受速度限制。ux_test_fsync报告每个 wal_sync_method 的平均文件同步操作时间(以微秒为单位),这也可用于通知优化commit_delay的值的努力。

选项

ux_test_fsync 接受以下命令行选项:

-f
--filename
指定要写入测试数据的文件名。此文件应位于与 ux_wal 目录相同的文件系统中或将要放置在其中。(ux_wal 包含 WAL文件。) 默认情况下,文件名为当前目录中的 ux_test_fsync.out

-s
--secs-per-test
指定每个测试的秒数。每个测试的时间越长,测试的准确性就越高,但运行时间就越长。默认值为 5 秒,这使程序可以在不到 2 分钟内完成。

-V
--version
打印ux_test_fsync的版本并退出。

-?
--help
显示关于ux_test_fsync命令行参数的帮助信息,并退出。

环境变量

环境变量UX_COLOR指定是否在诊断消息中使用颜色。可能的值为alwaysautonever

另请参阅

uxdb


13.ux_test_timing

ux_test_timing — 测量时间开销

概要

ux_test_timing [option...]

描述

ux_test_timing 是一个用于测量系统时间开销并确认系统时间不会后退的工具。 收集时间数据较慢的系统可能会导致不太准确的EXPLAIN ANALYZE 结果。

选项

ux_test_timing 接受以下命令行选项:

-d duration
--duration=duration
指定测试持续时间(以秒为单位)。较长的持续时间会略微提高准确性,并更有可能发现系统时钟后退的问题。默认测试持续时间为 3 秒。

-V
--version
打印 ux_test_timing 版本并退出。

-?
--help
显示有关 ux_test_timing 命令行参数的帮助信息,并退出。

用法

  • 解释结果

    良好的结果将显示大多数(>90%)单个计时调用的时间小于一微秒。每个循环的平均开销将更低,低于 100 纳秒。这个例子来自使用 TSC时钟源的 Intel i7-860 系统,显示出色的性能:

    测试时间开销为 3 秒。
    包括开销的每个循环时间:35.96 纳秒
    计时持续时间的直方图:
    < 微秒   % 总数      计数
    1     96.40465   80435604
    2      3.59518    2999652
    4      0.00015        126
    8      0.00002         13
    16      0.00000          2
    

    请注意,每个循环时间和直方图使用的单位不同。循环可以具有几纳秒(ns)的分辨率,而单个计时调用只能分辨到一微秒(us)。

  • 测量执行器时间开销

    当查询执行器运行使用EXPLAIN ANALYZE的语句时,会对每个操作进行计时,并显示摘要。可以通过使用uxsql程序计算行数来检查系统的开销:

    CREATE TABLE t AS SELECT * FROM generate_series(1,100000);
    \timing
    SELECT COUNT(*) FROM t;
    EXPLAIN ANALYZE SELECT COUNT(*) FROM t;
    

    i7-860系统测量了计数查询需要9.8毫秒,而EXPLAIN ANALYZE版本需要16.6毫秒,每个版本都处理了超过100,000行。这6.8毫秒的差异意味着每行的计时开销为68纳秒,大约是ux_test_timing估计的两倍。即使是相对较小的开销也使完全计时的计数语句需要花费近70%的时间。在更大的查询中,计时开销将不太成问题。

  • 更改时间源

    在一些新的Linux系统上,可以随时更改用于收集计时数据的时钟源。第二个示例显示了在相同的系统上切换到较慢的acpi_pm时间源可能导致的减速:

    # cat /sys/devices/system/clocksource/clocksource0/available_clocksource
    tsc hpet acpi_pm
    # echo acpi_pm > /sys/devices/system/clocksource/clocksource0/current_clocksource
    # ux_test_timing
    Per loop time including overhead: 722.92 ns
    Histogram of timing durations:
    < us   % of total      count
    1     27.84870    1155682
    2     72.05956    2990371
    4      0.07810       3241
    8      0.01357        563
    16      0.00007          3
    

    在此配置中,上述示例的EXPLAIN ANALYZE需要115.9毫秒。这是1061纳秒的计时开销,再次是此实用程序直接测量的小倍数。这么多的计时开销意味着实际查询本身只占用了很小一部分的时间,大部分时间都被消耗在开销中。在此配置中,任何涉及许多计时操作的EXPLAIN ANALYZE总计都将因计时开销而显着膨胀。

    FreeBSD也允许在运行时更改时间源,并记录有关启动期间所选定的计时器的信息:

    # dmesg | grep "Timecounter"
    Timecounter "ACPI-fast" frequency 3579545 Hz quality 900
    Timecounter "i8254" frequency 1193182 Hz quality 0
    Timecounters tick every 10.000 msec
    Timecounter "TSC" frequency 2531787134 Hz quality 800
    # sysctl kern.timecounter.hardware=TSC
    kern.timecounter.hardware: ACPI-fast -> TSC
    

    其他系统可能只允许在启动时设置时间源。在旧的Linux系统上,“clock”内核设置是进行此类更改的唯一方法。即使在一些较新的系统上,您看到的时钟源的唯一选项也是“jiffies”。Jiffies是旧的Linux软件时钟实现,当它由足够快的计时硬件支持时,可以具有良好的分辨率,如此示例所示:

    $ cat /sys/devices/system/clocksource/clocksource0/available_clocksource
    jiffies
    $ dmesg | grep time.c
    time.c: Using 3.579545 MHz WALL PM GTOD PIT/TSC timer.
    time.c: Detected 2400.153 MHz processor.
    $ ux_test_timing
    Testing timing overhead for 3 seconds.
    Per timing duration including loop overhead: 97.75 ns
    Histogram of timing durations:
    < us   % of total      count
    1     90.23734   27694571
    2      9.75277    2993204
    4      0.00981       3010
    8      0.00007         22
    16      0.00000          1
    32      0.00000          1
    
  • 时钟硬件和时间精度

    通常使用具有不同精度级别的硬件时钟在计算机上收集准确的时间信息。对于某些硬件,操作系统可以将系统时钟时间几乎直接传递给程序。系统时钟也可以从提供定时中断的芯片派生出来,定期在某个已知时间间隔内进行计时。在任何情况下,操作系统内核都提供了一个时钟源,隐藏了这些细节。但是,该时钟源的精度以及它可以多快地返回结果取决于底层硬件。

    不准确的时间记录可能导致系统不稳定。非常小心地测试对时钟源的任何更改。操作系统默认设置有时会优先考虑可靠性而不是最佳精度。如果您正在使用虚拟机,请查看与其兼容的推荐时间源。虚拟硬件在模拟计时器时面临额外的困难,通常供应商建议每个操作系统设置。

    时间戳计数器(TSC)时钟源是当前一代CPU上可用的最准确的时钟源。当操作系统支持TSC时钟且TSC时钟可靠时,它是跟踪系统时间的首选方式。有几种方法可以使TSC无法提供准确的计时源,从而使其不可靠。旧系统可能具有基于CPU温度变化的TSC时钟,使其无法用于计时。尝试在某些旧的多核CPU上使用TSC可能会给出在多个核之间不一致的报告时间。这可能导致时间倒流,这个程序会检查这个问题。即使是最新的系统,也可能无法通过非常激进的节能配置提供准确的TSC计时。

    较新的操作系统可能会检查已知的TSC问题,并在发现这些问题时切换到更慢、更稳定的时钟源。如果您的系统支持TSC时间,但不是默认设置,那么可能有很好的理由禁用它。有些操作系统可能无法正确检测所有可能的问题,或者允许在已知不准确的情况下使用TSC。

    高精度事件计时器(HPET)是可用时的首选计时器,而TSC不准确。计时器芯片本身是可编程的,可允许高达100纳秒的分辨率,但您的系统时钟可能无法看到那么高的精度。

    高级配置和电源接口(ACPI)提供了一个电源管理(PM)计时器,Linux将其称为acpi_pm。从acpi_pm派生的时钟将提供最多300纳秒的分辨率。

    用于旧PC硬件的计时器包括8254可编程间隔计时器(PIT)、实时时钟(RTC)、高级可编程中断控制器(APIC)计时器和Cyclone计时器。这些计时器的分辨率为毫秒级。


14.ux_upgrade

ux_upgrade — 升级 UXDB 服务器实例

概要

ux_upgrade -b oldbindir [-B newbindir] -d oldconfigdir -D newconfigdir [option...--conf-upgrade

描述

ux_upgrade(之前被称为ux_migrator) 允许存储在UXDB数据文件中的数据被升级到一个更高的UXDB主版本而无需进行主版本升级通常所需的数据转储/重载。

主UXDB发行通常会加入新的特性,这些新特性常常会更改系统表的布局,但是内部数据存储格式很少会改变。ux_upgrade使用这一事实来通过创建新系统表并且重用旧的用户数据文件来执行快速升级。如果一个未来的主发行没有把数据存储格式改得让旧数据格式不可读取,这类升级就用不上ux_upgrade(将尝试避免这类情况)。

ux_upgrade会尽力(例如通过检查兼容的编译时设置)确保新旧集群在二进制上也是兼容的,包括32/64位二进制。保持外部模块也是二进制兼容的也很重要,不过ux_upgrade无法检查这一点。

uxsinodb.conf,uxsinodb.auto.conf配置文件中需要升级的参数按照策略升级;ux_hba.conf文件直接复制。

选项

ux_upgrade接受下列命令行参数:

-b bindir
--old-bindir=bindir
旧的UXDB可执行文件目录; 环境变量UXBINOLD

-B bindir
--new-bindir=bindir
新的UXDB可执行文件目录; 环境变量UXBINNEW

-c
--check
只检查集群,不更改任何数据。

-d configdir
--old-datadir=configdir
旧的集群数据目录;环境变量UXDATAOLD

-D configdir
--new-datadir=configdir
新的集群数据目录;环境变量UXDATANEW

-j njobs
--jobs=njobs
要同时使用的进程或线程数。

-k
--link
使用硬链接来代替将文件拷贝到新集群。

-N
--no-sync
默认情况下,ux_upgrade将等待升级集群的所有文件安全写入磁盘。此选项会导致ux_upgrade不等待就返回,这更快,但意味着后续操作系统崩溃可能会导致数据目录损坏。通常,此选项对于测试很有用,但不应在生产安装中使用。

-o options
--old-options options
直接传送给旧 uxdb命令的选项,多个选项可以追加在后面。

-O options
--new-options options
直接传送给新 uxdb命令的选项,多个选项可以追加在后面。

-p port
--old-port=port
旧的集群端口号;环境变量UXPORTOLD

-P port
--new-port=port
新集群端口号;环境变量UXPORTNEW

-r
--retain
保留旧集群的数据目录。

-s
--socketdir=dir
Unix域套接字目录;环境变量UXSOCKETDIR

-U username
--username=username
连接到数据库时使用的用户名。

-v
--verbose
输出详细信息。

-V
--version
输出版本信息,然后退出。

--help
显示帮助信息,然后退出。

-r
--retain
即使成功完成后也保留SQL和日志文件。

-s dir
--socketdir=dir
升级期间用于uxmaster套接字的目录;默认为当前工作目录;环境变量UXSOCKETDIR

-U username
--username=username
集群的安装用户名;环境变量UXUSER

-v
--verbose
启用详细的内部日志记录。

-V
--version
显示版本信息,然后退出。

--clone
使用高效的文件克隆(在某些系统上也称为“reflinks”)而不是将文件复制到新集群。这可以实现数据文件的几乎瞬间复制,提供-k/--link的速度优势,同时保持旧集群不受影响。

文件克隆仅受某些操作系统和文件系统支持。如果选择了它但不支持它,则ux_upgrade运行将出错。目前,它在Linux(内核4.5或更高版本)上支持Btrfs和XFS(在支持reflink的文件系统上创建的文件系统)以及在macOS上支持APFS。

-?
--help
显示帮助,然后退出。

用法

使用ux_upgrade执行升级的步骤如下:

  1. 可选地移动旧集群

如果您正在使用特定于版本的安装目录,例如/opt/uxdb/uxdbinstall,则不需要移动旧集群。所有图形安装程序都使用特定于版本的安装目录。

如果您的安装目录不是特定于版本的,例如/usr/local/uxsql,则需要移动当前的UXDB安装目录,以便它不会干扰新的UXDB安装。一旦当前的UXDB服务器关闭,就可以安全地重命名UXDB安装目录;假设旧目录为/usr/local/uxsql,则可以执行以下操作:

mv /usr/local/uxsql /usr/local/uxsql.old

来重命名目录。

  1. 安装新的版本

安装新服务器的二进制文件和支持文件。ux_upgrade 会被包含在默认的安装中。

  1. 初始化新的UXDB集群

    使用initdb初始化新集群。这里也要使用与 旧集群相兼容的initdb标志。许多预编译的 安装程序会自动做这个步骤。这里没有必要启动新集群。

    如果数据库中安装了uxmpp/ux_cron/ux_job插件,需要修改新集群的配置文件的shared_preload_libraries,添加该插件。

    注解
    如果升级过程中出现有插件可升级的提醒,会在当前目录下给出update_extensions.sql的脚本,可以在升级后的新库根据该脚本提示语句进行插件升级。

    如果使用了uxmpp插件,需要在旧库中执行SELECT uxmpp_prepare_ux_upgrade();来进行元数据备份以及升级准备操作,如果使用的数据库版本号为2.1.2.2前的版本要升级到之后的版本,还需要在旧库进行如下操作。

    alter extension uxmpp drop aggregate ARRAY_CAT_AGG(ANYARRAY);
    drop aggregate ARRAY_CAT_AGG(ANYARRAY);
    

    在升级后的新库中需要执行如下命令。

    SELECT uxmpp_finish_ux_upgrade();
    alter extension uxmpp update;
    

    来完成uxmpp插件的升级。(可以使用update_extensions.sql来完成对新库的操作)。

    如果使用了uxgis插件,需要在升级后的新库中执行如下命令。

    SELECT uxgis_extensions_upgrade();
    

    来完成uxgis插件的升级(可以使用update_extensions.sql来完成对新库的操作)。

  2. 安装自定义的共享对象文件

    把旧集群使用的所有自定义共享对象文件(或者DLL)安装到新集群中, 例如uxcrypto.so,不管它们是来自于 contrib还是某些其他源码。不要安装模式定义 (例如CREATE EXTENSION uxcrypto),因为这些将会从旧集群升级得到。 还有,任何自定义的全文搜索文件(词典、同义词、辞典、停用词)也必须 被复制到新集群中。

  3. 复制自定义全文搜索文件

    将任何自定义全文搜索文件(字典、同义词、同义词表、停止单词)从旧集群复制到新集群。

  4. 调整认证

    ux_upgrade将会多次连接到旧服务器和新服务器,因此 你可能想要在ux_hba.conf中把认证设置成 peer或者使用一个~/.uxpass文件。

  5. 停止两个服务器

    确认两个数据库服务器都被停止使用,例如在 Unix 上可以:

    ux_ctl -D /opt/UXDB/test stop
    ux_ctl -D /opt/UXDB/test1 stop
    

    流复制和日志传送备用服务器可以一直运行到后面的步骤。

  6. 为升级备用服务器做准备

    如果正在使用小节步骤9中给出的方法升级备用服务器,请通过对旧的主集群和备用集群运行ux_controldata来验证旧的备用服务器是否被占用。验证“最新检查点位置”的值在所有集群中是否匹配。(如果在旧主服务器之前关闭旧备用服务器,将会出现不匹配)。此外,在新的主集群上的uxsinodb.conf文件中把wal_level改为replica。

  7. 运行 ux_upgrade

    始终运行新服务器的 ux_upgrade 二进制文件,而不是旧服务器的。 ux_upgrade需要指定旧和新集群的数据和可执行文件(bin)目录。您还可以指定用户和端口值,以及是否要将数据文件链接或克隆而不是默认的复制行为。

    如果使用链接模式,则升级速度将更快(无需文件复制)并且使用的磁盘空间更少,但是在升级后启动新集群后,您将无法访问旧集群。链接模式还要求旧和新集群数据目录在同一文件系统中。(表空间和 ux_wal 可以在不同的文件系统上。)克隆模式提供了相同的速度和磁盘空间优势,但是在启动新集群后不会导致旧集群无法使用。克隆模式还要求旧和新数据目录在同一文件系统中。此模式仅适用于某些操作系统和文件系统。

    --jobs 选项允许使用多个 CPU 核心进行文件复制/链接以及并行转储和还原数据库架构;一个好的起点是 CPU核心和表空间的最大值。此选项可以大大减少在多处理器机器上运行的多数据库服务器升级的时间。

    对于 Windows 用户,您必须登录管理员帐户,然后以 uxdb 用户身份启动 shell 并设置正确的路径:

    RUNAS
    /USER:uxdb "CMD.EXE" SET PATH=%PATH%;C:\\Program Files\\UXsinoDB\\15\\bin; 
    

    然后使用带引号的目录运行 ux_upgrade,例如:

    ux_upgrade.exe 
       --old-datadir "C:/Program Files/UXsinoDB/9.6/data"
       --new-datadir "C:/Program Files/UXsinoDB/15/data" 
       --old-bindir "C:/Program Files/UXsinoDB/9.6/bin" 
       --new-bindir "C:/Program Files/UXsinoDB/15/bin" 
    

    一旦启动,ux_upgrade 将验证两个集群是否兼容,然后进行升级。您可以使用ux_upgrade --check 仅执行检查,即使旧服务器仍在运行。 ux_upgrade --check 还将概述升级后需要进行的任何手动调整。如果您将使用链接或克隆模式,则应使用选项 --link--clone--check 以启用特定于模式的检查。 ux_upgrade 需要在当前目录中具有写入权限。

    显然,在升级期间没有人应访问集群。 ux_upgrade 默认情况下在端口 50432 上运行服务器,以避免意外的客户端连接。在进行升级时,您可以为两个集群使用相同的端口号,因为旧集群和新集群不会同时运行。但是,在检查旧运行服务器时,旧和新端口号必须不同。

    如果在还原数据库架构时发生错误,则 ux_upgrade 将退出,您将不得不按照下面的 回滚到旧集群恢复到旧集群。要再次尝试 ux_upgrade,您需要修改旧集群,以便 ux_upgrade 架构还原成功。如果问题是contrib 模块,则可能需要在升级后从旧集群中卸载 contrib模块,并在新集群中安装它,假设该模块未用于存储用户数据。

    使用ux_upgrade工具对安全数据库集群升级时,需要注意以下几点:

    a. 安全模式数据库集群支持2115D升级至2123,2115E升级至2123, 2122升级至2123。

    b. 安全模式数据库集群升级需要指定--wallet-key参数(-K),新旧集群的wallet钱包必须相同。具体可详见《优炫数据库管理系统安全功能手册》“数据保密性”章节中“列加密”小节的“钱包”。

    c. 安全模式数据库集群升级不支持全库加密和带强访功能集群。

    d. 安全模式数据库集群升级需指定用户为uxsmo,具体可详见《优炫数据库管理系统安全功能手册》“三权分立”章节。

    语法示例

    ./ux_upgrade -d /dev/uxdbinstall_2122/dbsql/bin/data/ -D /home/uxdb/uxdbinstall/dbsql/bin/data/ -b /dev/uxdbinstall_2122/dbsql/bin -B /home/uxdb/uxdbinstall/dbsql/bin --wallet-key='123456'  -U uxsmo 
    

    e. 参数升级

    当前的配置参数分为需要升级的参数和不需要升级的参数。不需要升级的参数不做升级处理,但是输出到命令行并记录在ux_upgrade_conf.log日志中。未提及的参数不做升级处理。

    • 默认升级策略:旧版本的参数如果在新版本中该参数被注释,复制到新版本的配置文件。相关参数有:autovacuum_work_mem、default_statistics_target、effective_cache_size、effective_io_concurrency、hot_standby、log_connections、log_destination、log_disconnections、log_filename、log_min_duration_statement、log_rotation_age、log_rotation_size、log_statement、log_truncate_on_rotation、logging_collector、logical_decoding_work_mem、maintenance_work_mem、max_parallel_maintenance_workers、 max_parallel_workers、max_parallel_workers_per_gather、max_wal_senders、max_wal_size、max_worker_processes、min_wal_size、primary_conninfo、random_page_cost、shared_preload_libraries、wal_buffers、wal_level、 wal_log_hints、 work_mem

    • 指定升级策略:按照表格所示方案进行升级。

      指定升级策略

      参数名 升级策略
      checkpoint_completion_target 原本设置和默认值相同,升级之后则和新的默认值相同。否则使用用户设置值。
      max_connections 使用原本的参数。
      shared_buffers 原本设置和默认值相同,升级之后则和新的默认值相同。否则使用用户设置值。
      wal_keep_size 如果新配置文件中有此参数,计算新值与旧值相同则跳过,否则写入新配置文件。如果新配置文件中没有此参数,则计算新值并写入新配置文件。

    对于uxsinodb.conf,uxsinodb.auto_conf配置文件中需要升级的参数按照策略升级;ux_hba.conf文件直接复制。

    版本升级支持:2115D,2115E,2122,2123,2124A版本均升级到2124A,安全模式仅测试2115D升到2123和2124A。

  8. 升级流复制和日志传送备用服务器

  如果您使用了链接模式,并且有流复制或日志传送备用服务器,则可以按照以下步骤快速升级它们。您不会在备用服务器上运行ux_upgrade,而是在主服务器上运行rsync。现在不要启动任何服务器。

  如果您没有使用链接模式,没有或不想使用rsync,或者想要更简单的解决方案,则跳过本节中的说明,并在ux_upgrade完成并新的主服务器运行后重新创建备用服务器。

  如果是使用ux_basebackup搭建的流复制集群。需要先升级主机,再初始化一个备机,重新通过ux_basebackup的方式建立流复制关系。

  a. **在备用服务器上安装新的UXsinoDB二进制文件**

  确保在所有备用服务器上安装了新的二进制文件和支持文件。

  b. **确保新的备用数据目录不存在**

  确保新的备用数据目录不存在或为空。如果运行了initdb,请删除备用服务器的新数据目录。

  c. **安装扩展共享对象文件**

  在新的备用服务器上安装与新主集群中安装的相同的扩展共享对象文件。

  d. **停止备用服务器**

  如果备用服务器仍在运行,请使用上述说明停止它们。

  e. **保存配置文件**

  保存旧备用服务器配置目录中需要保留的任何配置文件,例如`uxsinodb.conf`(以及任何包含它的文件)、`uxsinodb.auto.conf`、`ux_hba.conf`,因为这些文件将在下一步中被覆盖或删除。

  f. **运行rsync**

  使用链接模式时,可以使用rsync快速升级备用服务器。为此,请从主服务器上的一个目录中,该目录位于旧和新数据库集群目录之上,在每个备用服务器上运行以下命令:

  ``` 
  rsync --archive --delete --hard-links --size-only --no-inc-recursive old_cluster new_cluster remote_dir
  ```

  其中`old_cluster`和`new_cluster`相对于主服务器上的当前目录,`remote_dir`在备用服务器上旧和新集群目录之上。主服务器和备用服务器上指定目录下的目录结构必须匹配。有关指定远程目录的详细信息,请参阅rsync手册页,例如:

  ``` 
  rsync --archive --delete --hard-links --size-only --no-inc-recursive /opt/UXsinoDB/9.5 \
  /opt/UXsinoDB/9.6 standby.example.com:/opt/UXsinoDB
  ```

  您可以使用rsync的`--dry-run`选项验证命令将执行的操作。虽然必须在至少一个备用服务器上运行rsync,但可以在升级后的备用服务器上运行rsync。待机升级其他待机,只要升级的待机尚未启动。

  这样做的作用是记录由 ux_upgrade的链接模式创建的连接旧集群和新集群上的文件的链接,然后在待机的旧集群中找到匹配的文件,并在待机的新集群中为它们创建链接。在主服务器上没有链接的文件将从主服务器复制到待机服务器。(它们通常很小。)这提供了快速的待机升级。不幸的是,rsync会不必要地复制与临时和未记录表相关的文件,因为这些文件通常不存在于待机服务器上。

  如果您有表空间,则需要为每个表空间目录运行类似的 rsync 命令,例如: 
  ```
  rsync --archive --delete --hard-links --size-only --no-inc-recursive /vol1/ux_tblsp/ux_test_201710051 \
  /vol1/ux_tblsp/ux_test1_201808131 standby.example.com:/vol1/ux_tblsp
  ```
  如果您已将 ux_wal重定位到数据目录之外,则还必须在这些目录上运行 rsync。

  g. **配置流复制和日志传送待机服务器**

  配置服务器以进行日志传送。(您不需要运行 ux_backup_start() 和 ux_backup_stop()或进行文件系统备份,因为待机仍与主服务器同步。)不会复制复制插槽,必须重新创建。
  1. 恢复 ux_hba.conf

    如果您修改了 ux_hba.conf,请恢复其原始设置。可能还需要调整新集群中的其他配置文件,例如uxsinodb.conf(以及任何包含它的文件)、uxsinodb.auto.conf。

  2. 启动新服务器

现在可以安全地启动新服务器,然后是任何 rsync 备用服务器。

  1. 升级后处理

    如果需要任何升级后处理,ux_upgrade将在完成时发出警告。它还将生成必须由管理员运行的脚本文件。脚本文件将连接需要升级后处理的每个数据库。每个脚本都应使用以下方式运行:

    uxsql --username=uxdb --file=script.sql uxdb
    

    脚本可以以任何顺序运行,并且在运行后可以删除。

    注意
    通常情况下,在重建脚本运行完成之前访问引用的表是不安全的;这样做可能会产生不正确的结果或性能不佳。可以立即访问未在重建脚本中引用的表。

  2. 定时任务插件升级

    如果有以下信息出现:

    Your installation contains the "ux_cron" extension.       If you have active
    scheduled tasks running , and you need to start the database on a port different
    from the old cluster, please execute this function after the upgrade to modify
    the port number bound to the scheduled tasks:
             SELECT cron.alter_job_port(jobid, port);
    

    说明旧数据库中含有ux_cron插件,如果插件中含有需要继续的定时任务,且后续启动新集群的时候需要使用不同于旧集群的端口号,需要继续执行定时任务,则需要在新集群中执行命令:

    SELECT cron.alter_job_port(jobid, port);
    

    其中,jobid为cron.job表中查询到对应任务id,port为当前端口号。

  3. 统计信息

    由于优化器统计信息不会被传输,因此您将被指示在升级结束时运行一个命令来重新生成该信息。您可能需要设置连接参数以匹配新集群。

  4. 删除旧集群

    一旦您对升级感到满意,就可以通过运行 ux_upgrade完成时提到的脚本来删除旧集群的数据目录。(如果您在旧数据目录中有用户定义的表空间,则无法自动删除。)您还可以删除旧的安装目录(例如bin,share)。

  1. 回滚到旧集群

    如果在运行 ux_upgrade 后,您希望回滚到旧的集群,有几个选项:

    • 如果使用了 --check 选项,则旧集群未被修改;可以重新启动。

    • 如果未使用 --link 选项,则旧集群未被修改;可以重新启动。

    • 如果使用了 --link 选项,则数据文件可能在旧集群和新集群之间共享:

    • 如果在链接开始之前 ux_upgrade 中止,则旧集群未被修改;可以重新启动。

    • 如果您未启动新集群,则旧集群未被修改,除了在链接开始时,会在 $UXDATA/global/ux_control上添加一个 .old 后缀。要重用旧集群,请从 $UXDATA/global/ux_control中删除 .old 后缀;然后可以重新启动旧集群。

    • 如果您启动了新集群,则它已经写入了共享文件,使用旧集群是不安全的。在这种情况下,需要从备份中恢复旧集群。

注解

ux_upgrade 创建各种工作文件,例如模式转储,存储在新集群的 ux_upgrade_output.d中。每次运行都会创建一个新的子目录,以 ISO 8601格式的时间戳命名(%Y%m%dT%H%M%S),其中存储了所有生成的文件。如果 ux_upgrade成功完成,则会自动删除 ux_upgrade_output.d 及其包含的文件;但如果出现问题,则那里的文件可能提供有用的调试信息。

ux_upgrade 在旧数据目录和新数据目录中启动短暂的 uxmaster。默认情况下,用于与这些 uxmaster 通信的临时Unix 套接字文件在当前工作目录中创建。在某些情况下,当前目录的路径名可能太长而无法成为有效的套接字名称。在这种情况下,您可以使用 -s选项将套接字文件放在某个路径名较短的目录中。出于安全考虑,请确保该目录不可读也不可写给其他用户。(Windows 不支持此功能。)

如果任何失败、重建和重建索引的情况影响到您的安装,则 ux_upgrade将报告所有这些情况;自动生成用于重建表和索引的升级后脚本。如果您正在尝试自动升级多个集群,则应该发现具有相同数据库模式的集群需要所有集群升级的相同升级后步骤;这是因为升级后的步骤基于数据库模式而不是用户数据。

为了进行部署测试,请创建旧集群的仅模式副本,插入虚拟数据,然后升级该副本。

ux_upgrade 不支持升级包含使用这些 reg* OID 引用系统数据类型的表列的数据库:

regcollation
regconfig
regdictionary
regnamespace
regoper
regoperator
regproc
regprocedure

regclassregroleregtype可以升级。)

如果您想使用链接模式,并且不希望在启动新集群时修改旧集群,请考虑使用克隆模式。如果不可用,请复制旧集群并在链接模式下升级。要创建旧集群的有效副本,请使用rsync在服务器运行时创建脏副本,然后关闭旧服务器并再次运行rsync--checksum以更新副本以使其一致。(--checksum是必需的,因为rsync只有一秒钟的文件修改时间粒度。)您可能需要排除一些文件,例如uxmaster.pid。如果您的文件系统支持文件系统快照或写时复制文件副本,则可以使用该功能来备份旧集群和表空间,但必须同时创建快照和副本,或在数据库服务器关闭时创建。

另请参阅

initdbux_ctluxdb


15.ux_waldump

ux_waldump — 显示 UXsinoDB 数据库集群的预写日志的可读渲染

概要

ux_waldump [option...] [startseg [endseg]]

描述

ux_waldump 显示预写日志(WAL),主要用于调试。

此实用程序只能由安装服务器的用户运行,因为它需要对数据目录进行只读访问。

选项

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

startseg
从指定的日志段文件开始读取。这隐含地确定了要搜索文件的路径和要使用的时间线。

endseg
在读取指定的日志段文件后停止。

-b
--bkp-details
输出有关备份块的详细信息。

-B block
--block=block
仅显示修改给定块的记录。还必须提供关系与 --relation-R

-d
--display-enc
打印每条WAL记录的加密状态。

-e end
--end=end
停止读取指定的 WAL 位置,而不是读取日志流的末尾。

-f
--follow
在到达有效WAL的末尾后,每秒轮询一次以查看是否有新的WAL出现。ux_waldump不支持‘\’作为路径分隔符,支持‘/’为路径分隔符。

-F fork
--fork=fork
如果提供了此选项,则仅显示修改给定分支中块的记录。有效值为main表示主分支,fsm表示空闲空间图,vm表示可见性图,init表示init分支。

-k
--key-path=PATH
指定wal加密参数文件路径,wal加密参数文件请参见《优炫数据库管理系统安全功能手册》“数据保密性”章节中的“ux_waldump解析加密wal日志”的“导出WAL加密信息”小节。

-n limit
--limit=limit
显示指定数量的记录,然后停止。

-p path
--path=path
指定要搜索日志段文件的目录或包含此类文件的ux_wal子目录的目录。默认情况下,在当前目录、当前目录的ux_wal子目录和UXDATAux_wal子目录中搜索。

-q
--quiet
除了错误之外,不要打印任何输出。当您想知道一系列WAL记录是否可以成功解析但不关心记录内容时,此选项可能很有用。

-r rmgr
--rmgr=rmgr
仅显示由指定资源管理器生成的记录。您可以多次指定该选项以选择多个资源管理器。如果将名称传递为list,则打印有效资源管理器名称的列表,然后退出。

扩展程序可以定义自定义资源管理器,但ux_waldump不加载扩展模块,因此不会按名称识别自定义资源管理器。相反,您可以将自定义资源管理器指定为custom###,其中"###"是三位数字的资源管理器ID。以这种形式命名的名称始终被视为有效。

-R tblspc/db/rel
--relation=tblspc/db/rel
仅显示修改给定关系中块的记录。关系使用以斜杠分隔的表空间OID、数据库OID和relfilenode指定,例如1234/12345/12345。这是程序输出中使用的关系格式。

-s start
--start=start
要开始阅读的WAL位置。默认情况下,从找到的最早文件中找到第一个有效的日志记录开始阅读。

-t timeline
--timeline=timeline
从中读取日志记录的时间轴。默认情况下,如果指定了 startseg 的值,则使用该值;否则,默认值为 1。

-V
--version
打印 ux_waldump 的版本并退出。

-w
--fullpage
仅显示包含完整页面图像的记录。

-x xid
--xid=xid
仅显示标记有给定事务 ID 的记录。

-z
--stats[=record]
显示摘要统计信息(记录和完整页面图像的数量和大小),而不是单个记录。可选择每个记录而不是每个 rmgr 生成统计信息。

如果 ux_waldump 被信号SIGINT(Control+C)终止,则显示计算的统计信息摘要直到终止点。此操作不支持在Windows 上执行。

-?
--help
显示关于 ux_waldump 命令行参数的帮助信息,并退出。

环境变量

UXDATA
数据目录;另请参见 -p 选项。

UX_COLOR
指定是否在诊断消息中使用颜色。可能的值为 alwaysautonever

注解

当服务器正在运行时,可能会给出错误的结果。

仅显示指定的时间轴(或默认时间轴,如果未指定)。忽略其他时间轴中的记录。

ux_waldump 无法读取后缀为 .partial 的 WAL 文件。如果需要读取这些文件,则需要从文件名中删除 .partial后缀。


16.uxdb

uxdb — UXsinoDB 数据库服务器

概要

uxdb [option...]

描述

uxdb 是 UXsinoDB 数据库服务器。为了让客户端应用程序访问数据库,它会连接(通过网络或本地)到正在运行的uxdb 实例。然后,uxdb 实例会启动一个单独的服务器进程来处理连接。

一个 uxdb实例始终管理着恰好一个数据库集群的数据。数据库集群是存储在共同的文件系统位置(“数据区域”)的数据库集合。可以在系统上同时运行多个uxdb 实例,只要它们使用不同的数据区域和不同的通信端口(见下文)。当 uxdb启动时,它需要知道数据区域的位置。位置必须由 -D 选项或UXDATA 环境变量指定;没有默认值。通常,-DUXDATA 直接指向由initdb 创建的数据区域目录。

默认情况下,uxdb 在前台启动,并将日志消息打印到标准错误流中。在实际应用中,uxdb应该作为后台进程启动,可能在启动时。

uxdb 命令也可以在单用户模式下调用。这种模式的主要用途是在 initdb引导过程中使用。有时也会使用它来进行维护操作。用于调试或灾难恢复;请注意,运行单用户服务器并不真正适合调试服务器,因为不会发生实际的进程间通信和锁定。当从 shell中以单用户模式调用时,用户可以输入查询,结果将被打印到屏幕上,但以比终端用户更有用的形式呈现,适合开发人员使用。在单用户模式下,会话用户将被设置为ID 1 的用户,并授予该用户隐式超级用户权限。该用户实际上不必存在,因此单用户模式可用于手动恢复某些意外损坏的系统目录。

选项

uxdb接受以下命令行参数。您可以通过设置配置文件来节省大部分这些选项的输入。某些(安全的)选项也可以以应用程序相关的方式从连接的客户端中设置,仅适用于该会话。例如,如果设置了环境变量UXOPTIONS,则基于libuxsql的客户端将将该字符串传递给服务器,服务器将将其解释为uxdb命令行选项。

  • 通用选项

    -B nbuffers
    设置服务器进程使用的共享缓冲区数量。此参数的默认值由initdb自动选择。指定此选项等效于设置shared_buffers。

    -c name=value
    设置命名的运行时参数。大多数其他命令行选项实际上都是这种参数分配的简写形式。-c 可以多次出现以设置多个参数。

    -C name
    打印命名的运行时参数的值,然后退出。(有关详细信息,请参见上面的-c选项。)这将返回从uxsinodb.conf返回的值,该值由此调用中提供的任何参数修改。它不反映启动集群时提供的参数。

    这可以用于运行中的服务器的大多数参数。但是,对于某些运行时计算的参数(例如shared_memory_size、shared_memory_size_in_huge_pages和wal_segment_size,必须关闭服务器。

    此选项适用于与服务器实例交互的其他程序,例如ux_ctl,以查询配置参数值。用户面向的应用程序应改用SHOWux_settings视图。

    -d debug-level
    设置调试级别。设置值越高,将会向服务器日志中写入更多的调试输出。值的范围为1到5。也可以为特定会话传递-d 0,这将防止父uxdb进程的服务器日志级别传播到此会话。

    -D datadir
    指定数据库配置文件的文件系统位置。

    -e
    将默认日期样式设置为“欧洲”,即输入日期字段的DMY顺序。这还会导致在某些日期输出格式中,日期在月份之前打印。

    -F
    禁用fsync调用以提高性能,但在系统崩溃时可能会导致数据损坏。指定此选项等效于禁用fsync配置参数。在使用之前,请阅读详细文档!

    -h hostname
    指定uxdb用于从客户端应用程序监听TCP/IP连接的IP主机名或地址。该值也可以是逗号分隔的地址列表,或*以指定在所有可用接口上侦听。空值指定不侦听任何IP地址,在这种情况下,只能使用Unix域套接字连接到服务器。默认仅侦听localhost。指定此选项等效于设置listen_addresses配置参数。

    -i
    允许远程客户端通过TCP/IP(Internet域)连接。如果没有此选项,只接受本地连接。此选项等效于在uxsinodb.conf或通过-h中将listen_addresses设置为*

    此选项已弃用,因为它不允许访问listen_addresses的全部功能。通常最好直接设置listen_addresses

    -k directory
    指定Unix域套接字的目录,uxdb将在其中侦听来自客户端应用程序的连接。该值也可以是逗号分隔的目录列表。空值指定不侦听任何Unix域套接字,在这种情况下,只能使用TCP/IP套接字连接到服务器。默认值通常为/tmp,但可以在构建时更改。指定此选项等效于设置unix_socket_directories配置参数。

    -l
    使用 SSL 启用安全连接。 必须编译支持 SSL 才能使用此选项。

    -N max-connections
    设置此服务器将接受的客户端连接的最大数量。此参数的默认值由 initdb 自动选择。指定此选项等效于设置max_connections配置参数。

    -p port
    指定 uxdb 监听来自客户端应用程序的连接的 TCP/IP 端口或本地 Unix 域套接字文件扩展名。 默认值为 UXPORT环境变量的值,如果未设置 UXPORT,则默认值为编译期间确定的值(通常为 52025)。如果指定了除默认端口之外的端口,则所有客户端应用程序都必须使用命令行选项或UXPORT 指定相同的端口。

    -s
    在每个命令结束时打印时间信息和其他统计信息。 这对于基准测试或用于调整缓冲区数量非常有用。

    -S work-mem
    指定在重新排序到临时磁盘文件之前要使用的排序和哈希表的基本内存量。请参见work_mem 配置参数。

    -V
    --version
    打印 uxdb 版本并退出。

    --name=value
    设置命名的运行时参数;-c 的缩写形式。

    --describe-config
    此选项以制表符分隔的 COPY 格式转储服务器的内部配置变量、描述和默认值。 它主要用于管理工具。

    -?
    --help
    显示有关 uxdb 命令行参数的帮助信息,并退出。

  • 半内部选项

    这里描述的选项主要用于调试目的,在某些情况下可用于协助恢复严重损坏的数据库。在生产数据库设置中没有使用它们的理由。 它们仅列在此处供UXDB系统开发人员使用。

    -f { s | i | o | b | t | n | m | h }
    禁止使用特定的扫描和连接方法:si 分别禁用顺序扫描和索引扫描, obt分别禁用索引唯一扫描、位图索引扫描和 TID 扫描, 而 nmh 分别禁用嵌套循环、合并和哈希连接。

    顺序扫描和嵌套循环连接都不能完全禁用;-fs-fn选项只是在有其他可选方案时,鼓励优化器不使用这些计划类型。

    -n
    此选项用于调试导致服务器进程异常终止的问题。在这种情况下,通常的策略是通知所有其他服务器进程必须终止,然后重新初始化共享内存和信号量。这是因为错误的服务器进程在终止之前可能会破坏一些共享状态。此选项指定uxdb 不会重新初始化共享数据结构。然后,有知识的系统程序员可以使用调试器来检查共享内存和信号量状态。

    -O
    允许修改系统表的结构。这是由 initdb 使用的。

    -P
    在读取系统表时忽略系统索引,但在修改表时仍然更新索引。这在从损坏的系统索引中恢复时很有用。

    -t pa[rser] | pl[anner] | e[xecutor]
    为与每个主要系统模块相关的每个查询打印计时统计信息。此选项不能与 -s选项一起使用。

    -T
    此选项用于调试导致服务器进程异常终止的问题。在这种情况下,通常的策略是通知所有其他服务器进程必须终止,然后重新初始化共享内存和信号量。这是因为错误的服务器进程在终止之前可能会破坏一些共享状态。此选项指定uxdb 将通过发送信号 SIGSTOP停止所有其他服务器进程,但不会导致它们终止。这允许系统程序员手动收集所有服务器进程的核心转储。

    -v protocol
    指定要为特定会话使用的前端/后端协议版本号。此选项仅供内部使用。

    -W seconds
    在启动新的服务器进程后,在进行身份验证过程后会发生此延迟。这旨在为使用调试器附加到服务器进程提供机会。

  • 单用户模式选项

    以下选项仅适用于单用户模式(参见下面的单用户模式)。

    --single
    选择单用户模式。这必须是命令行上的第一个参数。

    database
    指定要访问的数据库的名称。这必须是命令行上的最后一个参数。如果省略,则默认为用户名。

    -E
    在执行命令之前将所有命令回显到标准输出。

    -j
    使用分号后跟两个换行符,而不是仅使用换行符,作为命令输入终止符。

    -r filename
    将所有服务器日志输出发送到 文件名 。此选项仅在作为命令行选项提供时才受到支持。

环境变量

UXCLIENTENCODING
客户端使用的默认字符编码。(客户端可以单独覆盖此设置。)此值也可以在配置文件中设置。

UXDATA
默认数据目录位置

UXDATESTYLE
DateStyle运行时参数的默认值。(使用此环境变量已被弃用。)

UXPORT
默认端口号(最好在配置文件中设置)

诊断

提到semgetshmget的故障消息可能表示您需要配置内核以提供足够的共享内存和信号量。您可以通过减少shared_buffers以减少UXsinoDB的共享内存消耗,或通过减少max_connections以减少信号量消耗来推迟重新配置内核。

建议另一个服务器已经在运行的故障消息应仔细检查,例如使用命令

$ ps ax | grep uxdb
或
$ ps -ef | grep uxdb

取决于您的系统。如果您确定没有冲突的服务器正在运行,则可以删除消息中提到的锁定文件,然后重试。

指示无法绑定到端口的故障消息可能表示该端口已被某些非UXsinoDB进程使用。如果您终止uxdb并立即使用相同的端口重新启动它,则也可能会出现此错误;在这种情况下,您必须等待几秒钟,直到操作系统关闭端口,然后再次尝试。最后,如果您指定的端口号被您的操作系统视为保留端口,则可能会出现此错误。例如,许多版本的Unix将端口号小于1024视为“受信任的”,只允许Unix超级用户访问它们。

注解

实用程序命令ux_ctl可用于安全、舒适地启动和关闭uxdb服务器。

如果可能的话,请不要使用SIGKILL来杀死主uxdb服务器。这样做将阻止uxdb在终止之前释放它所持有的系统资源(例如共享内存和信号量)。这可能会导致启动新的uxdb运行时出现问题。

要正常终止uxdb服务器,可以使用信号SIGTERMSIGINTSIGQUIT。第一个信号将等待所有客户端终止后再退出,第二个信号将强制断开所有客户端的连接,第三个信号将立即退出而没有适当的关闭,导致在重新启动时进行恢复运行。

SIGHUP信号将重新加载服务器配置文件。也可以将SIGHUP发送到单个服务器进程,但通常不明智。

要取消正在运行的查询,请向运行该命令的进程发送SIGINT信号。要干净地终止后端进程,请向该进程发送SIGTERM。有关这两个操作的SQL可调用等效项,请参见ux_cancel_backendux_terminate_backend

uxdb服务器使用SIGQUIT告诉下属服务器进程在没有正常清理的情况下终止。用户不应该使用此信号。向服务器进程发送SIGKILL也是不明智的——主uxdb进程将将其解释为崩溃,并在其标准崩溃恢复过程中强制所有后台进程退出。

缺陷

--选项在FreeBSD或OpenBSD上不起作用。请改用-c。这是受影响操作系统中的错误;如果这个问题没有解决,未来的UXsinoDB版本将提供解决方法。

单用户模式

要启动单用户模式服务器,请使用如下命令:

uxdb --single -D /usr/local/uxsql/data other-options my_database

使用-D提供正确的数据库目录路径,或确保环境变量UXDATA已设置。还要指定您要使用的特定数据库的名称。

通常,单用户模式服务器将换行符视为命令输入终止符;与uxsql中的分号不同,它没有关于分号的智能。要跨多行继续命令,必须在每个换行符前加上反斜杠,除了最后一个换行符。反斜杠和相邻的换行符都将从输入命令中删除。请注意,即使在字符串文字或注释中,这也会发生。

但是,如果使用-j命令行开关,则单个换行符不会终止命令输入;相反,序列分号-换行-换行。也就是输入一个分号,紧接着输入一个完全空白的行。反斜杠-换行在这种模式下不会被特殊处理。同样,在字符串文字或注释中出现这样的序列时,没有智能处理。

在任何输入模式下,如果您输入的分号不是紧接着或部分属于命令输入终止符,则被视为命令分隔符。当您输入命令输入终止符时,您输入的多个语句将作为单个事务执行。

要退出会话,请键入EOF(通常为Control+D)。如果您自上次命令输入终止符以来输入了任何文本,则EOF将被视为命令输入终止符,并且需要另一个EOF才能退出。

请注意,单用户模式服务器不提供复杂的行编辑功能(例如,没有命令历史记录)。单用户模式也不执行任何后台处理,例如自动检查点或复制。

示例

要用默认值在后台启动uxdb:

$ nohup uxdb >logfile 2>&1 </dev/null &

要用指定端口启动uxdb,例如 1234:

$ uxdb -p 1234

要使用uxsql连接到这个服务器,用-p选项指定这个端口:

$ uxsql -p 1234

或者设置环境变量UXPORT:

$ export UXPORT=1234
$ uxsql

命名运行时参数可以用这些形式之一设置:

$ uxdb -c work_mem=1234
$ uxdb --work-mem=1234

两种形式都覆盖uxsinodb.conf中可能存在的work_mem设置。请注意在参数名中的下划线在命令行可以写成下划线或连字符。除了用于短期的使用外,更好的习惯是编辑uxsinodb.conf中的设置, 而不是倚赖命令行开关来设置参数。

另请参阅

initdbux_ctl


17.uxmaster

uxmaster — UXsinoDB 数据库服务器

概要

uxmaster [option...]

描述

uxmasteruxdb 的一个弃用别名。

另请参阅

uxdb