1、gs_guc工具
gs_guc
是 华为GaussDB(或 openGauss)数据库提供的一个配置管理工具,主要用于对数据库实例的配置文件(如 postgresql.conf
、pg_hba.conf
等)进行动态或静态的参数修改、查看、校验等操作。它在集群或单机环境下帮助管理员高效管理数据库配置,尤其在分布式场景中能够自动同步配置到多个节点。
主要功能
(1)修改配置参数
支持动态修改(部分参数无需重启数据库即可生效)或静态修改(需要重启数据库)。
示例:调整内存参数 shared_buffers
,设置最大连接数 max_connections
。
(2)批量操作
在集群环境中,可同时对多个节点(如 Coordinator Node、Data Node)进行配置更新,避免手动逐个修改。
(3)配置文件校验
修改后自动检查配置语法是否正确,防止因错误配置导致数据库无法启动。
(4)安全规则管理
管理 pg_hba.conf
文件,配置客户端访问权限(如允许特定IP连接数据库)。
命令/子命令 | 核心参数 | 功能说明 | 示例 | 注意事项 |
---|---|---|---|---|
set | -Z (节点类型)、-N (主机名)、-I (实例名)、-D (数据目录)、-c (参数值) |
仅修改配置文件(如postgresql.conf ),需重启生效。 |
gs_guc set -Z coordinator -N all -I all -c “max_connections=1000” | 资源类参数(如内存、端口)必须通过set 修改后重启生效。 |
reload | -Z (节点类型)、-N (主机名)、-I (实例名)、-D (数据目录)、-c (参数值) |
修改配置文件并通知数据库重新加载,支持部分参数即时生效。 | gs_guc reload -Z datanode -N all -c “listen_addresses=‘*’” | 修改pg_hba.conf 后需重启生效,reload 可能不生效。 |
check | -Z (节点类型)、-N (主机名)、-I (实例名)、-c (参数值) |
验证参数配置一致性(如集群多节点参数是否同步)。 | gs_guc check -Z datanode -N all -c “shared_buffers” | 检查结果需结合日志gs_guc-current.log 分析。 |
encrypt | -K (明文密码)、-M (服务端/客户端)、-D (目录)、-U (OS用户) |
生成加密密码文件(如SSL证书密码存储)。 | gs_guc encrypt -K Gauss@123 -M server -D /data/dbpath | 密码需满足复杂度(至少含3类字符,长度8-1024),生成文件为server.key.cipher 和server.key.rand 。 |
修改pg_hba.conf | -h (认证规则)、-A (配置类型) |
配置客户端访问策略(如IP白名单)。 | gs_guc set -N all -I all -h “host all all 0.0.0.0/0 sha256” | -h 参数值需用双引号包裹,规则生效需重启数据库。 |
恢复默认值 | 无(通过删除自定义参数实现) | 移除自定义参数配置,还原为默认值。 | 手动删除配置文件中的参数行后执行gs_ctl reload 。 |
建议先备份配置文件再操作。 |
–help | 无 | 显示工具帮助信息。 | gs_guc --help | 输出包含所有子命令及参数说明。 |
–version | 无 | 显示工具版本信息。 | gs_guc --version | 用于兼容性检查或问题排查。 |
参数 | 参数说明 | 取值范围 |
---|---|---|
-c parameter=value | 要设定的GaussDB配置参数的名称 | parameter的取值为postgresql.conf中的所有参数 |
-A hba_parameter=value | 要设定的GaussDB pg_hba.conf配置参数的名称 | hba_parameter为local,ipv4,ipv6,replication中的一种,value值为需要设置的一整行配置项 |
-D --pgdata=DATADIR | 指定GaussDB数据文件的路径 | DATADIR必须使用正确的GaussDB数据文件的路径。 默认值:环境变量GAUSSDATA |
-K password | 指定需要加密的明文密码 | 符合密码复杂的要求 |
-M keymode=MODE | 设定该密码在数据库运行过程中,用于服务端(server)还是客户端(client)。说明:在使用ssl功能时,会涉及到服务端证书和私钥文件的加密密码和客户端证书和私钥文件的加密密码,在加密存储加密密码时,需要指定模式,否则默认是生成服务端的密码文件。 | server(缺省)client source |
-U --keyuser=USER | 指定要加密的明文密码隶属于哪个OS用户。说明:比如,GaussDB可以为每个用户配置不同的ssl证书和私钥文件,指定该选项,可以生成按用户名区分的密码文件。 | — |
-Z node-type | 实例类型。 | datanode |
-h host-auth-policy | 指定需要在“pg_hba.conf”增加的客户端认证策略。 | 附下 |
取值范围:
HOSTTYPE是必输参数,取值:
其中“local”是一个Unix域套接字,“host”是普通或SSL加密的TCP/IP套接字,“hostssl”是SSL加密的TCP/IP套接字,“hostnossl”是一个纯TCP/IP套接字。
authmehod-options是可选输入,取值:
2、一些文件说明
下面内容来自Opengauss官网
目前openGauss配置文件(“postgresql.conf”、“pg_hba.conf”)中的参数默认值都是单机的配置模式。应用程序可以通过调用gs_guc来设置适合自己的参数。
“gs_guc-current.log”
这个文件记录gs_guc产生的日志。
“gs_guc-年-月-日_HHMMSS.log”
当“gs_guc-current.log”文件大小满16M后,会根据当前时刻生成一个备份文件。
“server.key.cipher”,“server.key.rand”
使用gs_guc encrypt命令加密用户密码时,如果指定的-M的值为server,则会生成这两个文件。其中“server.key.cipher”存储用户密码的密文,“server.key.rand”存储的是加密因子。
“client.key.cipher”,“client.key.rand”
使用gs_guc encrypt命令加密用户密码时,如果指定的-M的值为client,则会生成这两个文件。其中“client.key.cipher”存储用户密码的密文,“client.key.rand”存储的是加密因子。
“datasource.key.cipher”,“datasource.key.rand”
使用gs_guc encrypt命令加密用户密码时,如果指定的-M的值为source,则会生成这两个文件。其中“datasource.key.cipher”存储用户密码的密文,“datasource.key.rand”存储的是加密因子。
“obsserver.key.cipher”,“obsserver.key.rand”
使用gs_guc generate命令加密输入的密码时,则会生成这两个文件。其中“obsserver.key.cipher”存储输入密码的密文,“obsserver.key.rand”存储的是加密因子。
3、配置客户端连接认证
ph_hba.conf是postgres数据库的连接认证配置的配置文件
配置文件中最重要的就是连接与认证的配置信息
这里借用一下别的博主文章的内容,解释一下配置文件里的一些参数的意思
TYPE | DATABASE | USER | ADDRESS | METHOD |
---|---|---|---|---|
类型,一般就host或local, local是仅对于本地socket连接 |
数据库名称,all就是全部,不限定 ,replication是从数据库 |
数据库用户名,all就 是全部,不限定 |
指定地址,0.0.0.0/0就是任意地址, 127.0.0.1/32,::1/128都是本地 |
trust或md5,trust就是信任, 连接时无需密码;md5就是需要密码,sha256也需要密码 |
local | all | all | ||
host | all | all | 127.0.0.1/32 | trust |
host | all | all | ::1/128 | trust |
local | replication | all | trust | |
host | replication | all | 127.0.0.1 | trust |
host | replication | all | ::1/128 | trust |
host | testdb | root | 127.0.0.1/32 | md5 |
host | all | jack | 192.168.29.1/32 | sha256 |
host | product_db | name1 | 0.0.0.0/0 | sha256 |
表格原文章
4、gsql(客户端连接数据库的连接工具)
参数 | 功能说明 | 示例 | 注意事项 |
---|---|---|---|
-c --command=COMMAND | 直接执行一条 SQL 命令后退出,适合脚本自动化 | gsql -c “SELECT version();” #查看数据库版本信息 |
|
-d, --dbname=DBNAME | 指定要连接的数据库名 | gsql -d mydb #连接名为mydb的数据库 |
默认:postgres |
-S, --single-line | 启用单行模式时,每条 SQL 命令以换行符(而非分号)作为结束符 | gsql -r -d postgres -S | 无需输入分号即可执行命令,适合逐行输入简单语句的场景 |
-R, --record-separator=STRING | 设置查询结果的记录(行)分隔符,默认是换行符(\n ) |
gsql -d mydb -R ‘###’ -c “SELECT id, name FROM users” | 通过此参数可自定义分隔符(如逗号、空字符等),便于输出结果适配其他工具解析 |
-r | 启用 libedit 库支持,提供命令行编辑和历史记录功能 | gsql -d postgres -r | 使用-r之后可以 方向键导航(上下翻历史命令) 行内编辑(修改已输入的命令) 自动补全(按 Tab 补全对象名) |
-f, --file=FILENAME | 执行指定文件中的 SQL 命令后退出,适合批量操作 | gsql -f /path/to/script.sql #执行指定路径下的sql语句 |
|
-l, --list | 列出当前服务器上所有可用的数据库,然后退出。 | gsql -l #列出当前服务器上所有数据库 |
|
-v, --set=NAME=VALUE | 设置 gsql 内部变量(如会话变量) |
#前提是已经在数据库中用有testtable表 gsql -r -v tb=testtable select * from :tb; |
|
-V, --version | 显示 gsql 的版本信息 |
gsql -V #查看gsql工具的版本 |
|
-X, --no-gsqlrc | 不读取用户配置文件(默认会读取 ~/.gsqlrc ) |
||
-1, --single-transaction | 将文件中的 SQL 作为一个事务执行(要么全部成功,要么回滚) | gsql -r -f init.sql -d postgres -1 #为数据库执行init.sql |
如果init.sql文件中的内容有错执行失败,则全部回滚,前提是有-1这个参数,若没有,则执行成功的会保存到数据库中,执行失败的语句报错 |
-a, --echo-all | 执行脚本时,回显所有输入内容(方便调试) | gsql -f 3.sql -a -1 -d postgres #执行3.sql并把执行语句 |
|
-e, --echo-queries | 回显发送到服务器的 SQL 命令(类似 -a ,但更简洁) |
gsql -f 3.sql -e -1 -d postgres | 和-a的区别的-a是会把3.sql的所有内容输出,包括注释,但是-e只会输出实际执行到数据库的命令,不包括注释 |
-E, --echo-hidden | 显示内部命令(如 \d 等元命令)实际生成的 SQL 语句 |
gsql -E -d postgres | 这条参数的意思就是,在使用这个参数进入数据库后,执行的一些opengauss数据库的一些元命令,opengauss就会把这些元命令实际执行的sql语句输出,并返回元命令执行结果 |
-k, --with-key=KEY | 解密加密文件时使用的密钥 | gs_dump -Fp --with-encryption=AES128 --with-key=MySecureKey@2025 -U omm -f backup.sql postgres gsql -d newdb -U omm -K MySecureKey@2025 -f backup.sql |
在使用这个参数时前提是,已经对备份文件进行加密,想要恢复备份时,使用此参数,不加密的备份不需要此参数 |
-L, --log-file=FILENAME | 将整个会话日志保存到指定文件 | gsql -r -L 1.log -d postgres | |
-o, --output=FILENAME | 将查询结果输出到文件或管道 | gsql -o result.txt -c ‘select * from stu;’ -d postgres | |
-q, --quiet | 静默模式(仅输出查询结果,不显示提示信息) | gsql -q -r -d postgres | |
-s, --single-step | 单步模式(每条 SQL 执行前需要确认) | gsql -r -s -d postgres | |
-A, --no-align | 禁用列对齐(适合纯文本处理) | gsql -A -c ‘select * from stu;’ -d postgres | |
-F, --field-separator=STRING | 设置列分隔符(默认:| ) |
gsql -A -c ‘select * from stu;’ -F ‘,’ -d postgres | 需要结合-A使用,不然单独使用-F选项会没有效果 |
-H, --html | 以 HTML 表格格式输出结果 | gsql -H -c ‘select * from stu;’ -d postgres | 输出结果会按照html格式输出 |
-t, --tuples-only | 仅输出数据行(不显示表头、统计信息) | gsql -A -F ‘,’ -c ‘select * from stu;’ -t -d postgres | 不显示表头,统计信息,直接输出数据,方便进行数据处理,数据分析等等 |
-x, --expanded | 扩展显示模式(每列单独一行,适合宽表) | gsql -d postgres -x -c ‘select * from stu;’ | |
-0, --record-separator-zero | 用零字节(\0 )作为行分隔符(方便解析) |
||
-h, --host=HOSTNAME | 指定数据库服务器的主机名或 IP(默认:本地 /opt/huawei/tmp 的套接字) |
gsql -d postgres -h 192.168.29.101 -l | 一般都可以和别的参数结合使用,远程连接到数据库 |
-p, --port=PORT | 指定数据库端口(默认:15400 ) |
gsql -r -p 15400 -d postgres | |
-U, --username=USERNAME | 指定连接的用户名(默认:omm ) |
gsql -r -d postgres -U omm | |
-W, --password=PASSWORD | 直接指定用户密码(不安全,建议省略此参数,在提示时输入密码) | gsql -r -d postgres -U omm -W opengauss@123 |