GaussDB 100在EulerOS上的安装部署实践

发布时间:2026/9/7 3:49:48
GaussDB 100在EulerOS上的安装部署实践 简介这是华为GaussDB 100 1.0.1版面向EulerOS 20 SP8的64位安装包定位为自研分布式数据库的部署介质适合数据库管理员、运维工程师以及需要评估GaussDB特性的开发者使用。压缩包共6个文件大小仅7.39MB内含1个tar.gz主安装包、4个Python脚本覆盖安装、升级、公共函数库等辅助功能和1个sha256校验文件体积精简但要素齐全。目前已有1304人学习下载可快速获取这套安装介质与配套脚本在EulerOS环境中完成GaussDB 100的部署验证。通过实际安装与脚本调用读者能直观体会其分片并行、主备高可用、ACID强一致及云原生集成等核心设计并结合安装脚本理解配置要点为后续深入使用或生产迁移打下基础。适合希望从安装入手、进而了解分布式数据库内部机制的初中级技术人员作为一条低门槛的上手路径。1. 安装包文件名里藏了什么信息拿到GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit.tar.gz这个安装包的时候我第一反应不是急着解压而是先把文件名字拆了一遍。做数据库部署久了就会发现这类企业级安装包的命名不是随便起的它基本等于一份浓缩版的环境需求说明书。你读懂了它后面装起来就少踩一半坑。1.1 逐段拆解命名规则我习惯把这个文件名按短横线分段看每段都有明确含义GaussDB_100产品系列。GaussDB 是华为自研数据库品牌数字 100 代表这一代 OLTP 单机数据库内核。它和面向分析型场景的 GaussDB 200、面向分布式架构的 GaussDB 300后来版本叫法有调整定位不同100 更强调高可靠、高事务吞吐适合核心交易类业务。1.0.1版本号。说明这个大版本是 1.0当前更新到补丁 1。实际安装后select version()看到的版本信息会和这个数字有对应关系比如可能是V100R001C10之类的内部编号不用太纠结关键是同大版本内的安装包不能随便混用。DATABASE安装形态。表示包里是完整的数据库服务端软件不是客户端命令工具集也不是只读库。如果你要做开发测试通常会额外下载配套的客户端包。EULER20SP8目标操作系统。这是整个文件名里最要命的一段说明这个二进制包是针对 EulerOS 20 SP8 编译的。操作系统内核版本、glibc 版本、运行库依赖都会影响二进制能不能跑起来所以厂商会对不同 OS 出不同的包。64bit系统架构是 64 位。但这里有个很容易被忽略的点64 位不等于具体 CPU 架构x86_64 和 aarch64 都属于 64 位。下载安装包之前一定要看自己的服务器是 Intel/AMD 还是鲲鹏/飞腾架构不对装到一半就会报非法指令。1.2 为什么厂商要按操作系统拆包有人不理解数据库软件不都是跨平台的吗为什么不能给一个万能包这个问题的核心在“生产环境稳定性”。C/C 编译出来的数据库引擎对 glibc、libstdc、libaio 这类系统库版本非常敏感。一个在现代发行版上编译的包拿到老系统上可能直接报缺失符号反过来在老旧系统上编译的包跑到新系统上又可能错失性能优化。所以像 GaussDB 这种企业级数据库干脆针对主流 OS 分别出安装包把运行期依赖的库版本锁死这样 DBA 在生产环境部署时不会因为系统库不一致翻车。如果你手里的服务器不是 EulerOS 20 SP8而是 CentOS 7 或者 openEuler 20.03 LTS可不可以硬装我的建议是开发环境想验证可以试试但生产环境千万别。我之前在一台 CentOS 7.9 上尝试直接解压运行结果gsql客户端能起来数据库实例初始化时却报 glibc 版本不匹配。后来规规矩矩换了 EulerOS 20 SP8 的虚拟机一次就过了。注意EULER20SP8 和 openEuler 20.03 SP 系列有血缘关系但不完全等同。别拿 openEuler 的包装到 EulerOS 上也别反过来除非你仔细核对过官方兼容性矩阵。为了直观我把文件名里的关键字段整理成一个表字段含义部署时需要做什么GaussDB_100数据库产品系列确认业务场景是 OLTP 交易型1.0.1版本号后续升级补丁要对应这个版本基线DATABASE完整数据库服务端安装后包含实例、客户端、管理工具EULER20SP8目标 OS 为 EulerOS 20 SP8提前准备匹配的 Linux 系统64bit64 位系统确认 CPU 架构是 x86_64 还是 aarch64tar.gz压缩归档格式用 tar 解压而不是 unzip2. 装之前把环境收拾利索很多初次部署 GaussDB 100 的人喜欢上来就解压、执行安装脚本结果被一堆内核参数报错和依赖缺失搞到怀疑人生。我的经验是安装前花半小时把操作系统环境调好比安装时报错再回头排查省三倍时间。这一步我习惯按“系统识别、依赖安装、用户准备、内核调整”四件事来做。2.1 先确认系统版本和 CPU 架构连接服务器后第一步执行这两条命令cat /etc/os-release uname -m/etc/os-release会给出系统名称和版本比如NAMEEulerOS、VERSION_ID20 SP8uname -m输出x86_64表示 Intel/AMD 架构输出aarch64表示 ARM 架构。拿到这两个结果马上和安装包文件名比对如果版本和架构不对我建议你立刻停手去重新下载匹配的包。强行安装后面的坑会一个接一个。顺带说一句如果生产环境是云服务器尽量选和所选镜像一致的 OS。有些云平台的“EulerOS 20 SP8”公有镜像实际上会包含定制内核但大体兼容问题不大。如果是 Docker 容器环境还需要确认容器宿主机内核是否满足共享内存和信号量参数要求很多容器默认限制sysctl修改权限这一点在部署文档里容易被忽略。2.2 安装依赖包GaussDB 100 在运行时会依赖一些常见的系统库。EulerOS 20 SP8 默认安装可能不是全部都有建议用 yum 一次性装齐yum install -y libaio libaio-devel numactl numactl-devel bc glibc-devel readline-devel这些包分别干这些事libaio数据库的异步 I/O 依赖缺了它启动时大概率报libaio.so.1 not foundnumactl内存 NUMA 调优工具多路服务器上防止内存访问性能劣化bc计算器部分脚本会在初始化时用来做内存参数计算readline命令行交互增强库gsql客户端连上后上下翻命令、编辑历史会用到。装依赖这一步必须用 root 执行建议装完后再跑一遍yum list installed | grep libaio做确认。如果你是离线内网环境提前准备好本地 RPM 仓库或者直接让网络管理员放行这几个包的源不要等到安装脚本跑一半再临阵磨枪。2.3 创建专用用户和目录数据库进程绝对不能以 root 运行这是企业级数据库的基本安全要求。GaussDB 100 安装和运行时会要求指定一个业务用户我习惯建一个独立的组和用户不和其他应用混用。groupadd dbgrp useradd -g dbgrp -m -d /home/gaussdba gaussdba echo Gauss123 | passwd --stdin gaussdba建好用户后规划安装目录和数据目录。我的实践是把它们分开安装目录放二进制文件数据目录放实例数据。数据目录建议单独挂载大容量磁盘比如/data/gaussdbmkdir -p /opt/gaussdb_install mkdir -p /data/gaussdb chown -R gaussdba:dbgrp /opt/gaussdb_install chown -R gaussdba:dbgrp /data/gaussdb chmod 755 /opt/gaussdb_install /data/gaussdb这里有个我踩过的坑一开始图省事直接把数据目录建在根分区下结果后来数据库文件增长把根分区撑满导致系统服务异常。生产环境一定要先df -h看分区空间数据目录所在分区预留 20GB 以上才算稳妥。安装目录不需要太大10GB 基本够用但临时解压空间也要算进去。2.4 内核参数调整GaussDB 100 对共享内存、信号量、文件句柄都有要求。如果这些参数不调安装时常见报错是semget failed或Cannot allocate memory。我常用的调整方案是修改/etc/sysctl.confcat EOF /etc/sysctl.conf kernel.sem 4096 2147483647 2147483646 512000 kernel.shmall 1073741824 kernel.shmmax 34359738368 net.ipv4.ip_local_port_range 9000 65535 vm.max_map_count 655360 fs.file-max 6815744 EOF sysctl -p解释一下关键参数kernel.sem信号量参数数据库进程多线程并发访问时信号量耗尽会直接启动失败kernel.shmmax单个共享内存段的最大字节数这里我设置为 32GB如果服务器内存比这大可以继续调高。GaussDB 100 的 SGA 会映射到共享内存参数太小实例分配共享内存会失败vm.max_map_count进程可用的内存映射区域数量数据库大量并发连接时容易触顶fs.file-max系统级文件句柄上限高并发业务下文件描述符不够会报too many open files。改完还要检查用户级 limit。编辑/etc/security/limits.conf添加gaussdba soft nofile 655360 gaussdba hard nofile 655360 gaussdba soft nproc 655360 gaussdba hard nproc 655360 gaussdba soft stack unlimited gaussdba hard stack unlimited文件句柄和进程数限制必须一起调不然ulimit -n上不去数据库运行一段时间后就会开始报资源问题。加完配置后切换一次用户su - gaussdba再执行ulimit -n确认输出是 655360 才有效。3. 解压、安装、启动一步步来环境准备做完就到了真正的安装环节。这一步我分为四个阶段校验解压、配置环境、执行安装、启动验证。每个阶段都有一些操作细节照着做能少走很多弯路。3.1 校验文件并解压从网络或内网 FTP 下载安装包后第一件事不是解压而是校验完整性。很多生产事故就是安装包传输过程中损坏了几个字节导致安装到一半报莫名其妙的内核错误。官方一般会提供 MD5 或 SHA256 校验文件用对应工具做一次校验sha256sum GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit.tar.gz把输出值和官方提供的校验值对比。我的习惯是如果下载源不正规宁可多花时间找正规渠道也不贪图速度。校验通过后再解压tar -xzf GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit.tar.gz -C /opt/gaussdb_install解压时建议用-C指定目录避免文件散落得乱七八糟。解压后先看看目录结构通常会有bin、lib、admin、scripts这些目录。bin里放着gsql客户端和zctl.py管理工具lib里是运行库。如果你解压后发现缺少bin目录那说明可能下错包了立即排查。3.2 配置环境变量和安装用户解压后不要马上用 root 装一定先切换到专用用户su - gaussdba然后设置环境变量。有些版本的安装包会提供一个env.sh或者setenv.sh直接 source 就行如果没有手动在~/.bashrc里加export GBASE_HOME/opt/gaussdb_install export LD_LIBRARY_PATH$GBASE_HOME/lib:$LD_LIBRARY_PATH export PATH$GBASE_HOME/bin:$PATH export GSDB_DATA/data/gaussdb设置完成后执行source ~/.bashrc再用echo $LD_LIBRARY_PATH验证。环境变量这一步偷懒的话后面执行gsql或zctl.py时很容易报libgaussdb.so not found。GaussDB 100 的安装脚本一般叫install.py我在实际部署时用到的命令格式大致如下python install.py -U gaussdba -P Password123 -D /data/gaussdb -P 1888几个参数分别说下-U指定运行数据库的操作系统用户这里是gaussdba-P数据库系统管理员sys用户的初始密码注意密码复杂度要满足要求建议包含大小写字母、数字和特殊字符长度不少于 8 位-D数据目录也就是实例文件存放位置必须和前面规划的一致-P最后一个数据库服务监听端口这里用 1888生产环境建议用 1888 或自定义端口避免使用容易被扫描的默认端口也可以。安装脚本执行时会自动完成初始化实例、创建系统表空间、设置初始参数。正常情况下看到类似Install GaussDB successfully的提示就说明安装成功。这个过程中如果报错先看最后几行输出很多依赖问题和内核参数问题都会直接抛出来对照第 4 节排查。3.3 启动实例并做基本验证安装完成后用管理工具启动实例。GaussDB 100 的管理工具常见的是zctl.py在$GBASE_HOME/bin下。启动命令python $GBASE_HOME/bin/zctl.py -t start启动过程会有日志打到数据目录下的 log 文件里。启动后立刻检查进程状态ps -ef | grep gaussdb确认有gaussdb主进程存在再查看监听端口ss -lntp | grep 1888如果端口正常 LISTEN说明监听没问题。进一步用zctl.py看实例状态python $GBASE_HOME/bin/zctl.py -t status然后使用连接工具做一次本地连接验证gsql -d system -p 1888 -U sys -W Password123能进入 SQL 提示符代表整套安装已经通了。很多教程到这里就结束了但我个人还会再做两步在gsql里执行select version();确认版本和安装包一致执行show parameter查看几个关键性能参数是否合理。这里提醒一句gsql -W参数用于指定密码终端里会暴露在 shell 历史中生产环境建议用交互方式或者环境变量传入密码避免密码泄露。3.4 配置开机自启测试环境可以手工启动生产环境一般还需要考虑实例随操作系统自动拉起。GaussDB 100 本身没有强制要求怎么做我常用的两个方案方案一把启动命令追加到/etc/rc.local并确认该文件有可执行权限echo su - gaussdba -c python /opt/gaussdb_install/bin/zctl.py -t start /etc/rc.local chmod x /etc/rc.local方案二做成 systemd 服务单元在/etc/systemd/system/gaussdb100.service里写[Unit] DescriptionGaussDB 100 Database Afternetwork.target [Service] Typeforking Usergaussdba Groupdbgrp ExecStart/usr/bin/python /opt/gaussdb_install/bin/zctl.py -t start ExecStop/usr/bin/python /opt/gaussdb_install/bin/zctl.py -t stop Restarton-failure [Install] WantedBymulti-user.target实际生产我建议用 systemd 方案管理更规范崩溃自动重启也比手写脚本更可靠。配置好后执行systemctl daemon-reload systemctl enable gaussdb100.service就可以用systemctl start|stop|status统一管理数据库服务了。4. 安装过程中那些反反复复的坑这部分是我最想写的。前面流程看起来不复杂但真正动手时几乎每次都能遇到几个幺蛾子。我把踩过的坑按问题现象、原因、解决方案整理出来希望你看到的时候能直接绕过。4.1 报错 libaio.so.1: cannot open shared object file这是非常典型的依赖缺失问题。执行安装脚本时初始化进程需要调用libaio但系统里没装这个库。解决办法就是回到第 2.2 节用 yum 装好libaio和libaio-devel。如果问题依然存在检查/usr/lib64/libaio.so.1是否存在find /usr -name libaio.so*如果库文件存在但是路径没有在LD_LIBRARY_PATH中手动把/usr/lib64加进去试试。我遇到过一次特殊场景系统里同时装了 32 位和 64 位 libaio结果链接器找到 32 位库导致报错解决办法是显式指定 64 位库路径安装脚本前执行export LD_LIBRARY_PATH/usr/lib64:$GBASE_HOME/lib4.2 初始化报错 semget failed 或 Cannot allocate memory这个问题的根源基本可以锁定在内核信号量和共享内存参数不够。多核高配置服务器上尤其容易出现。解决办法就是执行第 2.4 节里的sysctl.conf修改然后sysctl -p让参数生效。这里有个细节修改后如果数据库安装脚本已经跑过一部分最好把数据目录下的初始化文件清掉重来一遍否则残留的配置和新参数不匹配下次启动还会报错。清掉重来的步骤要小心一定要确认数据目录里没有业务数据再删。我一般这样操作su - gaussdba -c python /opt/gaussdb_install/bin/zctl.py -t stop rm -rf /data/gaussdb/* su - gaussdba -c python /opt/gaussdb_install/bin/install.py -U gaussdba -P Password123 -D /data/gaussdb -P 18884.3 解压时 No space left on device这个错多数出现在/tmp分区太小。tar 包解压过程中需要临时空间如果/tmp只有几百 MB很容易撑爆。解决办法有两个一是设置TMPDIR指向空间充足的目录mkdir -p /opt/tmp export TMPDIR/opt/tmp tar -xzf GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit.tar.gz -C /opt/gaussdb_install二是干脆把安装包放到大分区上解压到同一分区下避免跨分区拷贝。还有一个小技巧解压前用tar -tzf查看包内文件和预估大小tar -tzf GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit.tar.gz | head -20 du -h GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit.tar.gz先知道大概需要多少磁盘空间再决定放哪个目录比解压一半报错再折腾省事得多。4.4 启动失败但日志里没有明显错误这种情况最让人头疼。我的排查路径是先看数据目录下的日志文件GaussDB 100 的实例日志一般在$GSDB_DATA/log/run下文件名类似gaussdb.log用tail -200查看启动最后一段。很多报错虽然没有打到屏幕上但日志里会写明。如果日志显示The instance has been initialized但进程就是起不来检查端口是否被占用ss -lntp | grep 1888如果被其他服务占用换一个端口重新初始化实例或者把占用端口的进程停掉。另外还要检查防火墙。EulerOS 20 SP8 默认可能启用了 firewalldfirewall-cmd --state如果防火墙是开启状态必须放行数据库监听端口firewall-cmd --add-port1888/tcp --permanent firewall-cmd --reload这个坑很隐蔽因为本地gsql连接不受影响远程连接才暴露容易让人误判为网络问题。建议安装完第一时间就放行端口省得后面排查半天。4.5 安装日志出现乱码EulerOS 20 SP8 支持多种字符集如果系统默认 LANG 是zh_CN.UTF-8安装工具的部分提示信息可能显示为乱码。这不影响安装结果但影响人眼判断。如果不想看火星文可以在执行安装前临时切换语言export LANGen_US.UTF-8如果语言包没装全可能还需要先安装glibc-locale-source来生成英文 locale。不过说到底这只是显示问题在排错时我更建议直接看日志文件用英文环境保证输出可读。为了让你快速定位我把常见问题整理成一个速查表问题现象常见原因排查命令解决方法libaio.so.1 not found缺少异步 I/O 库find /usr -name libaio.so*安装 libaio、libaio-develsemget failed信号量参数不足sysctl kernel.sem调大/etc/sysctl.conf中 kernel.semCannot allocate memory共享内存参数过小sysctl -a | grep shm调大kernel.shmmax、kernel.shmallNo space left on device磁盘或临时目录不足df -h清理空间或设置TMPDIR远程连不上防火墙阻挡监听端口firewall-cmd --state放行端口或关闭防火墙启动后进程自动退出端口冲突或数据目录权限不对ss -lntp、ls -ld /data/gaussdb改端口、修正目录属主5. 安装完成后的第一件事实例启动成功很多人觉得万事大吉直接开始导数据。但以我的经验接下来这几件事如果不做早晚要回头补课。我把它们当作安装流程的一部分顺便写在这里。5.1 核对版本和关键参数用gsql连接后先执行select version();确认数据库版本和安装包1.0.1对应避免装错补丁版本。然后再看几个和业务强相关的参数show parameter port; show parameter db_name; show parameter character_set;特别关注character_set如果业务需要 UTF-8 编码而初始化时设置错了后续改编码非常麻烦基本要重建实例。安装时我习惯显式指定字符集参数或者在安装后第一时间确认不要拖到业务数据写入后再改。5.2 修改默认密码和创建业务用户GaussDB 100 安装完成后系统会有一个超级管理员sys初始密码就是安装时-P指定的那个。但为了安全我建议安装完成后立刻用这个密码登录改成一个更复杂的密码alter user sys identified by NewPassword123;然后创建业务专用账号不要把sys直接交给应用系统create user app_user identified by AppPass123 default tablespace users; grant connect, resource to app_user;数据库账号和业务账号分离是生产环境最基本的权限边界。真出了权限事故时这条习惯能帮你保住大部分数据。5.3 开启日志归档和备份策略GaussDB 100 默认可能不开启归档模式但生产环境必须有备份方案。最简单的做法是先确认日志模式show parameter log_archive_mode;如果返回为 0说明没有开启归档。开启归档需要修改配置文件并重启数据库具体参数名不同版本有差异这里不展开但一定要在业务上线前搞定。另一个常被忽略的是物理备份目录权限备份目录必须让gaussdba用户有读写权限否则定时备份任务会在凌晨悄悄失败第二天起来才发现数据库没备份过那感觉实在酸爽。5.4 记录安装信息最后我还会把部署信息写成一个简单的部署文档包括安装包文件名、OS 版本、内核参数修改项、数据目录、端口号、初始账号、字符集参数。不要高估自己的记忆力三个月后你回来看这条记录会庆幸当时多写了几行。数据库运维不是把进程跑起来就结束而是让它出了问题能快速恢复、变更了能追溯原因。这才是“安装完成”真正的含义。本文还有配套的精品资源点击获取