☰
GaussDB 100安装部署与运维实战:从tar.gz到JDBC连接
2026/10/21 12:10:34 网站建设 项目流程

简介:这是华为 GaussDB 100 1.0.1 面向 EulerOS 2.0 SP8 的 64 位数据库安装包,适合正在评估或部署 GaussDB 的企业 DBA、运维与开发人员使用。该版本以分布式架构、强一致事务、高可用和并行分析能力为核心,可支撑海量数据存储、高并发在线事务处理及 OLAP 场景,是华为云数据库生态的重要基础组件。压缩包共 6 个文件,约 7.39MB,主要包含 .gz 数据库发行包、Python 编写的安装/升级辅助脚本(含 SSH 密钥处理、公共函数库等)以及 sha256 校验文件;文件分工清晰,便于在部署前核对包完整性,并按脚本推进安装、升级等操作。目前已有 1313 人学习/下载。内含脚本可辅助完成环境准备与安装参数校验,提升部署效率;校验文件则为下载安全提供保障;结合文件组织方式,读者能快速理解安装入口、升级流程与校验逻辑,为后续在 EulerOS 环境完成真实部署和调优提供直观参考。

1. 拿到GaussDB 100安装包:从tar.gz到跑通一个国产数据库

某公司内部系统做信创适配,迁移目标选定了 GaussDB 100,我从内部拿到一个离线安装包:GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit.tar.gz。单看文件名就能读出关键信息:这是 GaussDB 100 的 1.0.1 版本,目标系统是 EulerOS 20 SP8 64 位。这个包解决的是在国产操作系统上快速部署一套事务型 OLTP 数据库的问题。装它本身不复杂,但坑点不少,尤其是操作系统的版本检测、初始化时的内存参数、以及启动后的日志管理。这篇笔记写给负责安装和维护它的 DBA、运维工程师,也写给那些刚接触 GaussDB 的开发同学,按着步骤走能少走很多弯路。

2. 安装前的准备:系统环境、依赖与安装包校验

2.1 系统与硬件要求:EulerOS 20 SP8 只是基础

我习惯在安装前先把系统信息打出来,避免装上之后才发现内核版本不匹配。GaussDB 100 1.0.1 对操作系统是有版本要求的,包名里写明了是 EulerOS 20 SP8,这意味着它是针对这个系统的内核和 glibc 编译的,所以先执行下面几条命令确认。

uname -a cat /etc/os-release free -g df -h

/etc/os-release里的VERSION_ID是安装脚本重点读取的内容。常见做法是要求20.03这样的版本号,如果小版本号比它高,比如20.06,脚本可能直接拒绝执行。free -g输出中,swap 可以小,但物理内存建议至少 2GB。我第一次在一台 1GB 的虚拟机上尝试安装,安装过程正常,但启动后跑一个稍微复杂点的查询就报内存不足,最后被 OOM 杀掉了。磁盘上,解压安装包至少预留 3GB,数据目录独立挂载,可用空间不要低于 10GB,否则后面归档日志和在线日志会把分区写满。

除了版本和内存,网络环境也要提前确认。数据库启动后需要监听业务网卡的 IP,如果/etc/hosts里主机名解析到了127.0.0.1,数据库会只监听回环地址,远程应用完全连不上。我一般这样修改:

192.168.10.21 gaussdb-host

改完用ping gaussdb-host验证解析到了内网 IP。这个不起眼的步骤,能避免后面“进程起来了但 tcp 端口不对”的排查。防火墙方面,测试环境直接关闭,生产环境放行数据库端口。GaussDB 100 默认端口是 1888,生产环境放行命令大致如下:

firewall-cmd --add-port=1888/tcp --permanent firewall-cmd --reload

另外还要处理 SELinux。安装脚本对 SELinux 的兼容性并不好,我见过数据库管理器进程起来后马上退出,最后定位到 SELinux 拦截了数据文件访问。如果允许,建议把 SELinux 置为 permissive。

2.2 安装包内容与校验:先确认没下错

拿到 tar.gz 后,先别急着解压,我一般先打印包内文件列表,确认是可用的安装包。

tar -tzf GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit.tar.gz | head -20

输出里应该能看到install.py、bin、lib、admin、license等目录和脚本。install.py是安装入口,bin里放着数据库进程和运维工具,lib里是运行时依赖库。如果包前半部分列出来的文件不完整,或者有奇怪的路径,就要怀疑包是否损坏或被人改过。

