OpenGauss数据库初探记录

一、文档说明

  • 适用场景:openGauss 单机版安装(simpleInstall 脚本部署)
  • 部署环境:openEuler 其他Linux基本通用
  • 核心目标:以 postgres 为主要数据库用户,完成安装、核心配置(含密码加密、远程连接)、PG 兼容模式配置、连接验证、网站安装。
  • 内容还包括:gs_ctl query 命令解读、password_encryption_type 密码加密配置、postgresql.conf/pg_hba.conf 详细修改说明
  • 仅记录了部分内容,其他内容可参考官方文档。

二、部署流程(完整步骤)

(一)环境准备(root 用户执行)

1.1 创建系统用户与组

(openGauss 要求以 omm 系统用户安装)

1
2
3
4
5
6
7
8
### 创建用户组 
groupadd dbgroup

### 创建用户组dbgroup下的普通用户omm,并设置普通用户omm的密码,密码建议设置为 Dtop@2020
useradd -g dbgroup omm

### 设置 omm 系统用户密码(示例:Dtop@2020,需满足大小写+数字+特殊字符)
passwd omm

1.2 配置系统资源限制(解决 ulimit 警告)

1
2
3
4
5
6
7
8
9
10
11
12
### 配置系统资源限制(避免后续运行异常)
### 编辑 /etc/security/limits.conf,添加 omm 用户的资源限制(openGauss 运行必需):
### 此处有坑
vi /etc/security/limits.conf

#### 添加以下内容(直接复制粘贴),多次测试,非常关键!
omm soft nofile 1024000
omm hard nofile 1024000
omm soft nproc 1024000
omm hard nproc 1024000
omm soft stack unlimited
omm hard stack unlimited

?为什么修改成这样能正常安装?

openGauss 在初始化和启动阶段需要消耗大量系统资源,之前的设置虽 “够用” 但未达其底层依赖(如 jemalloc、线程池)的要求,具体原因如下:

1、nofile(最大打开文件数):openGauss 的 “文件密集型” 特性

openGauss 在初始化时会创建大量数据文件、日志文件、套接字文件等:

  • 单机部署需同时打开数百个数据块文件、WAL 日志文件、临时文件;
  • nofile仅设为65535,极端情况下(如初始化大量系统表、索引)可能触达上限,导致文件创建失败;
  • 提升至1024000后,预留了足够的文件句柄配额,避免 “Too many open files” 错误,确保初始化全流程无阻塞。

2、 nproc(最大进程 / 线程数):解决 jemalloc 线程创建失败的核心

之前的错误<jemalloc>: arena 0 background thread creation failed (11),本质是系统线程数配额不足

  • jemalloc(openGauss 的内存分配器)需要创建多个 arena 后台线程管理内存池,若nproc限制为65535,可能因系统其他进程占用 + 数据库初始化线程叠加,导致线程创建被系统拒绝(错误码 11=EAGAIN,资源不足);
  • 提升至1024000后,线程配额远超实际需求(单机部署仅需数十个核心线程),彻底消除线程创建的资源瓶颈。

3、 stack unlimited(栈空间无限制):避免进程栈溢出

openGauss 的后台进程(如 walwriter、checkpointer)在初始化时需要较大的栈空间:

  • 若栈空间设为默认有限值(如 8MB),复杂操作(如系统表初始化、权限校验)可能触发栈溢出,导致进程异常退出;
  • 设置为unlimited后,进程可按需使用栈空间,避免因栈不足导致的启动失败。

4、openGauss 对系统资源限制的底层需求

openGauss 基于 PostgreSQL 深度优化,但增强了内存管理、并行计算等能力,对系统资源的需求远高于传统数据库:

  • 文件句柄:需支持海量小文件(数据块、索引块)的并发访问;
  • 线程数:多线程架构(如每个连接对应一个工作线程)+ 后台服务线程(内存管理、日志刷盘)需要充足配额;
  • 栈空间:复杂 SQL 解析、事务处理需较大栈空间支撑。

之前的设置(如65535)虽满足常规应用,但未覆盖 openGauss 初始化阶段的 “峰值资源需求”,而更大的数值(1024000)和unlimited栈空间则为其提供了充足的资源冗余。


(二) 清理旧环境(若需重新安装,root 用户执行)

说明:

  • gs_uninstall 是 openGauss 集群部署(如 MPP 架构、主备集群) 的专属卸载工具。
  • 通过 simpleInstall 脚本部署的是单机版 openGauss,单机部署的 bin 目录中不会包含集群管理工具(如 gs_uninstall、gs_om 等)。
  • 因为经历了很多次删除重装,所以又整理了一次。清理或重装的部分内容如下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
