简介:这是华为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 系统 |
| 64bit | 64 位系统 | 确认 CPU 架构是 x86_64 还是 aarch64 |
| tar.gz | 压缩归档格式 | 用 tar 解压,而不是 unzip |
2. 装之前把环境收拾利索
很多初次部署 GaussDB 100 的人喜欢上来就解压、执行安装脚本,结果被一堆内核参数报错和依赖缺失搞到怀疑人生。我的经验是:安装前花半小时把操作系统环境调好,比安装时报错再回头排查省三倍时间。这一步我习惯按“系统识别、依赖安装、用户准备、内核调整”四件事来做。
2.1 先确认系统版本和 CPU 架构
连接服务器后,第一步执行这两条命令:
cat /etc/os-release uname -m/etc/os-release会给出系统名称和版本,比如NAME="EulerOS"、VERSION_ID="20 SP8";uname -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 found;numactl:内存 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 "Gauss@123" | passwd --stdin gaussdba建好用户后,规划安装目录和数据目录。我的实践是把它们分开:安装目录放二进制文件,数据目录放实例数据。数据目录建议单独挂载大容量磁盘,比如/data/gaussdb:
mkdir -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.conf:
cat << '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 'Password@123' -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 'Password@123'能进入 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] Description=GaussDB 100 Database After=network.target [Service] Type=forking User=gaussdba Group=dbgrp ExecStart=/usr/bin/python /opt/gaussdb_install/bin/zctl.py -t start ExecStop=/usr/bin/python /opt/gaussdb_install/bin/zctl.py -t stop Restart=on-failure [Install] WantedBy=multi-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 'Password@123' -D /data/gaussdb -P 1888"4.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 默认可能启用了 firewalld:
firewall-cmd --state如果防火墙是开启状态,必须放行数据库监听端口:
firewall-cmd --add-port=1888/tcp --permanent firewall-cmd --reload这个坑很隐蔽,因为本地gsql连接不受影响,远程连接才暴露,容易让人误判为网络问题。建议安装完第一时间就放行端口,省得后面排查半天。
4.5 安装日志出现乱码
EulerOS 20 SP8 支持多种字符集,如果系统默认 LANG 是zh_CN.UTF-8,安装工具的部分提示信息可能显示为乱码。这不影响安装结果,但影响人眼判断。如果不想看火星文,可以在执行安装前临时切换语言:
export LANG=en_US.UTF-8如果语言包没装全,可能还需要先安装glibc-locale-source来生成英文 locale。不过说到底,这只是显示问题,在排错时我更建议直接看日志文件,用英文环境保证输出可读。
为了让你快速定位,我把常见问题整理成一个速查表:
| 问题现象 | 常见原因 | 排查命令 | 解决方法 |
|---|---|---|---|
libaio.so.1 not found | 缺少异步 I/O 库 | find /usr -name "libaio.so*" | 安装 libaio、libaio-devel |
semget failed | 信号量参数不足 | sysctl kernel.sem | 调大/etc/sysctl.conf中 kernel.sem |
Cannot allocate memory | 共享内存参数过小 | sysctl -a | grep shm | 调大kernel.shmmax、kernel.shmall |
No 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 'NewPassword@123';然后创建业务专用账号,不要把sys直接交给应用系统:
create user app_user identified by 'AppPass@123' default tablespace users; grant connect, resource to app_user;数据库账号和业务账号分离,是生产环境最基本的权限边界。真出了权限事故时,这条习惯能帮你保住大部分数据。
5.3 开启日志归档和备份策略
GaussDB 100 默认可能不开启归档模式,但生产环境必须有备份方案。最简单的做法是先确认日志模式:
show parameter log_archive_mode;如果返回为 0,说明没有开启归档。开启归档需要修改配置文件并重启数据库,具体参数名不同版本有差异,这里不展开,但一定要在业务上线前搞定。另一个常被忽略的是物理备份目录权限,备份目录必须让gaussdba用户有读写权限,否则定时备份任务会在凌晨悄悄失败,第二天起来才发现数据库没备份过,那感觉实在酸爽。
5.4 记录安装信息
最后我还会把部署信息写成一个简单的部署文档,包括安装包文件名、OS 版本、内核参数修改项、数据目录、端口号、初始账号、字符集参数。不要高估自己的记忆力,三个月后你回来看这条记录,会庆幸当时多写了几行。数据库运维不是把进程跑起来就结束,而是让它出了问题能快速恢复、变更了能追溯原因。这才是“安装完成”真正的含义。
本文还有配套的精品资源,点击获取