校验文件的完整性,我习惯用 md5sum,大多数离线包没有附带签名文件。

md5sum GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit.tar.gz

拿到哈希值后和提供方给的参考值比对。网络传输导致的文件损坏表现很隐蔽,tar 解压可能不报错,但安装到一半动态库加载失败,日志里全是cannot open shared object file,这种问题查起来非常费劲,不如装之前花十秒钟做校验。

解压后,可以进一步检查核心二进制对系统库的依赖:

tar -zxf GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit.tar.gz cd GaussDB100-1.0.1 ldd bin/gaussdb | grep "not found"

如果输出里出现not found,说明系统缺了对应的基础库。GaussDB 100 的安装包里已经把大部分运行库打进去了,如果还缺,通常集中在libc.so、libstdc++.so这些基础库上,这时候就要检查操作系统的软件源和兼容层是否完整。

2.3 创建用户和目录:数据库不能跑在 root 下

这是一个安全基线,也是 GaussDB 100 安装脚本的硬约束:数据库实例不能用 root 用户启动。安装前我会新建专用用户,规划好数据目录。

groupadd gaussdb useradd -g gaussdb -m -s /bin/bash gaussdb mkdir -p /opt/gaussdb chown -R gaussdb:gaussdb /opt/gaussdb mkdir -p /data/gaussdb chown -R gaussdb:gaussdb /data/gaussdb

软件目录放在/opt/gaussdb,数据目录单独挂载在/data/gaussdb。不要习惯性把数据放在根目录,数据库的在线日志和归档会持续增长,和系统文件混合在一个分区,很容易把根分区撑爆。若数据目录不是独立分区,至少保证所在分区有足够的剩余空间。

接下来修改系统资源限制,在/etc/security/limits.conf追加:

gaussdb soft nofile 65535 gaussdb hard nofile 65535 gaussdb soft stack unlimited gaussdb hard stack unlimited gaussdb soft memlock unlimited gaussdb hard memlock unlimited

改完重新登录 gaussdb 用户,执行ulimit -n验证。这个步骤经常被跳过,等数据库在高并发下报too many open files,再改就得重启实例,不如一开始就配好。

内核参数的调整也建议放在安装前。GaussDB 100 对vm.max_map_count有要求,默认值在大量并发会话时不够,容易触发Cannot allocate memory。我一般这样设置:

cat >> /etc/sysctl.conf << EOF vm.max_map_count = 262144 kernel.shmmax = 4294967295 kernel.shmall = 1073741824 EOF sysctl -p

shmmax和shmall的取值要结合物理内存大小,上面两组值在 8GB 内存的服务器上比较合适,内存更大可以按比例上调。这些参数必须在数据库启动前生效,否则初始化实例时共享内存相关的报错会接踵而至。

3. 静默安装与初始化:从tar.gz到可用数据库

3.1 解压与安装:install.py 的常规用法

切换到 gaussdb 用户,开始解压和安装。安装包放在/opt/gaussdb目录下。

su - gaussdb cd /opt/gaussdb tar -zxf GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit.tar.gz cd GaussDB100-1.0.1

解压后的目录名视包内容而定,这里以GaussDB100-1.0.1为例。执行安装脚本前,先确认数据目录不为空,如果目录下有旧实例文件,脚本会拒绝覆盖。

静默安装的做法是直接传入参数:

python install.py -U gaussdb -P /opt/gaussdb/GaussDB100-1.0.1 -G /data/gaussdb -D 1888 -T sys -V GaussDB_123

参数说明如下:-U指定操作系统用户,必须是安装目录和数据目录的所有者;-P指定软件安装路径;-G指定数据目录;-D指定实例监听端口;-T指定初始数据库用户,默认是sys;-V设置sys用户的初始密码。这里密码要满足一定强度,大小写字母加数字是最低要求。

执行过程中,install.py会做环境检查、写配置文件、初始化实例数据文件,然后尝试启动数据库。整个过程输出到终端的同时也会写日志。看到类似Installation completed successfully的提示,说明安装阶段完成。有些版本安装完会自动启动实例,有些不会,我习惯在安装后手动执行一次状态查询,不依赖脚本的提示。

3.2 初始化参数:修改 zengine.ini 而不是无脑默认