###  停止旧集群(若运行中)
su - omm
gs_ctl stop -D /opt/software/openGauss/data/single_node -m fast

### 彻底删除旧安装目录
exit # 切回 root
rm -rf /opt/software/openGauss

### 清理残留安装文件(避免重复初始化冲突),删除安装失败产生的空目录,确保重新安装干净:
rm -rf /opt/software/openGauss/data # 删除空数据目录
rm -f /opt/software/openGauss/simpleInstall/load.log # 删除残留日志(若存在)

### 清理残留进程
ps -ef | grep gauss | grep -v grep | awk '{print $2}' | xargs kill -9 2>/dev/null

### 清理临时文件
### 合并 rm -rf /tmp/.s.PGSQL.* /tmp/gaussdb*
rm -rf /tmp/.s.PGSQL.*
rm -rf /tmp/gaussdb*

(三)安装 openGauss(omm 系统用户执行)

3.1 环境变量对照设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
### 修改
vi ~/.bashrc

### 文件内容对照内容
export GAUSSHOME=/opt/software/openGauss
export PATH=$GAUSSHOME/bin:$PATH
export LD_LIBRARY_PATH=$GAUSSHOME/lib:$LD_LIBRARY_PATH
export GS_CLUSTER_NAME=dbCluster
export PGDATA=/opt/software/openGauss/data/single_node
export GAUSSLOG=/opt/software/openGauss/log # 日志存储路径
ulimit -n 1000000

### 使之生效
source ~/.bashrc

3.2 解压安装包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

### 下载文件并且确认bz2文件,从官网下载,下载 All 注意解压后选择里面对应的bz2包。
### root
mkdir -p /opt/software/openGauss
chown -R omm:dbgroup /opt/software/openGauss # 递归赋权
chmod -R 755 /opt/software/openGauss # 授予读写执行权限

### 假定解压包的路径为/opt/software/openGauss,进入解压后目录下的simpleInstall。
### 压缩包/home/omm/,使用omm解压,安装目录为/opt/software/openGauss。
su - omm
tar -jxf /home/omm/openGauss-Server-6.0.2-openEuler22.03-x86_64.tar.bz2 -C /opt/software/openGauss
cd /opt/software/openGauss/simpleInstall

### 执行install.sh脚本安装openGauss。
sh install.sh -w "Design@753" -p 54321

### 安装成功
[2025-11-27 12:58:22.272][8421][][gs_ctl]: done
[2025-11-27 12:58:22.272][8421][][gs_ctl]: server started (/opt/software/openGauss/data/single_node)
import sql file
Would you like to create a demo database (yes/no)? yes
Load demoDB [school,finance] success.
[complete successfully]: You can start or stop the database server using:
gs_ctl start|stop|restart -D $GAUSSHOME/data/single_node -Z single_node

  
说明:

• -w:初始化数据库密码(gs_initdb指定),因安全需要,此项必须设置。
• -p:指定openGauss端口号,如不指定,默认为5432。
• 安装后,数据库目录安装路径/opt/software/openGauss/data/single_node,其中/opt/software/openGauss为解压包路径,data/single_node为新创建的数据库节点目录。
• 安装完成后,默认生成名称为postgres的数据库。第一次连接数据库时可以连接到此数据库。

3.3 查看状态命令和说明

