简介:人大金仓数据库KingbaseES V008R003C002B0100的Linux 64位安装包,是面向需要在国产化环境中部署数据库的运维人员与开发者的实用资源,用于解决Linux平台下金仓数据库的安装与初始化问题。该版本具备较强的OLTP与OLAP处理能力,支持标准SQL,采用多进程架构,在金融、政务、能源等关键行业已有成熟应用,并提供了高可用与灾难恢复机制。压缩包共3个文件,包括shell安装脚本、MD5校验文件与bin安装主体,整体约475MB,可先通过MD5校验包体完整性,再选择图形化或命令行方式安装,简化部署流程。目前已有196人学习下载,适合作为入门金仓数据库的实用起点。使用者可获得可校验的安装包及相应脚本,配合官方文档可快速完成搭建,并顺带理解多进程架构、高可用配置与日常运维要点,有效降低国产数据库的上手门槛。
1. 从 Linux 安装包到能跑业务:这张 tar.gz 背后到底装了什么
看到“KingbaseES-V008R003C002B0100-Lin64-install.tar.gz”这个文件名,第一反应应该是:这是一套完整的人大金仓数据库服务端,不是解压即用的绿色软件。V008R003C002B0100 是金仓 V8 系列里一个具体的 R3C2 版本,Lin64 表明目标架构是 x86_64 的 Linux,tar.gz 只是分发形式。装完之后你得到的不是一两个可执行文件,而是带数据目录、授权文件、日志和一套 PostgreSQL 风格工具的完整服务,日常打交道的是 sys_ctl、ksql、initdb、sys_hba.conf 这些命令和配置。
这篇文章解决的是三类问题:在一台没有图形界面的服务器上,这个包需要什么样的环境;从解压、静默安装到第一次用 ksql 连接数据库,最小命令序列是什么;以及装完必撞的几个坑怎么自查。适合正在做国产化替换,或者需要在麒麟 V10、统信 UOS 这类系统上独立完成部署的运维和开发工程师。标题里那个安装包只是故事的开始,后面才是关键。
2. 安装前把这三件事做对:账号、内核参数和磁盘布局
金仓安装本身并不复杂,复杂的是环境。我见过太多人一上来就解压、就 point 下一步,最后卡在进程起不来、共享内存分配失败、权限报错这些地方,反过来怀疑安装包有问题。其实九成问题出在系统侧。动手装之前,先把操作系统、运行账号、内核资源和目录权限这四件事定下来。
2.1 先确认操作系统版本和依赖库是否满足
文件名里写的是 Lin64,对应 x86_64 架构。生产环境里最常见的宿主是麒麟 V10(SP1/SP2)、统信 UOS,以及 CentOS 7/8 这类 RHEL 系系统。原则上只要是 glibc 2.17 以上的 64 位 Linux 都能装,但不同发行版的依赖管理方式不一样,所以检查系统是第一步,不是可选项。
# 看发行版、版本号,判断后面用 yum 还是 apt 装依赖 cat /etc/os-release # 确认 CPU 架构,x86_64 才和 Lin64 安装包匹配 uname -m # 看内核版本,部分国产系统内核较老,影响 glibc 选择 uname -r # 磁盘空间和内存,安装目录至少 5~10GB,数据目录单独留 50GB 以上 df -h /data free -g nproc这里有个经验:安装目录和数据目录分开。安装目录放系统盘,数据目录放独立的数据盘,这样系统盘损坏或者要重装时数据不受影响,后面做目录迁移也省事。如果数据盘是独立挂载,务必确认/data的读写权限正常,别等初始化数据目录时才发现是只读挂载。
依赖库方面,常见的是 libaio、ncurses、readline 这几个。CentOS 系用 yum,Debian 系用 apt,国产系统基本都带 yum 或 dnf。装完之后如果启动报找不到动态库,可以用ldd /opt/Kingbase/ES/V8/bin/kingbase看缺哪些库,逐条补齐。这一步看似基础,却是我在 linux 常用命令里头最常依赖的排查手段。
2.2 单独建一个 kingbase 账号,别用 root 一路装到底
金仓的安装向导允许你用 root 用户执行,但这一步埋了一个大坑:数据库服务进程不能以 root 身份运行。安装程序把二进制和目录建好,真正跑起来的进程必须属于一个普通用户。如果安装时目录属主是 root,后面用普通用户初始化数据目录就会一堆权限错误。
所以我的习惯是先建一个专用账号,名字就叫 kingbase。这个账号只干一件事:运行和运维数据库。
# 创建 kingbase 账号,指定 bash 作为登录 shell,并设置初始密码 useradd -m -d /home/kingbase -s /bin/bash kingbase echo "Kingbase@123" | passwd --stdin kingbase # 创建安装目录和数据目录,并把属主交给 kingbase mkdir -p /opt/Kingbase /data/kingbase chown -R kingbase:kingbase /opt/Kingbase /data/kingbase参数说明:-m表示同时创建 home 目录,-s /bin/bash保证后续用su - kingbase时能加载 bash 环境文件。数据目录单独建在/data/kingbase,和安装目录/opt/Kingbase分开,是刻意为之,后续做备份、扩容都从这个布局受益。
这里补一句:如果你是在已有服务器上补建账号,记得确认sudo不需要密码,或者直接记住一次 root 切换到 kingbase 的方式。后面所有启动、停止、初始化操作都用su - kingbase -c "..."执行,不要在 root 下强跑。
2.3 内核参数和 ulimit 一次配到位的参考值
数据库对内核共享内存和信号量的依赖非常直接。金仓每个后端进程都要通过共享内存做缓冲,内核参数太小,初始化就报 shared memory 相关错误;信号量不够,并发连接一多就开始玄学报错。这些参数最好在装之前一次配好,别等出问题再改。
# 追加到 /etc/sysctl.conf,然后 sysctl -p 生效 kernel.shmmax = 34359738368 kernel.shmall = 8388608 kernel.sem = 4096 2147483647 2147483646 512000 fs.aio-max-nr = 1048576 fs.file-max = 6815744 net.ipv4.ip_local_port_range = 9000 65500参数说明:
kernel.shmmax是单块共享内存段的最大字节数,建议不低于物理内存的一半,但不要大于物理内存总量。示例值是 32GB,如果机器只有 16GB 内存,改成 8589934592 更稳妥。kernel.shmall是共享内存页总数,示例值 8388608 对应 32GB(按 4KB 页计算)。它和 shmmax 是一对,只调前者不调后者,仍会触发分配失败。kernel.sem四个值分别控制信号量组数、每组最大信号量、系统级上限、进程数上限。这个组合在数据库文档里是常见推荐值,照抄即可。fs.file-max和fs.aio-max-nr影响高并发下的文件句柄和异步 IO 配额,生产环境建议按示例给足。
文件句柄限制是另一个高频翻车点。sysctl.conf管的是内核级上限,进程级上限还要靠 ulimit 控制,两者缺一不可。
# 追加到 /etc/security/limits.conf kingbase soft nofile 65535 kingbase hard nofile 65535 kingbase soft nproc 16384 kingbase hard nproc 16384配置完用su - kingbase -c "ulimit -n"验证,输出应该是 65535。这里有个容易忽略的点:如果你最后用 systemd 托管数据库服务,/etc/security/limits.conf可能不生效,必须在 systemd 单元文件里写LimitNOFILE=65535。这个细节我放到第 5 章展开,先记住有这回事。
提示:如果你在虚拟机上做实验,建议把物理内存设到 4GB 以上,同时确认
/dev/shm不低于 2GB。容器环境更要小心,/dev/shm默认往往只有 64MB,数据库启动大概率直接失败。
3. 解压到首次启动的最小命令序列
环境准备到位后,安装过程本身反而很快。整个过程可以拆成四步:解压、识别介质、静默安装、初始化并启动。每一步都有对应的失败信号,我会在命令后面标注排查方向。
3.1 解压 tar.gz、识别介质与授权文件
先建一个统一的工作目录,把安装包放进去,然后解压。注意解压后的内容可能比较大,建议目录落在空间充足的盘上。
mkdir -p /opt/install chown kingbase:kingbase /opt/install # 解压到 /opt/install,-C 指定目录,-xzf 表示解 gzip 压缩的 tar tar -zxvf /tmp/KingbaseES-V008R003C002B0100-Lin64-install.tar.gz -C /opt/install/ # 看解压结果,确认目录结构 ls -lh /opt/install/解压完成后,你会看到两种情况:一种是直接解出一个以版本号命名的目录,里面就是 setup 安装程序和安装资源;另一种是解出一个 iso 镜像文件,这时需要挂载后才能访问安装程序。区分这两种很简单,ls看看结果里有没有.iso后缀。
如果是 iso,挂载方式如下:
mkdir -p /mnt/kdb mount -o loop /opt/install/*.iso /mnt/kdb ls -lh /mnt/kdb-o loop让 iso 以块设备方式挂载,不需要额外安装工具。挂载后的目录里应该有 setup.sh 或 install.sh 之类的主安装脚本,以及一张授权文件的存放位置说明。
这里提前说授权文件的事。金仓的安装向导里有指定授权文件的步骤,安装时可以留空跳过,但后续启动服务必须有有效授权。常见的授权文件是 license.dat,一般放在安装目录的 license 或 etc 子目录下。我的习惯是在安装前就从厂商物拿到授权文件,丢到/opt/install/license.dat,安装时直接指定这个路径,避免后面启动时才发现缺授权,又得回头补配置。授权文件的获取属于商务流程,本文不展开,但“装完起不来大概率是 license 问题”这个判断你得先记住。
3.2 用响应文件做静默安装的命令与参数
有图形界面的机器可以用交互式安装,但服务器大多没有 X 桌面,我一般直接写响应文件做静默安装。响应文件本质上是一个 key=value 的配置文本,安装程序会按这个文件里的值执行安装,全程不需要人工点击。
# 写一份最小可用的响应文件 cat > /opt/install/install.conf <<'EOF' INSTALL_TYPE=full INSTALL_PREFIX=/opt/Kingbase/ES/V8 DATA_DIR=/data/kingbase/data PORT=54321 LICENSE_FILE=/opt/install/license.dat DB_USER=system DB_PASSWORD=Kingbase@123 EOF参数说明:
INSTALL_TYPE=full表示完整安装,包含服务端、客户端工具和必要组件。如果只想装客户端连接工具,可以改成 client,但生产建议用 full。INSTALL_PREFIX是安装根目录,最终二进制会落在/opt/Kingbase/ES/V8/bin下。DATA_DIR是数据目录,注意这里指的不是安装程序第一步建的空目录,而是数据库实例实际存放数据的位置,初始化实例时会用到。PORT默认 54321,这是金仓的习惯端口,和 PostgreSQL 的 5432 不同。除非端口冲突,否则不要改。DB_USER和DB_PASSWORD是安装完成后超级用户的信息。金仓默认超级用户名是 system,这里也叫它 system,密码务必设置成强密码,别用默认值。
写完后执行安装命令:
cd /mnt/kdb ./setup.sh -silent -f /opt/install/install.conf-silent表示静默模式,-f指向响应文件路径。执行过程中终端不会有交互,安装日志会写到安装目录下的 log 子目录里。看到进程正常退出且无报错,基本就成功了。
如果你不确定响应文件里字段名,可以先跑一次交互式安装,在向导最后一步,安装程序通常会输出一份本次安装的响应文件模板路径。把那份文件留下来,以后重装就是改两个值的事,比重新点一遍向导靠谱得多。
3.3 初始化实例、配置环境变量并启动一次 ksql
安装程序一般会在安装完成后初始化实例,但如果你遇到了初始化失败或者想重建实例,就得手工执行初始化。先把环境变量固化到 kingbase 账号的 shell 配置里,这样每次登录都能直接用命令。
# 写入 /home/kingbase/.bash_profile,追加到文件末尾 cat >> /home/kingbase/.bash_profile <<'EOF' export KINGBASE_HOME=/opt/Kingbase/ES/V8 export KINGBASE_DATA=/data/kingbase/data export PATH=$KINGBASE_HOME/bin:$PATH export LD_LIBRARY_PATH=$KINGBASE_HOME/lib:$LD_LIBRARY_PATH EOF # 立即生效 source /home/kingbase/.bash_profileKINGBASE_HOME让 shell 知道安装位置,KINGBASE_DATA是数据目录,LD_LIBRARY_PATH很关键,金仓的动态库不在系统默认路径下,不设置的话启动二进制时会报找不到 so 文件。确认环境变量没有问题后,初始化数据目录:
# 初始化数据目录,指定 UTF8 编码和 system 超级用户 initdb -D $KINGBASE_DATA -E UTF8 --locale=C -U system --pwfile=<(printf 'Kingbase@123\n')参数说明:-D指定数据目录,-E UTF8设置默认字符集,--locale=C避免 wegen 环境变量导致排序规则不一致。-U system指定超级用户名,--pwfile从标准输入读密码,比在命令行明文写密码安全,也不会进 shell 历史。
初始化完成后启动服务:
# 启动数据库,-l 指定日志文件路径 sys_ctl -D $KINGBASE_DATA -l /data/kingbase/log/startup.log start # 查看进程状态 sys_ctl -D $KINGBASE_DATA status # 连接数据库并执行一条 SQL 确认服务可用 ksql -U system -d test -p 54321 -c "select version();"ksql是金仓自带的交互式 SQL 工具,语法和 PostgreSQL 的 psql 基本一致。-d test连接 test 库,这是初始化时自动创建的默认数据库;-c执行单条 SQL 后退出。看到版本信息输出,说明整个安装链路已经通了。这时候再用\l看库列表,确认数据库列表符合预期。
如果 ksql 报连接失败,第一反应不是查网络,而是先看/data/kingbase/log/startup.log和安装目录下 log 子目录里的安装日志,启动失败的具体原因通常就在最后几十行。
4. 金仓安装现场的五个翻车现场:现象、原因、处理
这章是血泪经验汇总。以下五个问题,我在不同机器上轮番遇到过,每条都按“现象 → 原因 → 解决”写,排查思路可以直接复用。
4.1 root 账号装完启动失败:权限从哪来
现象:用 root 执行安装程序一路顺利,装完切换成 kingbase 用户启动,sys_ctl start报一串 permission denied,或者进程起来后立刻自我退出,日志里出现 root 相关字样。
原因:安装时某些目录权限被设置成了 root 属主,或者有人直接用 root 跑了启动命令。数据库服务进程按安全规范不允许以 root 身份运行,金仓的守护进程设计上也做了这一层限制。如果目录属主不对,普通用户连数据目录都进不去,更别谈写日志。
解决:
# 如果安装目录和数据目录出现 root 属主,一次性修改回来 chown -R kingbase:kingbase /opt/Kingbase chown -R kingbase:kingbase /data/kingbase # 切换到 kingbase 用户启动,不要用 sudo su - kingbase sys_ctl -D $KINGBASE_DATA -l /data/kingbase/log/startup.log start这个坑的通用解法就是:安装前建好账号,安装时用 kingbase 用户执行,目录属主从一开始就正确。装完才发现属主错乱,改权限也是一种后悔药,但要把运行中的旧进程先停干净,否则又会撞上文件被占用导致的权限锁死。
4.2 共享内存分配失败:内核参数没生效
现象:启动日志出现could not create shared memory segment或者No space left on device这类错误,但磁盘明明还很空。进程可能反复拉起后退出,sys_ctl status显示没在运行。
原因:数据库要申请一大块共享内存,而kernel.shmmax或kernel.shmall设得太小,内存申请被内核拒绝。这类报错在生产环境最常见于刚装完系统、直接按默认内核参数跑数据库的机器。另一种罕见但真实的情况是容器里/dev/shm太小,数据库没用系统共享内存而用了 POSIX 共享内存,一样会撞墙。
解决:
# 确认当前内核参数 sysctl -a | grep -E "shm|sem" # 针对 32GB 内存机器,把参数调上去并立即生效 sysctl -w kernel.shmmax=34359738368 sysctl -w kernel.shmall=8388608 sysctl -p如果是容器环境,用dd if=/dev/zero of=/dev/shm/test bs=1M count=1024先测一下/dev/shm的可用容量,不够就创建容器时加--shm-size=2g。这类问题修改完不需要重装,重启服务即可。
4.3 缺授权文件:安装“成功”却起不了服务
现象:安装过程没有任何报错,看起来一切正常。但启动服务时进程总是起来后很快消失,安装目录下的日志里出现授权文件相关的提示,比如 license 无效、授权过期或者找不到授权文件。
原因:安装向导允许跳过授权文件配置,但没有有效授权,服务端二进制在启动阶段会拒绝工作。授权文件通常和机器绑定,换务器、换网卡、甚至改机器名都可能让已有授权失效。
解决:先确认授权文件确实存在且路径正确。常见做法是放到安装目录的 license 子目录下,文件名一般是 license.dat。放好之后重启服务:
ls -l /opt/Kingbase/ES/V8/license/license.dat su - kingbase sys_ctl -D $KINGBASE_DATA restart如果日志仍然报授权问题,去确认授权文件对应的机器标识是不是当前服务器。授权文件就是数据库的续命钥匙,务必单独备份一份,别只留在安装包里。
4.4 54321 端口被占:数据库默认端口冲突
现象:启动时日志明确提示端口被占用,ss -lntp能看到 54321 端口已经被某个进程监听。如果没有明确提示,但 ksql 连不上,先怀疑端口。
原因:54321 是金仓的默认端口,同机可能跑了多个数据库实例,或者某个中间件刚好用了这个端口。还有一种情况是防火強策略拦了监听,表现也是连接超时,容易被误判为端口冲突。
解决:
# 第一优先排查:看 54321 被谁占用 ss -lntp | grep 54321 # 找到占用进程的 PID,再对照进程名确认身份 lsof -i :54321如果是其他数据库占用了端口,修改金仓数据目录下 kingbase.conf 里的port = 54320,然后重启。改完连接时ksql -p 54320跟进即可。如果 54321 并没有被监听,就要去查系统防火墙:firewall-cmd --list-ports或iptables -L -n确认 54321 是否放行。最容易被忽略的是云服务器的安全组策略,光改本机防火墙没用,还得去控制台放行端口。
4.5 忘记 system 初始密码:用 trust 方式重置
现象:安装时设置的超级用户密码被忘掉了,或者管理员离职没交接,ksql 连接提示密码认证失败。
原因:金仓默认把超级用户的密码写在数据目录的加密配置里,不知道密码就进不去。这类问题通常在交付后一个月内集中爆发,很多时候是初始密码记混了,把安装包里某些示例文档里的密码当成了实际密码。
解决:临时修改认证方式,把本地连接改为 trust 免密,进库改密码后再改回来。
# 进入数据目录,先备份认证配置文件 cd $KINGBASE_DATA cp sys_hba.conf sys_hba.conf.bak # 把 local 和 host 两行认证方式改成 trust,保存退出 vi sys_hba.conf # 找到类似 local all all md5 或 host all all md5 的行,改为 trust # 重启服务让配置生效 su - kingbase sys_ctl -D $KINGBASE_DATA restart # 免密连接并重置密码 ksql -U system -d test # 在 ksql 中执行 ALTER USER system WITH PASSWORD 'NewStrongPass123'; # 恢复配置并再次重启 \q mv sys_hba.conf.bak sys_hba.conf sys_ctl -D $KINGBASE_DATA restart注意整个过程要连贯,期间不要关闭当前窗口,否则改完密码后如果配置还没恢复,会留下一个临时免密的窗口期,这不安全。重置完成后用新密码验证一次连接,确认无误才算收尾。
5. 装完别急着交差:验证服务、改默认密码、用 systemd 托管
安装跑通只是第一步,交差前还有三件小事要做:验证数据库真的可靠、把弱口令清掉、让服务在重启后自动恢复。前两件事很多人忽略,等审计或者服务器宕机恢复时才发现问题。
5.1 三个基本健康检查
启动完成后,用三条 SQL 确认实例状态正常:
| 检查项 | 命令 | 期望结果 |
|---|---|---|
| 版本与实例 | select version(); | 返回金仓版本号 |
| 数据库列表 | \l | 能看到至少一个可连接的库 |
| 进程与端口 | sys_ctl status | 显示运行中,PID 存在 |
这些检查里最关键的是确认数据库能在非交互环境下正常响应查询,而不是靠systemctl显示一个假状态。注意 system 用户的初始密码如果还是安装时用的弱密码,尽早改掉,别拖到上线。
5.2 用 systemd 托管,重启不翻车
服务器重启后数据库要自动拉起,最常见的做法是使用 systemd 来托管服务。这样同时解决的还有第 2.3 章节提到的问题:systemd 环境下 limits.conf 的配置不生效,需要在服务文件里补上资源限制。
# /etc/systemd/system/kingbase.service [Unit] Description=KingbaseES V8 Database Service After=network.target [Service] User=kingbase Group=kingbase ExecStart=/opt/Kingbase/ES/V8/bin/sys_ctl -D /data/kingbase/data start ExecStop=/opt/Kingbase/ES/V8/bin/sys_ctl -D /data/kingbase/data stop Restart=on-failure LimitNOFILE=65535 LimitNPROC=16384 [Install] WantedBy=multi-user.target启用并启动服务:
systemctl daemon-reload systemctl enable --now kingbase systemctl status kingbaseRestart=on-failure能让非正常退出的进程自动拉起,LimitNOFILE和LimitNPROC替代 limits.conf 里的 ulimit 设置。生产服务器建议在[Service]段再补一行TimeoutStartSec=300,避免数据量大的实例启动慢被 systemd 误杀。
我自己的习惯是,每次装完金仓都会重启一下服务器验证自动拉起,再对着第 4 章的排查清单过一遍日志。这套流程看着笨,但确实能拦截掉大部分交付后才发现的环境问题。希望这篇能帮到正在准备安装人大金仓的你,一次装通,少走弯路。
本文还有配套的精品资源,点击获取