安装脚本会基于系统资源生成参数文件,路径通常在数据目录下的cfg/zengine.ini。这个文件相当于数据库的启动参数黑匣子,很多问题的根源都在这里。我不建议直接改完所有参数再启动,先把关键项检查一遍。

cat /data/gaussdb/cfg/zengine.ini | grep -E "^(LISTEN|PORT|LOG|DATA_DIR|SHARED)"

重点关注LISTEN_ADDR和PORT。如果脚本没有拿取到内网 IP,可能会把地址写成127.0.0.1,这时候必须改成业务网卡地址或0.0.0.0,否则远程应用连接不上。另一个关键项是DATA_DIR,确认它指向/data/gaussdb,避免后续数据文件散落在多个目录。

缓冲区参数DATA_BUFFER_SIZE默认值偏保守,我在一台 8GB 内存的机器上看到过默认只有 64M,跑并发查询很容易成为瓶颈。常见做法是按物理内存的 20% 左右调整,单位是字节。比如 8GB 内存,写成1073741824即 1GB。这个参数不是越大越好,设置过大时系统 swap 占用会增加,反而拖慢读写。

修改参数后必须重启数据库实例才能生效。我第一次改完没重启,直接跑了半天,还埋怨优化无效,后来才发现参数一直没生效。这个细节值得记下来。

3.3 验证安装:看进程、端口和日志

安装结束后,先用三个层面验证实例可用性。第一层是进程:

ps -ef | grep gaussdb | grep -v grep

正常情况下能看到gaussdb主进程,并且运行用户是 gaussdb。如果进程消失,第一个要看的就是刚才提到的zengine.ini和系统日志。

第二层是端口监听:

ss -lnpt | grep 1888

如果监听的是127.0.0.1:1888,说明前面的LISTEN_ADDR没有改对。如果完全没有输出,检查 firewalld 或脚本日志。

第三层是用命令行工具登录。GaussDB 100 自带的客户端叫zsql,在安装目录的bin下。

cd /opt/gaussdb/GaussDB100-1.0.1/bin ./zsql sys/GaussDB_123@127.0.0.1:1888

回车后能进入 SQL 提示符,说明数据库连接层正常。在 SQL 提示符下执行一条简单查询:

SELECT version();

输出里能看到数据库版本信息。此时再去看日志目录,通常位于数据目录的log子目录,alert.log记录实例启动和崩溃信息。我一般会在安装后手动重启一次,然后对比alert.log里最近的启动时间戳,确认日志记录正常,这样才能放心把应用接到后面。

4. 日常启停与基本运维:让数据库稳着跑

4.1 启动与停止:zctl 命令和它的脾气

GaussDB 100 的实例管理命令是zctl,同样在安装目录的bin下。启动数据库:

cd /opt/gaussdb/GaussDB100-1.0.1/bin ./zctl -t start -D /data/gaussdb

-D指定数据目录,如果目录不对,命令会直接报错。启动过程会检查zengine.ini和所有数据文件,日志会追加到alert.log。

停止数据库:

./zctl -t stop -D /data/gaussdb

注意zctl在执行停止前会检查是否存在活动会话。我在一次联调时直接执行 stop,等了五分钟都没有退出,以为卡死了。实际上它是在等待一个未提交的事务结束。解决方法是先通过zsql把应用账号的会话终止,或者等长事务跑完。不能无脑 kill 掉进程,强制杀进程容易导致数据文件不一致,恢复起来很麻烦。

查看状态:

./zctl -t status -D /data/gaussdb

输出会出现RUNNING或STOPED。状态查询不会自动检查进程是否真的存活,如果主进程被外部 kill 掉,但状态文件还残留,可能看到假 RUNNING 状态,所以状态查询后最好再执行一次ps -ef | grep gaussdb交叉验证。

4.2 登录与 SQL:用 zsql 干实际活

zsql是日常维护最常用的客户端,连接方式前面已经演示过。登录后第一步建议修改 sys 用户初始密码,避免后续所有人都知道默认密码:

ALTER USER sys IDENTIFIED BY 'NewPassword_123';

密码复杂度要求不低,太简单的字符串会被拒绝。生产环境建议关闭 sys 远程登录,只允许本机维护,业务账号通过独立的数据库账号连接。

创建业务账号和授权,语法和 Oracle 风格类似:

