尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
openGauss在CentOS与openEuler上的完整安装指南与避坑实践
把一个开源数据库老老实实装进 CentOS 或者 openEuler说难不难说简单也真不简单。openGauss 这几年在国产数据库里关注度一直很高尤其是它从内核层面就针对企业级场景做了一堆优化比如并行查询、备机强一致、内存表、数据压缩这些能力都比传统 PostgreSQL 系的开源库要更贴近生产环境。但问题也恰恰出在这里——它确实不是那种 apt install 一下就能跑的东西安装前要改系统参数、建用户、调内核一步没做对后面启动数据库的时候各种诡异报错就来了。这篇文章我打算把 openGauss 在 CentOS 和 openEuler 上的安装过程从头到尾捋一遍。不是我背文档而是把每一个关键步骤背后的“为什么”讲清楚顺便把那些文档不会写、报错了才明白的坑也一并填上。如果你是刚接触 openGauss、想在自己的服务器上先跑起来做测试或者公司内部要搭一套国产数据库环境做评估这篇应该能让你少折腾一晚上。1. 环境准备选对 Linux 发行版和 openGauss 版本1.1 CentOS 和 openEuler 到底怎么选很多人一上来就问到底用 CentOS 还是 openEuler我的建议很直接如果你只是为了学习、跑 Demo、写测试用例CentOS 7.9 或者 CentOS Stream 都没问题网上资料多遇到问题查起来方便。但如果你是给公司的生产环境做选型评估我更推荐 openEuler。原因很简单openGauss 和 openEuler 本身就是同源生态openEuler 的内核版本、编译工具链和 glibc 版本都是经过适配的openGauss 在 openEuler 上的表现更稳定官方文档里很多性能指标也是在 openEuler 上跑出来的。还有一个很现实的原因CentOS 8 已经停止维护了CentOS 7 也进入了 EOL 阶段新装系统如果是从安全角度考虑我不太建议再往 CentOS 上押注。openEuler 有社区长期维护版本节奏也稳定如果你所在团队已经在用鲲鹏芯片的服务器那 openEuler 基本就是唯一选择x86 架构下装 openEuler 也能用但体验最好的还是 ARM 环境。1.2 openGauss 的三个版本分支别下错了openGauss 官方提供三类安装包企业版、轻量版、极简版。我第一次装的时候就吃过亏下载的时候图省事直接找了最小的包结果装完发现一堆功能没有还得重新折腾。企业版完整功能包支持一主多备、级联备机、逻辑复制、资源池化这些高级特性适合做生产环境和功能验证。安装方式支持命令行安装和图形化安装包体在 200MB 左右。轻量版把一些企业级组件裁剪掉了核心的数据库能力保留得比较完整适合在开发环境、测试环境跑内存占用小启动快。如果你只是学 SQL、练调优、做应用开发联调这个版本足够。极简版只有一个最小化的数据库内核可以直接用单机模式跑包体非常小主要是给开发者做内核研究用的日常使用不推荐。如果你不确定该选哪个我的建议是直接下载企业版。虽然包大一点安装步骤多几步但功能完整后续想测什么特性都有省得以后再换版本。轻量版适合那种手里只有 2G 内存小机器的场景企业版光共享内存就要吃掉不少。1.3 磁盘和内存的硬性门槛openGauss 对硬件的要求不算特别苛刻但也不是什么机器都能跑。最低配置要求 2 核 CPU、2GB 内存、10GB 磁盘这个配置基本只能启动服务跑点简单查询。我自己实测下来4 核 8GB 内存是比较舒服的起步配置跑 TPC-C 之类的基准测试至少得 16GB 内存。磁盘方面有个细节容易被忽略openGauss 安装过程会创建 xlog 日志目录、数据目录和临时文件目录三个目录加起来初始就要占 1GB 左右的空间。而且数据库运行时的 WAL 日志会持续增长如果磁盘空间规划得太紧跑几天就会报 “No space left on device”。建议给数据目录预留至少 20GB如果要做压力测试或者跑大批量数据导入50GB 起步才稳妥。2. 安装前的系统配置这些参数不改装上也会出事2.1 为什么 openGauss 安装脚本非要你用 root 执行openGauss 的正常安装流程是先用 root 用户执行安装脚本脚本会帮你自动创建 omm 用户和 dbadmin 用户组。这个设计其实是参考了企业级数据库的一贯做法数据库服务本身不能用 root 跑因为 root 权限太大一旦数据库被攻击或者 SQL 注入后果不堪设想。但创建用户、改系统参数这些操作又必须要 root所以官方把安装流程拆成了两段root 做系统初始化然后切换到 omm 用户完成数据库初始化。这里有一个很实用的建议不要手动去创建 omm 用户。官方安装脚本会处理用户创建、家目录设置、环境变量等一堆细节。我自己第一次装的时候想当然地先建了个 opengauss 用户结果后面切用户执行安装脚本时各种权限和路径问题接踵而至白白浪费了一个小时。老老实实让脚本干它该干的活。2.2 关闭防火墙和 SELinux不是偷懒而是必须openGauss 默认监听 26000 端口如果防火墙开着外部客户端连接时会出现 “Connection refused” 或者连接超时的现象但你在服务器本机用 gsql 连接却是正常的。这种“本机能连、外部连不上”的问题十有八九就是防火墙拦了端口。# 停止防火墙服务 systemctl stop firewalld # 禁用防火墙开机自启 systemctl disable firewalld # 永久关闭 SELinux需要修改配置文件 # 将 SELINUXenforcing 改为 SELINUXdisabled vim /etc/selinux/configSELinux 的问题更隐蔽即使你开着 SELinux 并且放行了端口数据库进程访问文件目录的权限也可能被 SELinux 的策略限制导致数据库启动失败或者运行时报权限错误。新装系统如果没特殊安全要求直接关掉等数据库跑通了再去考虑精细化加固。需要注意的是修改 SELinux 配置必须重启系统才能生效不要妄想 setenforce 0 能一劳永逸。2.3 内核参数调整一条条说清楚为什么要改openGauss 安装文档里有一堆内核参数要设置我当初嫌麻烦想着先装上去再说结果数据库启动之后动不动就报错最后老老实实回来补参数。这里我把核心的几个参数掰开揉碎讲清楚。# 修改 systemd 默认 limits 配置 cat /etc/security/limits.conf EOF * soft stack 1024000 * hard stack 1024000 * soft nofile 65536 * hard nofile 65536 * soft nproc 131072 * hard nproc 131072 EOF # 关掉透明大页避免性能抖动 echo always /sys/kernel/mm/transparent_hugepage/defragnofile是文件描述符上限数据库系统每建立一条连接、每打开一个表文件都要消耗文件描述符默认的 1024 根本不够用。我遇到过并发连接稍高就报 “Too many open files” 的情况就是这个问题。stack调大是为了防止某些深度递归的 SQL 查询导致栈溢出崩溃。nproc是进程数限制数据库会 fork 出后台进程处理各类任务限制太小会直接导致连接失败。内核参数里最容易被忽略的是net.core.somaxconn和net.ipv4.tcp_max_syn_backlog这两个参数控制 TCP 连接队列的大小。高并发场景下如果队列太小客户端连接请求会被直接丢弃表现就是连接建立失败但服务器日志里没有异常。生产环境建议都调到 65535。还有一个值得注意的参数是系统共享内存kernel.shmall和kernel.shmmax。openGauss 默认使用共享内存来缓存数据如果共享内存上限设置得太小数据库启动时分配缓存会报could not resize shared memory segment的错。安装文档里给的是 536870912512MB但我实测 8GB 内存的机器这个值调成 42949672964GB才能让数据库跑得比较舒服。3. 正式安装 openGauss完整流程与参数说明3.1 下载安装包和校验安装包可以从 openGauss 官网下载注意选择对应架构的包。x86 和 ARM 的安装包是不通用的下载的时候看一眼包名里的架构标识x86_64还是aarch64下错了装到一半就会报错。文件比较大建议用 wget 或者浏览器下载时保持网络稳定下载完成后做一下 SHA256 校验防止下载损坏。sha256sum openGauss-5.0.0-CentOS-64bit.tar.bz2官方页面上会给出对应的校验值对比一下一致再执行安装。这一步很多人会跳过但我觉得命令行下载的场景下文件损坏其实并不罕见。3.2 解压和配置 cluster_config 文件下载下来的包是一个 tar.bz2 压缩文件解压之后会得到安装脚本、二进制文件、配置文件模板等一堆东西。其中cluster_config.xml是安装过程的核心配置文件你要做的事情就是按实际情况改里面的主机名、IP、数据目录这些信息。CLUSTER PARAM nameclusterName valuedbCluster/ PARAM namenodeNames valuenode1/ PARAM namegaussdbAppPath value/opt/software/openGauss/app/ PARAM namegaussdbLogPath value/var/log/omm/ PARAM nametmpMppdbPath value/opt/software/openGauss/tmp/ PARAM namegaussdbToolPath value/opt/software/openGauss/tool/ PARAM namecorePath value/var/log/core/ PARAM namebackIp1s value192.168.1.10/ PARAM namedataNum value1/ /CLUSTER注意nodeNames这里要填的是服务器的 hostname不是 IP 地址。这是我踩过的一个坑我一开始在里面填了 IP 地址安装脚本执行到生成配置文件的阶段就报错了提示找不到对应的主机名。如果你不记得当前机器的 hostname执行hostname命令看一下。backIp1s填的是内网 IP如果你只是单机部署填本机 IP 即可。3.3 一键安装命令的执行过程和资源消耗配置文件准备好之后安装就变得非常简单了一条命令搞定./install.sh -U omm -p /opt/software/openGauss/app -X /opt/software/openGauss/cluster_config.xml-U omm指定数据库运行用户-p指定安装目录-X指定刚才改好的配置文件。安装脚本会依次完成创建用户和用户组、设置目录归属、修改环境变量、初始化数据库实例、配置开机自启服务。整个过程大概五分钟到十分钟取决于机器性能。这里有个耐心问题。脚本执行过程中终端会输出大量日志信息中间可能会有一些 WARNING 甚至 ERROR 级别的输出但千万不要看到 ERROR 就慌了。有些 WARNING 是可以忽略的比如关于透明大页的提示有些 ERROR 只是某个可选组件配置失败不影响主流程。判断的标准是看脚本最后的退出状态如果输出里出现了Successfully或者表示安装完成的字样那说明整体安装成功。我在第一次安装时就因为看到几行 WARNING 就直接中断了脚本结果发现主数据库其实早就装好了白白浪费了一次流程。3.4 环境变量和 PATH 配置安装完成后切换到 omm 用户openGauss 的相关命令会自动加入 PATH。这个依赖的是安装脚本写入到~/.bashrc里的环境变量。如果你发现切换到 omm 用户后执行gsql提示找不到命令大概率是环境变量没生效执行一下source ~/.bashrc再试。sudo -i -u omm source ~/.bashrc gsql --version我习惯先看版本确认安装状态再去看服务启动情况。如果gsql --version能正常输出版本号说明客户端没问题接下来就是启动数据库服务了。4. 初始化数据库从启服务到第一条 SQL4.1 服务启停和状态查看的正确姿势openGauss 安装完成后数据库实例不会自动启动需要手动执行一次启服务操作。以 omm 用户执行以下命令gs_ctl start -D /opt/software/openGauss/data-D参数指定数据目录这个目录路径在安装时已经写入到配置文件里了如果你用的是默认配置文件路径会类似/opt/software/openGauss/data。启动成功的标志是日志输出里出现server started这样的提示。查看服务状态我比较习惯用gs_ctl status -D /opt/software/openGauss/data它会输出节点是否 online、数据库运行进程的 PID、数据目录的同步状态这些信息。重点看node_state是否为Primary如果显示的是Standby或者Pending那说明虽然进程起来了但高可用关系还没建立需要进一步检查。4.2 首次连接数据库和默认密码策略初始化完成后系统会生成一个超级管理员用户omm默认密码是安装过程中由脚本自动生成的随机字符串记录在安装目录下的omm用户家目录的某个临时文件里或者日志里可以找到。首次登录命令gsql -d postgres -p 26000 -U omm -W 初始密码这里有一个非常容易卡人的地方openGauss 的密码策略默认要求复杂度极高。如果你后面想改成自己的密码比如openGauss#123这种不光要满足长度不少于 8 位还必须包含大写字幕、小写字母、数字和特殊字符的至少三类组合。我就见过有人在这里折腾了很久就是因为设置的密码复杂度不够提示Password is too weak。登录成功后第一件事我建议先看几个基础信息确认安装没有潜在问题SELECT version(); SELECT current_setting(server_version); SELECT name, setting FROM pg_settings WHERE name IN (port,data_directory,max_connections);这几条 SQL 能确认数据库版本、当前端口、数据目录和最大连接数。特别是max_connections默认值只有 100如果应用场景并发不高可以先不调但如果是测试高并发提前调大可以避免后面反复重启数据库。4.3 开启远程连接的配置默认情况下openGauss 只监听本地连接外部客户端比如你在自己电脑上用 DBeaver 连接是连不上的。需要改两个文件。第一个是postgresql.conf把监听地址从默认的 localhost 改为主机 IPlisten_addresses 0.0.0.0第二个是pg_hba.conf添加远程客户端的访问规则host all all 192.168.1.0/24 sha256注意 openGauss 的认证算法是sha256不是 PostgreSQL 常用的md5或者scram-sha-256如果你在这边填错认证方式连接时会直接报认证失败。改完这两个文件后需要重启数据库才能生效gs_ctl restart -D /opt/software/openGauss/data改配置之前强烈建议先备份原文件。这是我做运维养成的一个习惯任何配置文件改动前先cp一份带日期的副本出问题可以秒级回滚不用靠记忆去把改动一项一项改回去。5. 常见报错和排查技巧实录5.1 编译安装中出现的典型问题对照表整个安装过程中我见过的高频报错基本可以整理成一张表。排查问题的时候先对照这张表缩小范围再去看日志效率会高很多。报错信息可能原因解决办法pm_hba.conf 中认证方式错误认证方式填了 md5 或 scram改成 sha256 后重启数据库listen_addresses 设置无效配置后未重启数据库执行 gs_ctl restart 重启DATA_DIR 路径不存在或权限不足数据目录未创建或归属错误检查目录归属chown 给 omm 用户The account is locked连续多次密码错误触发锁定使用 omm 用户执行 gs_ctl 解锁或重置密码No space left on device磁盘空间不足清理 WAL 日志或扩容磁盘Remote connection refused防火墙未放通端口systemctl stop firewalld 或放行 26000 端口could not resize shared memory segment内核共享内存参数过小调大 kernel.shmmax 并 sysctl -p 生效GSSAPI 认证错误客户端工具版本不兼容升级 gsql 客户端或使用兼容版本5.2 日志排查思路和排错实操记录如果一次安装不顺利正确思路不是反复重跑安装脚本而是按顺序排查日志。openGauss 的日志有三个层级安装日志、服务端日志、数据目录运行日志。安装日志通常在安装目录的log子目录下文件名类似install.log这里记录了安装脚本每一步执行的结果和报错堆栈。服务端日志在数据目录下的pg_log文件夹里文件名格式是postgresql-日期_时间.log数据库启动失败、连接异常、SQL 执行错误都会记录在这里。还有一个比较隐蔽的是gs_ctl的日志在数据目录的pg_ctl子目录下主要记录启停服务时的异常信息。我自己处理过的一个典型问题数据库启动时报could not open configuration file /opt/software/openGauss/data/postgresql.conf: Permission denied。排查时发现数据目录的所有者是 root而不是 omm 用户。原因是我在安装前手动创建过数据目录没有注意目录归属。解决办法很简单chown -R omm:dbadmin /opt/software/openGauss/data之后启动就正常了。5.3 安装过程退出重来的正确方式如果安装过程中断或失败想重新安装我建议不要在同一台机器上反复执行安装脚本因为残留的配置文件和数据库进程会干扰下一轮安装。正确做法是先彻底清理# 停止数据库 gs_ctl stop -D /opt/software/openGauss/data # 清除环境变量痕迹 rm -f ~/.bashrc.bak # 删除安装目录和数据目录 rm -rf /opt/software/openGauss如果之前创建过 omm 用户是否删除看你自己的习惯。官方脚本支持重复安装但前提是环境干净。我倾向于保留 omm 用户因为重新创建用户还要处理密码和家目录权限省点事。但目录一定要清理干净特别是tmpMppdbPath指向的临时目录有时候会残留 socket 文件导致新的实例启动时端口被占用。6. 安装完成后的验证与日常维护建议6.1 用几个命令快速验证安装是否健康安装完成、数据库启动之后我建议做一套“体检流程”五分钟内确认数据库是否处于健康状态。# 查看集群状态 gs_om -t status # 查看数据库进程 ps -ef | grep gaussdb # 验证数据库版本和关键参数 gsql -d postgres -p 26000 -c SELECT version();gs_om -t status是检查整个集群状态最直接的工具单机部署时它会显示一个 Primary 节点的信息。如果在输出里看到Degraded字样说明节点状态有问题需要结合前文的日志排查思路定位。正常状态应该是绿色的Normal或至少Unavailable具体取决于版本差异。我还习惯验证一下数据目录的 WAL 目录增长情况。刚启动的空库 WAL 目录很小但如果跑了几分钟就涨得很快说明数据库可能处于频繁 checkpoint 的状态这时候要检查磁盘空间和 shared_buffers 参数是否合理。6.2 配置修改的习惯和备份策略openGauss 很多配置参数是支持在线修改的比如work_mem、maintenance_work_mem不需要重启就能生效。但像listen_addresses、port、max_connections这类参数必须在postgresql.conf里改完后重启数据库。在线修改的操作方式ALTER SYSTEM SET work_mem 64MB; SELECT pg_reload_conf();这里要特别提醒ALTER SYSTEM改的参数会写入到postgresql.auto.conf文件这个文件的优先级高于postgresql.conf。如果哪天你改了postgresql.conf但发现不生效先去检查postgresql.auto.conf里有没有残留的配置项把这个参数覆盖了。我踩过这个坑排查了半天才发现是最早测试参数时在 auto.conf 里留下的值。备份方面openGauss 提供了gs_dump工具类似 PostgreSQL 的pg_dump支持数据库级和 schema 级逻辑备份。我的建议是至少有一套自动化的定时备份写个 shell 脚本放到 crontab 里。0 2 * * * su - omm -c gs_dump -U omm -W 密码 -p 26000 -d postgres -F c -f /backup/opengauss_$(date %Y%m%d).dump物理备份基础备份在单机环境下相对复杂涉及归档日志配置逻辑备份对绝大多数场景已经够用了。如果你后续要做主备架构再认真研究物理备份也不迟。6.3 从单机环境向主备架构扩展的思路如果你这次装单机只是第一步后面想搭主备集群那安装时就要提前留好一些伏笔。首先backIp1s不要把 IP 写死规划好以后节点之间的内网通信网段。其次至少准备好两台服务器时间同步要做起来openGauss 的主备节点对时间偏差很敏感偏差过大会直接导致主备断连。主备架构不再使用install.sh的单机安装流程而是要走gs_preinstall加gs_install的完整集群安装流程配置文件的格式也会从单节点的cluster_config.xml变成多节点的集群配置。这个流程比单机复杂很多涉及 SSH 免密、节点间互信、数据目录规划等一系列动作建议单机验证跑通后再动手。我个人体会是先把单机环境吃透把日志排查、参数调整、备份恢复这些基本功都练扎实再上主备架构会顺手很多。数据库这种基础设施慢就是快。7. 写在最后的几点真话openGauss 的安装本身不算难真正的难度在于你懂不懂每一步操作背后的原理。设置内核参数的时候如果你知道nofile限制了文件描述符的数量以后碰到 “Too many open files” 就能秒定位。配置pg_hba.conf的时候如果你了解sha256是 openGauss 默认的密码哈希算法就不会被那些复制 PostgreSQL 教程而来的错误配置带偏。从实际使用体验来看openGauss 是一个内核功底很扎实的数据库但它对运维技能的要求比 MySQL 高出不少这也不是缺点毕竟企业级数据库本来就应该严肃对待。用习惯了之后你会慢慢喜欢上它那些贴心的设计比如数据校验、全密态计算、AI 自治运维这些能力在别的开源数据库里很少能在一个产品里全部看到。最后分享一个小技巧。安装完 openGauss 后在$GAUSSHOME目录下有个bin文件夹里面有大量实用工具命令比如gs_encrypt用于生成加密密码gs_ssh用于在集群节点间执行命令gs_check用于环境检查。我习惯在装完之后把$GAUSSHOME/bin下面的命令都浏览一遍花不了多少时间但能让你对这个系统的能力边界有一个整体认知。搞清楚你手上工具能干什么是比记命令本身更重要的一件事。
RELATED

