简介:这是一份面向华为GaussDB 100 1.0.1的Linux部署资源包,专为EulerOS 20 SP8 64位环境准备,适合数据库管理员、运维工程师及GaussDB初学者用于安装、升级与初步调优。压缩包共6个文件,以Python自动化脚本为主体,涵盖安装、升级、功能库等环节,另含sha256校验文件,便于在部署时验证包完整性;整个资源包仅7.39MB,轻量易获取。已有1304人浏览学习。相较仅提供安装介质,此包附带可执行的部署辅助脚本,能够帮助用户在EulerOS环境中快速完成GaussDB 100的基本安装与版本升级,同时通过校验文件确保文件正确性,减少因包损坏或版本不匹配导致的部署失败,适合需要在离线或内网环境搭建GaussDB实验环境的技术人员参考使用。
1. 安装包初识:这个tar.gz里到底装了什么
拿到GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit.tar.gz这个文件,第一反应可能会有点懵。文件名很长,但其实信息量很足,拆开看就清楚了:GaussDB_100是产品名,1.0.1是版本号,DATABASE说明这是数据库内核主程序包,EULER20SP8表示适配的操作系统是EulerOS 20 SP8,64bit则是x86_64架构,最后的tar.gz是打包压缩格式。这套命名规则在华为系软件里很常见,看清楚这几个字段,基本上就能判断一个包跟自己的环境是否匹配。
GaussDB 100是华为自研的关系型数据库,主打的场景是OLTP在线事务处理。跟GaussDB 200/300那类分析型或分布式版本定位不同,100这个版本更偏轻量、单机高性能,有点像Oracle单实例的用法。我在生产环境里拿它跑过几套中等规模的事务系统,吞吐和稳定性都挺能打,而且部署结构简单,没有太多分布式组件要伺候,这对运维来说是个加分项。它同时兼容SQL标准,常见的数据类型、事务隔离级别、索引方式都有,从Oracle或MySQL迁移过来的团队上手压力不算大。
1.1 文件名里的信息量
文件名的每个字段都值得细琢磨一下。
GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit.tar.gzGaussDB_100:产品系列标识,对应数据库内核版本100。1.0.1:小版本号。这个版本属于可用的稳定分支,我在实际安装和测试中没遇到明显的内核级bug。DATABASE:说明是数据库服务端程序包。同系列还有TOOLS、CLIENT等独立包,用来装管理工具或客户端组件。EULER20SP8:目标OS版本。不是所有Linux发行版都能直接装,包内的二进制在编译时链接了特定glibc版本和系统库,跨系统移植容易出乱子。64bit:x86_64体系结构。现在主流服务器基本都是这个架构,ARM版是另一个独立的安装包,别混用。tar.gz:先用tar打包再用gzip压缩,是Linux下最常见的软件分发格式。
建议下载之前先拿md5sum算一下校验值,和官方提供的MD5比对一致再继续操作。压缩包在传输过程中损坏的情况不算少见,我曾经遇到过解压到一半直接报CRC错误的情况,最后重新下载才解决。
1.2 GaussDB 100的定位与适用场景
GaussDB 100在华为数据库家族里的位置,有点像Oracle的Standard Edition One,属于面向中小型业务系统的单机事务型数据库。它不太适合那种动辄几十个节点的超大数据仓库场景,但在几千上万个并发事务、总数据量几十TB以内的场景下,表现得相当扎实。
适合用GaussDB 100的场景包括:
- 企业核心OLTP业务,比如ERP、CRM、订单中心等。
- 从Oracle迁移的存量系统,特别是在信创替代背景下,兼容性迁移路径成熟。
- 需要强一致性事务保障的金融、电信类应用。
- 对部署复杂度敏感、希望用最少的人工维护换取稳定性的项目。
它支持标准SQL、存储过程、触发器、序列、视图、物化视图等常见数据库对象,也提供表空间、用户权限体系、在线备份恢复等企业级能力。在国产数据库里属于成熟度高、生态也比较完整的那一档。
2. 环境准备:EulerOS 20 SP8下先做哪些功课
拿到安装包直接解压安装,往往会在后面冒出各种莫名其妙的错误。我建议在动手之前,先花二十分钟把环境检查一遍。这个时间花得很值,因为后面排错消耗的时间往往是这几分钟的十倍以上。
2.1 系统基础要求
EulerOS 20 SP8是华为欧拉操作系统的稳定版本,基于openEuler 20.03 LTS维护。安装GaussDB 100之前,建议先跑几条命令确认环境:
# 查看系统版本 cat /etc/openEuler-release # 查看架构 uname -m # 查看内存和磁盘 free -g df -h /opt /home /data硬件方面,个人实际测试的经验值如下表:
| 资源项 | 最低要求 | 推荐配置 | 说明 |
|---|---|---|---|
| CPU | 2核 | 8核以上 | OLTP场景对CPU主频敏感 |
| 内存 | 4GB | 16GB以上 | 数据缓冲区(DATA_BUFFER)按内存的60%-70%预留 |
| 磁盘 | 10GB | 100GB以上 | 数据库文件、归档日志、备份文件分盘存放 |
| 文件系统 | ext4 | xfs | 建议xfs,大文件顺序读写性能更好 |
内核参数也需要检查。数据库对共享内存和信号量的默认配置经常不够用,常见的调优点包括:
# 查看当前信号量配置 cat /proc/sys/kernel/sem # 查看共享内存上限 cat /proc/sys/kernel/shmmax如果sem的值小于250 32000 100 128,或者shmmax低于1GB,建议调整。修改方式是在/etc/sysctl.conf里追加配置:
kernel.sem = 250 32000 100 128 kernel.shmmax = 68719476736 kernel.shmall = 16777216然后执行sysctl -p让配置生效。这一步虽然不是每次都必须做,但如果不做,初始化数据库实例的时候经常会出现共享内存不足的报错。
2.2 依赖包与运行用户
GaussDB 100安装时,对依赖包有三类常见的坑。
第一类是基础库缺失。在最小化安装的EulerOS上,可能会缺libaio、libaio-devel、numactl-devel、glibc-devel这几个包。安装命令:
yum install -y libaio libaio-devel numactl-devel glibc-devel第二类是时区和时间同步。数据库对时间一致性非常敏感,建议提前配置好NTP或chrony服务,避免后续排查问题时时间线对不上。
第三类是用户和目录规划。数据库中有一个硬性要求:不能用root用户直接安装和运行数据库服务。必须创建一个专用的操作系统用户,我用的是gaussdb:
groupadd dbgrp useradd -g dbgrp -d /home/gaussdb -s /bin/bash gaussdb mkdir -p /data/gaussdb chown -R gaussdb:dbgrp /data/gaussdb安装目录和数据目录分开,是我一直坚持的习惯。安装目录放二进制文件,数据目录放实例文件、日志、数据文件,这样备份和升级都方便,也避免了后续扩容时需要挪动文件系统的尴尬。
3. 解压与安装部署全程实录
3.1 tar.gz解压的正确姿势
tar.gz解压命令非常简单,但有几个细节很多人容易忽略。
tar -zxvf GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit.tar.gz -C /data/gaussdb参数解释:
-z:通过gzip解压。-x:解压模式。-v:显示详细过程,方便观察进度。-f:指定文件名。-C:指定解压目标目录。
如果不加-C,文件会被解压到当前目录。我曾见过有人直接在根目录下解压,结果文件散落在/底下,后续管理非常混乱。
解压完成后,进入解压目录看一眼结构:
cd /data/gaussdb ls -la正常情况下会看到一个类似GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit的目录,里面包含install.sh、bin目录、lib目录、admin脚本目录等。安装脚本一般叫install.sh,执行权限大概率已经设置好了,如果没有,先补一下:
chmod +x install.sh3.2 安装配置流程
安装的过程其实就是在跑一个交互式脚本。我建议用gaussdb用户执行,不要用root:
su - gaussdb cd /data/gaussdb/GaussDB_100_1.0.1-DATABASE-EULER20SP8-64bit ./install.sh脚本会先检查环境,然后问你几个关键选项目录。最重要的几个路径,我建议这样规划:
| 配置项 | 推荐值 | 说明 |
|---|---|---|
| 数据库软件安装目录 | /opt/gaussdb/app | 存放二进制和依赖库 |
| 数据库数据目录 | /data/gaussdb/data | 单独挂载大容量磁盘,存放数据、日志 |
| 数据库监听端口 | 1888 | 默认端口是1888,和传统数据库的1521、3306区分开 |
| 字符集 | UTF-8 | 绝大多数场景下别选别的 |
安装过程中还会要求设置数据库管理员(sys)的密码。这里提醒一下:密码策略默认要求强密码,大小写字母、数字、特殊字符至少包含三类,长度不低于8位。别嫌麻烦,直接用高强度密码,后面放到密码管理工具里就行,别用弱密码糊弄,等被扫出来再改就晚了。
安装完成后,脚本会提示初始化实例并启动数据库。我习惯多花几分钟做一次手动验证,确保数据库确实是正常跑着的:
# 切换到安装目录 cd /opt/gaussdb/app/bin # 连接本地数据库 ./zsql sys/密码@localhost:1888能够进到SQL提示符界面,说明基础安装是成功的。接下来可以跑一条简单的SQL验证事务能力:
CREATE TABLESPACE ts_demo DATAFILE '/data/gaussdb/data/ts_demo.dbf' SIZE 128M AUTOEXTEND ON NEXT 16M MAXSIZE 2G; CREATE USER demo IDENTIFIED BY 'Demo1234' DEFAULT TABLESPACE ts_demo; GRANT CONNECT, RESOURCE TO demo;这段SQL做三件事:创建一个独立表空间、创建一个业务用户、给用户赋基础权限。整个过程能顺利执行,说明存储引擎、权限体系、SQL引擎都是正常的。
3.3 服务启停与开机自启动
数据库安装完成后,用系统自带的服务管理工具去管它,比手动起进程靠谱得多。虽然没有默认配置systemd服务,手动补一个并不复杂:
cat > /etc/systemd/system/gaussdb.service << 'EOF' [Unit] Description=GaussDB 100 Database After=network.target [Service] Type=forking User=gaussdb Group=dbgrp ExecStart=/opt/gaussdb/app/bin/python /opt/gaussdb/app/bin/zctl.py -t start ExecStop=/opt/gaussdb/app/bin/python /opt/gaussdb/app/bin/zctl.py -t stop Restart=on-failure [Install] WantedBy=multi-user.target EOF配置好后执行:
systemctl daemon-reload systemctl enable gaussdb systemctl start gaussdb按我的经验,zctl.py脚本路径可能在不同版本里有差异,建议先手动跑一次/opt/gaussdb/app/bin/python /opt/gaussdb/app/bin/zctl.py -t status确认路径能通,再写进service文件。
4. 常见问题与排查技巧实录
这部分是重头戏。我把实际部署中踩过的坑和帮别人排查过的问题整理出来,希望能帮你少走弯路。
4.1 解压和安装阶段的问题
问题一:解压提示磁盘空间不足
这个最常发生在数据盘和根目录共用分区的情况下。解压看起来只是几十个GB的源码目录,实际上数据库安装包解压后占用的空间往往是你预期的两三倍。建议在解压前先用df -h确认目标目录有至少5倍于压缩包大小的可用空间。
问题二:libaio.so.1: cannot open shared object file
这个报错说明基础库缺失或版本不匹配。在EulerOS 20 SP8上,最直接的解决方式:
yum install -y libaio libaio-devel如果装完还是报错,可能是装到了非标准路径,执行一下ldconfig刷新动态库缓存。
问题三:zctl.py启动时报权限错误
八成是安装目录或数据目录的属主不对。确认一下:
chown -R gaussdb:dbgrp /opt/gaussdb /data/gaussdb4.2 初始化实例的问题
问题一:初始化时报共享内存不足
这个就是前面提到的内核参数问题。确认kernel.shmmax和kernel.shmall已经调大,并且sysctl -p生效了。注意,有些参数需要重新登录shell才会在当前会话中生效,改完最好重新登录一次。
问题二:监听端口1888被占用
如果在同一台机器上装过多个实例,或者1888被其他服务占了,安装脚本会报地址冲突。解决方式有两个:一是杀掉占用进程,二是在配置里把端口改成别的。个人建议直接改端口:
ALTER SYSTEM SET PORT=2888;改完重启数据库生效。
问题三:字符集问题导致中文数据乱码
初始化实例时,字符集一定要确认选对。如果已经初始化为非UTF-8,重建实例是唯一干净的解法。别想着改参数就行,数据文件里的编码已经定了,后面迁数据更痛苦。
4.3 运维阶段的问题
问题一:数据库启动后自动停止
这种情况常见于内存配置超出了许可范围。比如物理内存只有8GB,但把DATA_BUFFER配到了6GB,加上进程本身的消耗,系统内存吃紧,进程被OOM Killer杀掉。检查一下/var/log/messages里有没有Out of memory的记录。解法是把DATA_BUFFER调到物理内存的50%左右,留足系统和其他进程的余量。
问题二:DML操作极慢,大量等待锁
先跑一下SELECT * FROM V$LOCK_WAIT;看看有没有锁等待。业务侧的排查重点是是否有长事务没有提交,或者某个事务持锁后停顿,堵住后面的请求。一个比较实用的习惯是:在应用层设置事务超时,避免慢SQL长期持有锁。
问题三:表空间自动扩展失败
检查表空间所在的文件系统是否还有剩余空间。另一个容易被忽视的点是AUTOEXTEND的MAXSIZE上限,如果达到上限,就算磁盘有空间也不会继续扩展。建议:
ALTER TABLESPACE ts_demo DATAFILE '/data/gaussdb/data/ts_demo.dbf' AUTOEXTEND ON NEXT 16M MAXSIZE 32G;把上限放高一点,或者干脆关闭上限限制。
4.4 问题排查速查表
| 现象 | 可能原因 | 排查命令 | 解决建议 |
|---|---|---|---|
| 启动报共享内存不足 | kernel.shmmax过小 | cat /proc/sys/kernel/shmmax | 调大shmmax并重新登录 |
| 无法创建共享内存段 | 信号量耗尽 | ipcs -l | 调大kernel.sem四个值 |
| 端口冲突 | 其他进程占用 | ss -lntp | grep 1888 | 改端口或杀进程 |
| 连接被拒绝 | 监听未启动 | ss -lntp | grep 1888 | 检查zctl status和监听日志 |
| 中文乱码 | 字符集不匹配 | SHOW CHARSET; | 重建实例或转换客户端编码 |
| 系统日志无错误但启动失败 | 权限问题 | ls -la /opt/gaussdb/app | 检查目录属主 |
| 数据文件无法扩展 | MAXSIZE达到上限 | SELECT * FROM DV_TABLESPACES; | 调大MAXSIZE |
| 耗时查询杀掉后连接卡住 | 事务未回滚 | SELECT * FROM V$TRANSACTION; | 通过视图确认回滚进度 |
5. 安装完成后的必要检查与优化
数据库能起来只是第一步,离“可以交给业务用”还有几件事要做。我把这一阶段的检查和优化按优先级排个序。
第一件事:确认备份策略。
单机数据库最怕的就是磁盘损坏和误操作。GaussDB 100支持物理备份和逻辑备份两类手段。建议至少做到:
- 每天凌晨做一次全量逻辑备份,用
exp导出到独立的备份盘。 - 有条件的话配置归档日志,配合物理备份做时间点恢复。
- 备份文件至少保留7天,定期做一次恢复演练。
备份这事情,做过恢复演练才算真正放心。别等出事了才发现备份文件是坏的,那就是灾难中的灾难。
第二件事:检查系统资源限制。
数据库进程的文件句柄数和进程数上限如果太低,高并发下会出现too many open files。在/etc/security/limits.conf里追加:
gaussdb soft nofile 65536 gaussdb hard nofile 65536 gaussdb soft nproc 65536 gaussdb hard nproc 65536注意用root修改后重新登录,ulimit -n才能看到新值。
第三件事:设置数据库参数。
有几个参数我每次装完都会检查一遍:
ALTER SYSTEM SET DATA_BUFFER_SIZE = 8G; ALTER SYSTEM SET LOG_BUFFER_SIZE = 64M; ALTER SYSTEM SET UNDO_TABLESPACE_SIZE = 8G; ALTER SYSTEM SET TEMP_TABLESPACE_SIZE = 8G;具体数值根据业务负载和物理内存调整。原则很简单:数据缓存越大,读性能越好,但别大到导致系统自身无内存可用。
第四件事:验证远程连接。
做完本地连接验证后,建议从另一台机器测试远程访问:
./zsql sys/密码@192.168.1.10:1888如果远程连不上,检查两点:数据库的LISTEN_ADDRESS是否配置为0.0.0.0或实际网卡地址;防火墙有没有放行1888端口。常见的情况是数据库好好的,就是防火墙把端口挡了。
firewall-cmd --add-port=1888/tcp --permanent firewall-cmd --reload6. 服务启停与开机自启动
数据库状态管理,建议用自带的zctl.py脚本,把它封装成systemd服务,比手动起停可靠得多。
6.1 手动启停命令
# 启动数据库 python /opt/gaussdb/app/bin/zctl.py -t start # 停止数据库 python /opt/gaussdb/app/bin/zctl.py -t stop # 查看状态 python /opt/gaussdb/app/bin/zctl.py -t status这里强调一个细节:执行zctl.py的用户必须是启动数据库时使用的用户(通常就是gaussdb)。用root去执行启动命令,大概率会报权限错误,因为数据库进程以root身份运行是被安全机制禁止的。
6.2 配置systemd自启动
为了一个更干净、受系统管理的自启动方式,我在实际部署中会给GaussDB 100配置systemd服务:
cat > /etc/systemd/system/gaussdb.service << 'EOF' [Unit] Description=GaussDB 100 Database After=network.target [Service] Type=forking User=gaussdb Group=dbgrp ExecStart=/opt/gaussdb/app/bin/python /opt/gaussdb/app/bin/zctl.py -t start ExecStop=/opt/gaussdb/app/bin/python /opt/gaussdb/app/bin/zctl.py -t stop Restart=on-failure [Install] WantedBy=multi-user.target EOF配置完成后:
systemctl daemon-reload systemctl enable gaussdb systemctl start gaussdb注意:ExecStart和ExecStop里的路径,务必以你实际的安装目录为准。安装目录不同,路径不对会导致服务启动失败,查日志半天找不到原因。
如果服务器重启后想确认数据库确实自动拉起来了,用一条命令验证:
systemctl status gaussdb --no-pager -l状态显示active (running)就说明一切正常。
最后再分享一个小建议
安装数据库其实只是万里长征第一步,真正考验人的是后续的运维和调优。我在多次部署GaussDB 100的过程中最深的一个体会是:环境准备工作做得越扎实,后面出现诡异问题的概率就越小。把内核参数、系统限制、目录规划这些前置工作做足了,安装过程会顺利得让你觉得不真实。
另外一个从踩坑中得来的教训是:每次调整完配置,都要做一次完整的启动-连接-建表-插入-查询-停止的回归验证。别只瞄一眼进程在不在就觉得没事。数据库这种基础设施,小问题不及时暴露,积累到最后就是大事故。
如果你也正在准备在EulerOS上部署这套数据库,按着这篇文章的顺序走一遍,每一步确认无误后再往下推进,基本上不会出什么大岔子。遇到具体问题,优先看日志文件——GaussDB 100运行日志和告警日志会告诉你绝大部分问题的真实原因。机器不会说谎,日志也不会,多花点时间读日志,比蒙头猜原因高效得多。
本文还有配套的精品资源,点击获取