CREATE USER app IDENTIFIED BY 'App@123'; GRANT CONNECT, RESOURCE TO app;

这里要说明的是,GaussDB 100 的授权粒度比传统数据库细致,具体权限名可以查阅安装包自带的 SQL 参考文档。手头没有文档时,可以用HELP命令查看支持的语法。

日常巡检我习惯跑一条表空间使用率语句:

SELECT TABLESPACE_NAME, USED_SPACE, TOTAL_SPACE FROM ADM_TABLESPACES;

这个视图在 GaussDB 100 中通常可以看到每个表空间的使用情况。如果表空间使用率超过 80%,就要考虑扩展数据文件,或者清理历史数据。很多性能问题的根源就是表空间碎片化,及时巡检能起到预警作用。

应用侧开发同学常问的一个问题是:怎么查某张表的字段结构。用下面的 SQL 可以拿到列名和类型:

SELECT COLUMN_NAME, DATA_TYPE, DATA_LENGTH FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'DEMO_TABLE';

字段名是 Oracle 风格,实际使用的视图名可能是ADM_TAB_COLUMNS,不同版本略有差异。这条语句能省去翻文档的时间。

4.3 备份与恢复:给数据库留后悔药

备份是运维里最不能省的事。GaussDB 100 的逻辑备份工具通常是exp,命令行位置在 bin 目录下。导出一个 schema:

./exp sys/GaussDB_123@127.0.0.1:1888 file=/backup/db_$(date +%F).dmp owner=app

file参数指定备份文件路径,owner指定导出哪个用户下的对象。备份文件是二进制格式,文本编辑器打不开,保留时间根据业务要求定,我一般保留 7 天以上。

恢复时使用imp:

./imp sys/GaussDB_123@127.0.0.1:1888 file=/backup/db_2026-01-01.dmp ignore=Y

ignore=Y表示目标表存在时忽略错误。如果要迁移到另一个用户,可以用fromuser=app touser=app2参数。血泪教训是恢复前一定要确认目标库的数据目录空间足够。我有一次导入 10GB 备份,恢复到一半磁盘满,整个实例直接进入只读态,业务全部停摆,最后清理了归档日志才恢复过来。从那以后,我每次执行导入前先执行df -h确认可用空间。

逻辑备份适合中小数据量,对于上百 GB 的库,逻辑备份的恢复时间会非常长。更推荐的做法是用物理备份,直接对数据目录做一致性快照,配合归档日志实现时间点恢复。这部分和存储环境强相关,但基本思路是一致的:备份窗口选择业务低峰,备份完成后要定期做恢复演练,不能只备份不恢复,否则备份可能是个摆设。

5. 避坑与常见问题:我装 GaussDB 100 翻过的四个跟头

5.1 现象:安装脚本报 “OS version is not supported”

我曾在某个版本的欧拉系统上执行install.py,系统版本号是 20.06,而安装包文件名只精确到 20SP8。脚本检查系统版本未通过,直接退出了。原因在于安装脚本里硬编码了允许的VERSION_ID列表,列表里可能只有20.03,没有20.06。解决方法是查看安装脚本中负责系统版本匹配的函数,找到那个列表,把当前系统的小版本号手工加进去。这个方法的风险点在于绕过了兼容性检查,但只要你确认内核和 glibc 版本与目标系统差异不大,问题不大。有些安装脚本支持跳过系统检测的参数,用之前需要确认当前系统确实属于同一个发行版系列。装完以后我建议立刻做一次全量备份,这样即便后续出现问题,也能恢复到初始状态。

5.2 现象:数据库启动后端口监听在 127.0.0.1,远程连不上

安装完成后,我用ss -lnpt | grep 1888看到监听地址是127.0.0.1:1888,远程客户端全部连接超时。原因就是安装脚本默认绑定回环地址,没有自动获取内网 IP。解决办法是修改zengine.ini里的LISTEN_ADDR,改成内网 IP 或0.0.0.0,然后重启实例。这个坑很容易被误判为防火墙问题,我第一次排查时先关了防火墙,发现没用,最后才注意到监听地址。现在我在安装完第一步就是确认监听地址,而不是等业务反馈说连不上。如果你在云环境,可能要同时检查安全组规则和系统 firewalld,多层网络隔离叠加时排查起来更费时间。

5.3 现象:zsql 登录提示 “invalid username/password”