相关推荐

从哄到驯服:AI助手稳定落地的工程化实践

从哄到驯服:AI助手稳定落地的工程化实践

说起来有点丢人。我们那个AI助手在内部测试的时候,简直是人见人夸。同事问什么,它答什么,引经据典,头头是道。当时大家一致觉得这项目稳了,甚至开始畅想“AI客服替代人工”“AI助理全员上岗”的画面。结果真正推到客户…

📅 2026/10/19 8:06:14
分布式调度实战:从踩坑案例到高可用架构与避坑指南

分布式调度实战:从踩坑案例到高可用架构与避坑指南

1. 分布式调度问题的本质与场景拆解1.1 从一个真实踩坑案例说起去年我帮一个做数据报表的朋友排查过一个线上问题:他们有一套跑在十几台机器上的定时任务系统,每天凌晨两点开始批量生成前一天的经营报表。平时跑得好好的,某天突然发现有三张报…

📅 2026/10/19 8:06:14
数据结构知识点总复习:从存储、操作到场景的决策指南

数据结构知识点总复习:从存储、操作到场景的决策指南

1. 为什么“知识点总复习”这件事值得单独拿出来做1.1 从一次模拟项目复盘说起去年带过一个模拟项目组,五个同学里四个能把红黑树的插入旋转背得滚瓜烂熟,但让他们解释“为什么数据库索引用B树而不是红黑树”,全场安静。这件事让我意识到一个…