功能 命令(含 -Z single_node
启动集群 gs_ctl start -D /opt/software/openGauss/data/single_node -Z single_node
停止集群 gs_ctl stop -D /opt/software/openGauss/data/single_node -Z single_node -m fast
重启集群 gs_ctl restart -D /opt/software/openGauss/data/single_node -Z single_node
查看集群状态 gs_ctl query -D /opt/software/openGauss/data/single_node -Z single_node
重载配置 gs_ctl reload -D /opt/software/openGauss/data/single_node -Z single_node

3.4 gs_ctl query命令查询 openGauss 单机实例状态的结果

这个输出是gs_ctl query命令查询 openGauss 单机实例状态的结果,表明数据库集群(单机模式)处于正常可用状态,各字段含义及场景说明如下:

1
2
3
4
5
6
7
8
9
10
11
[2025-11-27 13:11:06.098][8686][][gs_ctl]: gs_ctl query ,datadir is /opt/software/openGauss/data/single_node 
HA state:
local_role : Normal
static_connections : 0
db_state : Normal
detail_information : Normal

Senders info:
No information
Receiver info:
No information

1、核心字段解析

字段 内容 含义说明
local_role: Normal 本地节点角色为 “Normal” 单机部署场景下,节点无主备角色区分,此状态表示节点为 “普通独立节点”;若为主备集群,主节点会显示Primary,备节点显示Standby
static_connections: 0 静态复制连接数为 0 静态复制连接用于主备节点间的同步,单机部署无主备架构,因此该值为 0(正常现象)
db_state: Normal 数据库实例状态为 “Normal” 数据库核心进程(gaussdb)正常运行,可提供读写服务,无故障、无异常挂起
detail_information: Normal 详细状态信息为 “Normal” 数据库底层资源(内存、锁、事务)均正常,无潜在错误或告警
Senders info: No information 无发送端信息 发送端(Sender)是主备集群中主节点向备节点同步数据的进程,单机无主备,因此无此信息
Receiver info: No information 无接收端信息 接收端(Receiver)是备节点接收主节点数据的进程,单机无备节点,因此无此信息

2、场景解读(单机部署)

openGauss 的gs_ctl query命令原本用于主备集群状态查询,因此输出中保留了 HA(高可用)相关字段(如 Senders/Receiver)。但在单机部署场景下:

  • HA 相关字段(Senders/Receiver)无信息属于正常现象,无需关注;
  • 核心关注db_state: Normallocal_role: Normal,这两个字段表明:
  1. 数据库实例已成功启动;
  2. 无进程崩溃、资源耗尽等异常;
  3. 可正常接收客户端连接并提供数据服务。

(四)核心初始化配置

关键步骤:以 postgres 为主要数据库用户)

4.1 创建并授权 postgres 数据库用户

openGauss 安装后默认仅创建 omm 超级数据库用户,需手动创建 postgres 数据库用户并授予管理员权限:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
### 本地免密登录(omm 数据库用户,系统用户 omm 执行)
[omm@localhost ~]$ gsql -d postgres -p 54321
gsql ((openGauss 6.0.2 build 6285c0ef) compiled at 2025-07-15 17:31:11 commit 0 last mr 8059 )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.

### 创建 postgres 数据库用户(设置密码,与系统用户无关)
CREATE USER postgres WITH PASSWORD 'Design@753';

### 授予 postgres 系统管理员
ALTER USER postgres WITH SYSADMIN;

### 验证用户是否创建成功
\du

SELECT * FROM pg_user WHERE usename = 'postgres';

### 其他命令、退出 omm 登录
openGauss=#\q -- 退出
openGauss=#\du -- 查看用户
openGauss=# \l -- 列出所有数据库
openGauss=# \dn -- 列出所有模式
openGauss=# \c testdb -- 切换到testdb数据库

4.2 修改 postgresql.conf(核心配置文件,突出关键修改)

postgresql.conf 是数据库核心配置文件,需修改2个关键参数:

  • listen_addresses(远程连接)
  • password_encryption_type (密码加密方式)
1
2
### 编辑配置文件(omm 系统用户执行,因目录权限归属 omm)
vim /opt/software/openGauss/data/single_node/postgresql.conf

