简介:GaussDB 100 1.0.1是华为云面向企业级分布式数据库场景推出的稳定版本,支持海量数据存储与高并发处理,本压缩包专为EulerOS 20 SP8 64位环境封装,可满足开发测试及生产初始部署需求。资源共含6个文件,包括4个Python脚本、1个SHA256校验文件及1个数据库组件压缩包,整体体积约7.39MB,便于快速下载与分发。目前已有1313人下载学习,对于需要快速上手GaussDB 100的运维人员和开发者具有实际参考价值。解压后可直接获得安装与升级脚本、SSH密钥处理模块和函数库,能够帮助用户简化命令行操作、校验包体正确性,并在EulerOS环境中快速完成基础部署;同时,清晰的工具拆分也便于二次开发时复用,是学习华为分布式数据库机制的实用入门材料。
1. GaussDB 100 下载后才是真的开始:一次安装把大半坑踩完
拿到GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit.tar.gz这个包,第一反应是解压、运行、连库,三分钟搞定。实际上我见过太多在这里栽跟头的:解压倒是顺利,一执行初始化脚本就报Failed to create shared memory,或者直接卡在Permission denied,翻日志才发现系统参数、用户权限一项都没准备。GaussDB 100 这类企业级数据库对运行环境的要求比普通开源软件苛刻得多,它不是装上就能跑的黑匣子,安装前要把操作系统版本、内核参数、用户权限、目录规划全部对齐,否则装到一半再回头改,浪费的时间比重新部署还多。这篇文章就按我实际装过的流程,从环境准备、参数配置到安装执行、问题排查、最终验证,一步一步写透。适合正在装 GaussDB 100 的开发者,也适合要把这套数据库迁移到新服务器上的运维人员。
2. 环境准备:操作系统、运行用户与内核参数的硬性检查
2.1 操作系统与硬件要求:先确认你的机器不是“接近兼容”
这个安装包的后缀写得很清楚,EULER20SP8-64bit,意思是面向 EulerOS 20 SP8、64 位架构。很多人的第一反应是“我的是 CentOS 7.9,应该也能跑”,结果装到一半报一串 glibc 相关的错误。
先做两个最基础的检查,别跳过:
# 查看系统版本 cat /etc/os-release # 查看 CPU 架构 uname -m # 查看 glibc 版本(GaussDB 100 对 glibc 版本敏感) ldd --version | head -n 1从输出里至少确认三点:操作系统是 EulerOS 20 SP8(如果是 openEuler 20.03 或 20.09,通常也能兼容,但建议以官方支持列表为准);架构是x86_64而不是aarch64,因为包名里明确写了 64bit,一般默认指 x86_64;glibc 版本不能太低。
内存方面,我的经验是:如果只跑一个 GaussDB 100 实例做开发测试,4GB 内存起步;如果是生产环境或者准备导入大量数据,8GB 以上,数据目录所在磁盘剩余空间至少准备安装包体积的 5 倍。一个常见误区是只关注磁盘空间,忽略了/tmp的大小——安装过程会产生大量临时文件,/tmp不够也会直接中断。
2.2 创建运行用户:别用 root 直接跑数据库
GaussDB 100 安装规范里明确要求用一个非 root 用户来运行数据库进程。原因很实际:数据库进程如果以 root 身份启动,一旦被 SQL 注入或者存在安全漏洞,攻击者就能直接拿到系统最高权限。我一般习惯创建专用用户gaussdba。
# 创建用户和用户组 groupadd gaussdb useradd -g gaussdb -m -s /bin/bash gaussdba # 设置密码(注意密码复杂度,GaussDB 100 初始化时对密码策略有要求) passwd gaussdba # 规划目录 mkdir -p /opt/gaussdb/app mkdir -p /opt/gaussdb/data mkdir -p /opt/gaussdb/log # 目录属主全部交给 gaussdba chown -R gaussdba:gaussdb /opt/gaussdb这里有个细节:/opt/gaussdb/app放安装程序解压后的文件,/opt/gaussdb/data是数据目录,/opt/gaussdb/log放运行日志。目录规划得好,后面排查问题时能省不少事,不用在/home下翻半天。我见过有人把数据目录放在/root下面,结果用户切过去之后连写权限都没有,初始化一开始就失败了。
2.3 内核参数与资源限制:三处不调,启动必翻车
GaussDB 100 使用共享内存来做进程间通信和缓冲池管理,所以内核参数里kernel.shm、kernel.sem、fs.file-max这三类必须调到位。常见做法是直接修改/etc/sysctl.conf,再sysctl -p生效:
cat >> /etc/sysctl.conf <<'EOF' # 共享内存上限,设为物理内存的一半(单位:字节) kernel.shmmax = 4294967296 kernel.shmall = 1048576 # 信号量:SEMMSL、SEMMNS、SEMOPM、SEMMNI kernel.sem = 250 32000 100 128 # 文件句柄上限 fs.file-max = 6815744 # 禁止内存过度分配,避免数据库根据虚拟内存计算失败 vm.overcommit_memory = 0 net.ipv4.ip_local_port_range = 9000 65500 EOF # 立即生效 sysctl -pkernel.shmmax的值按物理内存一半估算就没问题;如果机器内存只有 4GB,设成2147483648也就够了。kernel.sem的四个参数分别对应信号量集合中最大信号量数、系统最大信号量数、每次操作的最大信号量数、系统最大信号量集合数,GaussDB 100 默认要求不能低于我上面那个值。
编辑完内核参数,还要改用户资源限制。/etc/security/limits.conf追加:
cat >> /etc/security/limits.conf <<'EOF' gaussdba soft nofile 65536 gaussdba hard nofile 65536 gaussdba soft nproc 65536 gaussdba hard nproc 65536 gaussdba soft stack 32768 gaussdba hard stack 32768 EOFnofile是文件描述符上限,数据库高并发连接时非常容易触顶;stack设置线程栈大小,默认 8MB 在 GaussDB 100 的某些加载场景下会不够。改完之后要重新登录gaussdba用户才能生效,用ulimit -n验证一下输出是否为 65536。
2.4 安装包校验:下载损坏是最冤的报错来源
传输大文件经常出问题,尤其是通过某些网盘或者 Windows 机器中转过的安装包,内容损坏了但文件名还是完好的。我一般会先校验 SHA256,再检查 tar 包的完整性:
# 对比官方发布的 SHA256 值 sha256sum GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit.tar.gz # 测试 tar 包能否完整列出内容 tar tzf GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit.tar.gz > /dev/null如果tar tzf在列出文件时中断,说明包已经损坏,直接重新下载,不要在坏包上浪费时间。还有一种常见问题是文件从 Windows 传过来后换了行符,导致内部.sh脚本执行时报bad interpreter,这种情况先dos2unix处理一下脚本,或者直接把包放到 Linux 机器上重新解压。
3. 安装部署:GaussDB 100 的安装流程与参数取舍
3.1 解压安装包:先解压、后迁移、再执行
安装包解压这一步看似简单,但目录放错位置后面会很麻烦。我习惯先把包解压到/opt/gaussdb/app下,再切换到gaussdba用户操作:
# 用 gaussdba 用户解压,避免 root 解压后文件属主混乱 su - gaussdba tar -xzf /tmp/GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit.tar.gz -C /opt/gaussdb/app # 查看解压后的目录结构 ls -l /opt/gaussdb/app解压后你会看到一个以GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit命名的目录。里面通常有bin、lib、admin等目录,以及安装脚本。注意不要用 root 解压完再把目录 chown 给gaussdba,虽然也能用,但某些脚本会检查安装目录的属主和权限模式,属主不对会直接拒绝执行。
3.2 环境变量配置:三条路径写错一条就启动不了
gaussdba用户的.bashrc里需要配置三个环境变量。这一步很多人不重视,结果启动数据库时提示找不到libz.so或者gaussdb命令找不到,都是环境变量没配对。
cat >> /home/gaussdba/.bashrc <<'EOF' export GAUSSHOME=/opt/gaussdb/app/GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit export LD_LIBRARY_PATH=$GAUSSHOME/lib:$LD_LIBRARY_PATH export PATH=$GAUSSHOME/bin:$PATH EOF # 使其生效 source /home/gaussdba/.bashrcGAUSSHOME指向解压后的根目录,bin目录下面放着zsql、gs_initdb这些工具,lib目录是运行时要加载的动态库。三个变量里最容易写错的就是GAUSSHOME里的版本路径,多写一层目录或者少写一层都会导致后续所有命令失败。我建议配置完成后先执行which zsql确认能找到命令,如果没输出,那说明 PATH 没生效。
3.3 创建数据库实例:初始化命令的参数说明与常用配置
创建实例的核心逻辑跟大多数数据库一样:指定数据目录、端口、字符集,然后初始化系统表空间。GaussDB 100 安装脚本常见的调用方式是install.py,不同小版本入口文件名略有差异,先进目录看有没有 install 开头的脚本:
# 进入安装程序目录 cd /opt/gaussdb/app/GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit # 常见安装命令格式 python3 install.py -U gaussdba -P 'Gauss@123456' \ -D /opt/gaussdb/data \ --port=1888 \ --charset=UTF8-U指定运行数据库进程的用户,-P是数据库系统管理员密码,-D指定数据目录,--port是数据库监听端口,--charset指定字符集。密码这里有个细节:GaussDB 100 对强密码策略比较敏感,太短的密码会在初始化检查那一步被拦下来,我一般用大小写字母加数字和特殊符号的组合,长度不低于 8 位。
如果安装脚本是install.sh,参数逻辑也相差不大。整个初始化过程会持续几分钟,期间会看到类似Create database successfully的日志输出。初始化完成后,数据目录下会出现pg_control或者类似的控制文件、日志目录、参数文件等。
3.4 启动数据库实例:从命令行启动到后台守护
初始化完成后数据库进程并不会自动启动,需要手动拉起。有两种方式:一是直接启动,二是在调试阶段以前台方式跑。
# 后台启动 GaussDB 100 gs_om -t start # 或者直接执行二进制 nohup gaussdb -D /opt/gaussdb/data > /opt/gaussdb/log/gaussdb.log 2>&1 &gs_om是集群管理命令,单机环境下也可以直接用它来启动。用nohup拉起二进制的方式适合快速测试,但生产环境还是建议用守护进程方式。启动后立刻看一下日志有没有报错:
tail -f /opt/gaussdb/log/gaussdb.log日志里出现database system is ready to accept connections或者类似语句,说明启动成功。如果一直卡在FATAL: could not create shared memory,回到 2.3 节检查内核参数,这一步是最高频的启动失败原因。
4. GaussDB 100 安装与启动常见问题排查避坑
4.1 现象:安装脚本执行时报mknod权限错误
安装到创建系统表空间那一步,抛出一个mknod: Operation not permitted。这种报错在容器环境里最常见,因为容器通常不允许普通用户创建设备文件。
原因:GaussDB 100 初始化时可能要在数据目录下创建设备节点或者使用特殊文件,容器环境缺了CAP_MKNOD权限,普通用户自然没有权限。
解决:要么换成物理机或者虚拟机环境安装,要么在容器启动参数里加--privileged。我一般直接建议换物理环境,不要在生产环境用特权容器挂数据库,安全隐患太大。
4.2 现象:连接数据库时报Permission denied但是密码正确
zsql连接数据库时提示Permission denied,但密码明明是对的,创建用户、授权都做过了。
原因:这个报错有七成可能性不是权限问题,而是监听地址不对。GaussDB 100 配置的监听地址默认是回环地址127.0.0.1,你用局域网 IP 去连,连接请求根本没到达数据库进程。
解决:查看配置文件中listen_addresses或PORT相关参数,改成0.0.0.0或者具体的网卡 IP,重启数据库进程。顺手用ss -lntp | grep 1888确认监听状态,看到监听在127.0.0.1:1888,说明刚才那个Permission denied就是地址配置问题。
4.3 现象:初始化时报out of memory或共享内存不足
初始化直接报could not allocate shared memory,或者在加载大对象时提示out of memory。很多人的第一反应是加内存条,其实问题往往出在shmmax参数太小,或者vm.overcommit_memory设置成 2 导致内存申请被内核拒绝。
解决:用sysctl -a | grep shm检查当前值,kernel.shmmax至少要大于数据库默认缓冲池大小。修改完执行sysctl -p,然后重新登录gaussdba用户再试。还有一个隐藏点:/dev/shm大小不足,df -h /dev/shm看一下,如果只有几十 MB,数据库默认的共享内存目录很可能就往这里放数据了。
4.4 现象:重启服务器后数据库起不来,日志里全是No such file or directory
服务器重启后 GaussDB 100 自动启动失败,查看日志是No such file or directory,但数据目录明明还在。
原因:数据目录所属的分区没有被正确挂载,常见于/opt是一个独立分区,服务器重启后挂载顺序发生变化,数据库启动时找不到数据目录。另一种可能是因为配置了 systemd 服务,但服务启动早于挂载完成。
解决:检查/etc/fstab,给/opt分区加上_netdev或者调整挂载顺序。如果是 systemd 管理,手动执行systemctl daemon-reload && systemctl restart gaussdb,再把服务配置里的After依赖加上挂载服务。从那以后我每次部署数据库,都会先把数据目录单独挂一个分区,并在部署文档里写明这个依赖关系。
4.5 现象:安装包在 Windows 上解压过,安装时全部脚本报bad interpreter
安装脚本报bad interpreter: /bin/sh^M,一看就知道是换行符问题。
原因:压缩包里的脚本原本是 LF 换行,Windows 解压工具把它转成了 CRLF,Shell 解析时把^M当成了解释器路径的一部分。
解决:进入解压目录,用find . -name "*.sh" -exec sed -i 's/\r$//' {} +批量修正换行符,再重新试装。如果是 tar.gz 包,直接把它拷贝到 Linux 机器上解压就不会有这个坑。
5. 装完怎么验证 GaussDB 100 是不是真的能跑
验证不是连接上就行,要按进程、端口、日志、SQL 实操、重启恢复五层去查。我一般按下面的顺序走一遍,十分钟就能判断这套环境合格不合格。
# 1. 进程验证:确认 gaussdb 进程在跑 ps -ef | grep gaussdb | grep -v grep # 2. 端口验证:确认监听正常 ss -lntp | grep 1888 # 3. 日志验证:确认最近没有 FATAL/WARNING tail -n 20 /opt/gaussdb/log/gaussdb.log命令输出里,进程列表能看到一个以gaussdba用户运行的gaussdb主进程,端口监听状态是LISTEN,日志尾部不该有FATAL级别的报错。这一层通过后,再用zsql做登录验证:
zsql sys/Gauss@123456@127.0.0.1:1888进入 SQL 交互后,跑一套最基础的读写链路——创建表空间、建表、插入、查询:
CREATE TABLE demo_table(id NUMBER, name VARCHAR2(64)); INSERT INTO demo_table VALUES(1, 'gaussdb-test'); SELECT * FROM demo_table;能正常返回数据,说明字符集、存储引擎、连接链路都是通的。然后再做一次重启验证,这是最容易被忽略的:shutdown后重新启动,确认实例能恢复到正常状态,否则服务器重启一次,你的数据库就再也起不来了。
从那以后,我每装完一套 GaussDB 100,都会强制自己走完这条验证链,不只是测试连接一下,而是把进程、端口、日志、读写、重启五关全部跑通。装完数据库不是玄学,每一步都验证到位就是最可靠的经验。希望这条安装流程能帮到你,少走点我当年踩过的弯路。
本文还有配套的精品资源,点击获取