📅 2026/10/19 8:06:14
MORE NEWS

更多资讯

📰

MFC集成ChartCtrl实现实时波形显示与性能优化

简介:这份源码资源面向具备一定C基础的Windows开发者,尤其是需要在MFC工程中快速实现数据可视化的初学者与工程人员。它通过一个可运行的对话框程序,演示如何借助ChartCtrl控件完成波形数据的采集、绘制与实时刷新,解决传统绘图方…

📰

WiFi信号差别急着换路由器:射频到回程的系统排查指南

很多人拿到WiFi信号不好的报告,第一反应就是"换路由器"。但真正做过无线网络诊断的人都知道,这条思路往往救不了现场。WiFi诊断不是拿手机看两格信号、随手重启一下设备这么简单,它是一个从射频环境、协议交互、到有线回程逐层剥离…

📰

Git冲突解决与数据恢复:强推覆盖、误删分支的救急指南

Git 协作踩坑 删库跑路?这个说法在我朋友圈里流传了很久,每次看到都有人会心一笑,但真笑出来的,多半是没踩过坑的。这些年我参与过不少故障复盘,有强推覆盖搞丢整周代码的,有合并冲突解到精神恍惚的&#…

📰

任务栏卡顿不用重装系统:explorer.exe修复与性能排查指南

任务栏卡顿这事,说大不大,说小又特别膈应人。鼠标移到屏幕底部,转圈圈;点开始菜单,半天没反应;切换窗口,缩略图直接白屏。我处理过不少这类问题,大部分朋友的第一反应是重装系统&…

📰

无人机遥感语义分割实战:labelme标注与地物识别全流程解析

做无人机遥感项目的人应该都体会过这种感觉:数据比模型更让人头疼。这个项目标题看起来很朴素——无人机视角、地理要素、labelme格式、1536张、6类别,但真正动手做过的人知道,这里面每一环都是可以讲出大量经验的地方。我最近完整跑通了从无…

📰

降AI率工具实测:破解AI检测原理,还原论文真人感

上个月帮一位某专科院校的朋友A同学看毕业设计说明书的初稿,他问我的第一句话是:“学长,你帮我看看,这文字怎么一股AI味儿?我自己读着都别扭。”我打开文档一看,满篇都是“首先”“其次”“综上所述”&…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