关键修改项 1:允许远程连接(listen_addresses

默认值:localhost(仅允许本地连接)
修改后:listen_addresses = '*'(允许所有 IP 连接)
目的:支持外部机器通过 TCP/IP 连接数据库

关键修改项 2:配置密码加密方式(password_encryption_type

默认值:2(仅支持 scram-sha-256 加密,部分客户端不兼容)
修改后:password_encryption_type = 0(支持 md5 加密,兼容性更强,for PG)
目的:解决部分客户端(如老版本 Navicat、JDBC 驱动)无法连接的问题
取值说明:

  • 0:仅支持 md5
  • 1:同时支持 md5 和 scram-sha-256
  • 2:仅支持 scram-sha-256(默认)
1
2
3
4
5
6
7
8
9
10
11
### 重载配置(无需重启数据库,修改立即生效)
gs_ctl reload -D /opt/software/openGauss/data/single_node -Z single_node

### 验证修改结果(postgres 数据库用户连接验证)
gsql -h 127.0.0.1 -p 54321 -U postgres -d postgres -W 'Design@753'

### 执行以下 SQL 查看配置
SHOW listen_addresses; # 输出 \*
SHOW password_encryption_type; # 输出 1
SHOW max_connections; # 输出 200 上面为修改
\q # 退出

4.3 修改 pg_hba.conf

认证规则配置,突出安全与兼容性。pg_hba.conf 控制客户端访问认证规则,决定 “哪些客户端能以何种方式连接数据库”,需优化规则确保安全且易用。

1
2
### 编辑认证配置文件(omm 系统用户执行)
vim /opt/software/openGauss/data/single_node/pg_hba.conf

最终优化配置(保留核心规则,删除冗余)

Text
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
### 规则 1:本地 Unix 套接字连接(仅本地服务器访问)
### 所有数据库、所有用户,无需密码(trust 认证)
local all all trust

### 规则 2:IPv6 本地回环连接(::1 即本地 IPv6 地址)
### 复制用户 omm 无需密码,其他用户无需密码(单机无复制,仅兼容)
host replication omm ::1/128 trust
host all all ::1/128 trust

### 规则 3:IPv4 远程连接(核心规则)
### 所有数据库、所有用户,允许所有 IPv4 地址(0.0.0.0/0),md5 密码认证
### 生产环境建议限制为具体网段(如 192.168.1.0/24),增强安全性
host all all 0.0.0.0/0 md5

### 汇总复制以下内容
local all all trust
host replication omm ::1/128 trust
host all all ::1/128 trust
host all all 0.0.0.0/0 md5

规则逐行解读

规则类型 数据库 用户 客户端 IP 认证方式 目的
local all all 本地套接字 trust 服务器本地访问免密(方便运维)
host replication omm ::1/128 trust IPv6 本地复制免密(单机无用,保留兼容)
host all all ::1/128 trust IPv6 本地访问免密
host all all 0.0.0.0/0 md5 所有 IPv4 客户端需密码认证(远程连接核心)

配置生效(必须重载,否则规则不生效)

1
gs_ctl reload -D /opt/software/openGauss/data/single_node -Z single_node

4.4 重置MD5密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
### 用 postgres 数据库用户连接,由于创建时候不是PG
gsql -h 127.0.0.1 -p 54321 -U postgres -d postgres -W 'Design@753'

[omm@localhost ~]$ gsql -h 127.0.0.1 -p 54321 -U postgres -d postgres -W 'Design@753'
gsql: FATAL: Invalid username/password,login denied.

### 用omm登录后,重置密码
[omm@localhost ~]$ gsql -d postgres -p 54321
openGauss=# ALTER USER postgres WITH PASSWORD 'Design*753';
NOTICE: The encrypted password contains MD5 ciphertext, which is not secure.
ALTER ROLE

### 成功登录
[omm@localhost ~]$ gsql -h 127.0.0.1 -p 54321 -U postgres -d postgres -W 'Design*753'
gsql ((openGauss 6.0.2 build 6285c0ef) compiled at 2025-07-15 17:31:11 commit 0 last mr 8059 )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
openGauss=>

### 成功登录
[omm@localhost ~]$ gsql -h 192.168.159.131 -p 54321 -U postgres -d sgp1127 -W 'Design*753'
gsql ((openGauss 6.0.2 build 6285c0ef) compiled at 2025-07-15 17:31:11 commit 0 last mr 8059 )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
sgp1127=>

三、创建 PG 兼容模式数据库

1
2
3
4
5
6
7
### 创建数据库(正确参数 DBCOMPATIBILITY,指定 PG 兼容)
### 登录数据库
### \c -- 重置会话,如需要

openGauss=> CREATE DATABASE sgp1127 WITH ENCODING = 'UTF8' LC_COLLATE = 'zh_CN.UTF8' LC_CTYPE = 'zh_CN.UTF8' DBCOMPATIBILITY = 'PG';
CREATE DATABASE # 提示创建成功了

1、本地连接(服务器本地,免密)

1
2
### 本地 Unix 套接字连接(无需 -h 参数,trust 认证免密)
gsql -U postgres -d sgp1127 -p 54321 # ?需要密码

2、远程连接(外部机器,密码认证)

Text
1
2
### 格式:gsql -h 数据库服务器IP -p 端口 -U 用户名 -d 数据库名 -W 密码
gsql -h 192.168.159.131 -p 54321 -U postgres -d sgp1127 -W 'Design*753'

3、navicat 链接

登录正常

四、网站系统安装测试

1、(可选)修改文件 systemsettings.json ,使得网站可以重新进入安装流程;

1
2
3
4
5
6
7
8
9
10
11
{
"SystemSettings": {
"DatabaseIsInstalled": false,
"InstallComplete": false,
"AppendVersionEnabled": true,
"IsReallySendMessage": true,
"EnabledMail": true,
"ExceptionDetail": false,
"AddDefaultData": true
}
}

2、(前提)权限等配置正常;
3、进行网站安装(截图),需要使用上面创建的数据库 sgp1127 ;
4、安装成功,过程略。

--------------本文结束 感谢您的阅读--------------