使用zsql sys/密码@127.0.0.1:1888登录时提示密码无效。实际原因不一定是密码错,而是初始化时密码复杂度不达标,比如只设置了小写字母和数字,数据库直接拒绝了。另一种原因是多次输错密码导致 sys 用户被锁。解决方式是通过本地免密方式登录:

./zsql / as sysdba

这条命令在系统用户与数据库启动用户一致时才有效,可以绕过密码验证。进入后执行:

ALTER USER sys IDENTIFIED BY 'NewPassword_123'; ALTER USER sys ACCOUNT UNLOCK;

重置完成后,要马上提醒所有使用人更新连接串。我曾见过密码已经重置,但同事还在用旧密码反复试,最后又把用户锁了的情况。

5.4 现象:/data 分区被写满,数据库进入只读模式

有次监控报警/data分区使用率到了 95%,数据库开始拒绝新的写入操作,应用侧报错 “database is in read-only mode”。原因是日志目录下的在线日志和trace.log不断增长,而数据库默认的日志清理策略比较保守。解决方法是启用日志轮转,在zengine.ini中调整归档保留参数,或者用系统的 logrotate 定期清理log目录下的历史文件。我一般把分区告警阈值设置为 80%,并写一个凌晨执行的清理脚本,保留最近 7 天的归档日志。强制清理日志时要谨慎,必须在数据库停止或确认归档已完成的情况下进行,否则可能破坏日志链。如果是物理备份,需要同时保证归档日志与数据文件的时间点一致。

6. 进阶:把 GaussDB 100 接到业务系统的一个实战

6.1 获取 JDBC 驱动并加载

数据库装上只是开始,业务系统能连上才是目的。GaussDB 100 提供了标准的 JDBC 驱动,驱动包通常是一个 jar 文件,放在安装包的driver目录下。把驱动拷贝到项目的lib目录,并在构建文件里依赖它。这里用一个简化的 Java 项目。

import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class GaussDbDemo { public static void main(String[] args) throws Exception { Class.forName("com.gaussdb.Driver"); String url = "jdbc:gaussdb://127.0.0.1:1888/gaussdb"; Connection conn = DriverManager.getConnection(url, "app", "App@123"); Statement stmt = conn.createStatement(); stmt.execute("CREATE TABLE IF NOT EXISTS demo (id int, name varchar(50))"); stmt.execute("INSERT INTO demo VALUES (1, 'gaussdb')"); ResultSet rs = stmt.executeQuery("SELECT id, name FROM demo"); while (rs.next()) { System.out.println(rs.getInt(1) + " " + rs.getString(2)); } rs.close(); stmt.close(); conn.close(); } }

驱动类名和 URL 前缀以驱动包内的说明为准,不同的版本会有差异。Class.forName加载驱动,DriverManager.getConnection建立连接,随后直接执行 SQL。这段代码是单连接模式,生产环境不要这么写,要使用连接池。

6.2 连接池配置与基本参数

生产环境最常见的做法是配置连接池,保证数据库连接可以被复用,避免每次请求都新建连接。连接池的核心参数有初始连接数、最大连接数、最大等待时间。按照业务并发量调整,不要上限设得过大,否则数据库端会话数会飙升,内存占用跟着失控。

连接池配置里,数据库 URL 建议加上连接超时和 socket 超时参数。比如:

jdbc:gaussdb://127.0.0.1:1888/gaussdb?socketTimeout=30&connectTimeout=5

连接超时设得短一些,能让应用在数据库故障时快速失败。应用侧还要设置空闲连接的回收时间,避免被数据库端断开后客户端还拿着失效连接。

6.3 快速验证:从迁移脚本到日常巡检

接入业务后,第一件事就是做数据迁移验证。从一个源库通过查询读出表数据,再写入 GaussDB 100。过程中最容易出问题的是数据类型映射,比如源库的DATE类型在 GaussDB 100 里是否兼容。我一般先建一张结构最简单的表,插入一条数据,再把应用里的真实查询语句跑一遍,确认没有语法兼容问题。

从那以后,我每上线一套 GaussDB 100 环境,都会强制走一遍完整的安装、参数调整、备份恢复和连接池验证流程。这个过程能过滤掉八成以上的隐性故障。希望这篇笔记里的步骤和踩坑记录,能帮你把这套数据库顺利跑起来。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询