简介:人大金仓数据库 KingbaseES V008R003C002B0100 Linux 64 位安装包,面向需要部署国产关系型数据库的系统管理员、DBA 与企业 IT 团队,解决 Linux 平台上的安装与初始化问题。该版本具备完整的联机事务处理与联机分析处理能力,支持标准 SQL,并采用多进程架构与高可用机制,适用于金融、政务、能源等关键行业的核心业务场景。压缩包共 3 个文件,以 sh 安装脚本、bin 程序主体及 md5 校验文件组成,整体约 475MB,可先校验完整性,再通过图形化或命令行方式安装,灵活适配不同环境。目前已有 196 人学习下载,便于社区互助排查部署问题。获取该包即可获得完整数据库软件介质、校验工具与自动化安装脚本,能显著降低国产数据库试用与上线门槛,适合评估人大金仓在自主可控环境下的性能、安全性与兼容性表现;配套文档还可辅助深入理解安装、配置与运维要点。
1. 装国产数据库最怕的不是安装失败,而是装完了不会用
拿到“人大金仓数据库”的 Linux 安装包,文件名写着KingbaseES-V008R003C002B0100-Lin64-install.tar.gz。很多人的第一反应是解压、执行安装,结果要么卡在缺依赖,要么初始化后不知道初始密码,要么授权文件没放对位置导致建库报错。这篇笔记要把这个 tar.gz 背后的完整路径讲清楚:从版本号拆解、系统准备,到交互式与静默安装、手动初始化、服务注册,再到五个高频坑。读完你不光能装上一套 KingbaseES V8 系列数据库,还能把它当成生产库耐心运维,适合刚接手信创环境、手里只有安装包和一台离线 Linux 服务器的 DBA、运维和全栈工程师。
2. 拆解 KingbaseES-V008R003C002B0100-Lin64-install.tar.gz:先看清版本和运行环境
2.1 版本号里藏着的信息,以及拿到包后的第一件事
文件名里的V008R003C002B0100,我按项目经验拆成三部分理解:V008是主版本 8,R003是发布级,C002是兼容或定制特性版本,B0100是构建号。简单说,这套库属于金仓 V8 系列,是比较新的补丁包。在线上文档里看到“V8R3C2B100”之类的缩写,和这个包是同一个东西。记住这一点,搜索问题时能少踩很多坑。
拿到安装包之后别急着tar -zxvf。生产服务器一般是离线环境,我习惯先做三件事:校验文件完整性、列出包内清单、确认归档类型。尤其是安装包通过 sftp 断点续传传上来的,md5 对不上后面安装到一半才报错,那才叫欲哭无泪。命令很简单:
md5sum KingbaseES-V008R003C002B0100-Lin64-install.tar.gz tar -tzf KingbaseES-V008R003C002B0100-Lin64-install.tar.gz | head -20 file KingbaseES-V008R003C002B0100-Lin64-install.tar.gzmd5sum的输出要和你拿到包时的校验值一致,不一致就重新上传,不要心存侥幸。tar -tzf只列出文件名但不解压,可以提前看到里面有没有 setup.sh、install 脚本和数据目录模板;如果解压后内容很小,或者缺少授权文件模板,后面安装大概率会出幺蛾子。file命令用来确认这是 gzip 压缩的 tar 包,防止有人改了后缀,让你在tar: This does not look like a tar archive上浪费时间。
2.2 服务器配置要求与依赖检查
金仓在 Linux x64 上的最低要求是 2 核 CPU、2GB 内存,但你真要拿这个配置跑生产,就是给自己找麻烦。我经手的信创服务器,CPU 至少 8 核,内存 16GB 起步,数据盘单独挂载,目录和系统盘分离。下面这张表是我在做环境评估时常用的:
| 项目 | 最低要求 | 生产建议 |
|---|---|---|
| CPU | 2 核 | 8 核及以上 |
| 内存 | 2 GB | 16 GB 及以上 |
| 根分区 | 5 GB 可用 | 20 GB 可用 |
| 数据盘 | 10 GB | 按 3 年数据增量预估 |
| 操作系统 | CentOS 7 / 麒麟 V10 / 统信 UOS | 同左,x86_64 |
| 系统依赖 | libaio、numactl、libuuid | 无特殊要求 |
这里我特别提一下libaio。金仓的磁盘写入依赖异步 IO,缺这个库会出现“装上能连接、一跑大事务就报io_setup() failed”的诡异问题。检查依赖用rpm -qa配合ldconfig:
rpm -qa | grep libaio rpm -qa | grep numactl ldconfig -p | grep -E "libaio|libnuma"如果结果里没有 libaio,就用系统安装盘做本地软件源补齐。离线环境补 RPM 是常规操作,但要看清楚包架构是x86_64,装了i686的版本照样找不到。除了这两个库,还需要libuuid,它通常随系统自带,不用额外操心。
2.3 安装前必须处理的用户、目录和端口
别用 root 安装金仓。金仓的初始化过程默认拒绝 root 用户执行,即使勉强装上,后面服务也没法用普通用户启动。生产上我会建一个专用账号:
useradd -m -s /bin/bash kingbase mkdir -p /opt/Kingbase/ES/V8 mkdir -p /data/kingbase_data chown -R kingbase:kingbase /opt/Kingbase /data/kingbase_data目录建好之后,把安装包放到/home/kingbase或者/data下,不要在路径里带空格或中文。金仓默认端口是 54321,不是 5432,这也是新手最容易在防火墙配置里出错的地方。检查端口占用:
ss -lnt | grep 54321如果有别的进程占用,可以换 55432,但我不建议频繁换端口,因为kingbase.conf、连接串、防火墙规则全都要跟着改。时区也要顺手看一眼,最好统一成Asia/Shanghai,否则导入带时间戳的数据会平白多出几个小时的偏差。用timedatectl status确认,不对就改。
2.4 如果数据盘是独立分区,先把挂载搞定
很多服务器数据盘已经独立挂载,但安装说明里没提。遇到这种情况,我一般会在装库前确认/data的挂载状态和权限:
df -h /data mount | grep /data如果/data是新加的裸盘,需要格式化并写入/etc/fstab。这里不展开说文件系统细节,但要注意:数据目录的属主一定要是 kingbase,且挂载选项里不要加noexec。曾经有同事在/data上挂了noexec,结果解压出来的 setup.sh 怎么执行都提示 permission denied,排查到最后才发现是挂载参数的问题。
3. 在 Linux x64 上完成安装:交互式与静默式两种走法
3.1 解压并启动控制台安装
环境准备好之后,终于可以解压了。解压到/data/kb_install,然后看里面有哪些文件:
tar -zxvf KingbaseES-V008R003C002B0100-Lin64-install.tar.gz -C /data/kb_install cd /data/kb_install ls -l金仓不同小版本的安装脚本名称可能不同,常见是setup.sh,也有叫install.sh的。先ls确认一下,然后执行控制台安装:
./setup.sh -i console-i console是字符界面安装。如果服务器没有图形桌面,千万别直接跑./setup.sh,它会因为找不到 DISPLAY 而报错,或者卡在图形初始化上。console 模式把所有步骤放到终端里,操作逻辑很简单:一路回车接受默认,碰到输入项按提示填。需要格外注意的有三个位置:
- 安装模式选“典型”还是“自定义”。如果这台机器需要装额外组件,选自定义,否则典型就够。
- 安装目录默认是
/opt/Kingbase/ES/V8。我建议保持默认,后续所有运维文档和脚本都基于这个路径,改了路径等于给自己埋雷。 - 数据目录。安装器会要求指定数据目录并执行初始化。如果数据盘是独立分区且还没挂载,先回到上一节处理,不要跳过。
console 模式下如果界面乱码,先执行export LANG=C再跑。乱码一般不阻塞安装,但看着心烦。
3.2 用 response 文件做静默安装
给客户做批量交付时,我不可能坐在终端前一台台点下一步。静默安装是唯一选择。金仓的 response 文件本质上是 key=value 文本,常见写法如下:
install_type=full kb_install_dir=/opt/Kingbase/ES/V8 kb_data_dir=/data/kingbase_data kb_license=/data/kingbase_install/license.dat kb_port=54321 kb_encoding=UTF8 kb_case_sensitive=n kb_auth_method=md5保存为install.properties,然后执行:
./setup.sh -i silent -f install.properties这里几个参数我逐一说明。install_type=full会把数据库引擎和常用工具一起装上,如果你只想装客户端工具可以改成client。kb_license指向授权文件,这个文件决定了你能用多少并发、哪些高级特性;没放授权文件安装不会失败,但后续建库时会有授权提示。kb_encoding=UTF8建议固定,不要选 GBK,否则以后导 UTF-8 数据全是乱码。kb_case_sensitive=n表示大小写不敏感,如果你项目是从 Oracle 迁移过来的,选n更贴近 Oracle 的习惯。
静默安装有一个“看着成功但实际没初始化”的情况:安装器返回 0,目录也有,但数据目录是空的。原因通常是kb_data_dir的父目录属主不是 kingbase 用户。解决办法是安装前就chown -R kingbase:kingbase,别让安装器用临时目录去写。
3.3 安装后的目录与进程检查
安装成功的标志不是看到 “install completed”,而是ksql能输出版本号、数据目录里有kingbase.conf。检查命令:
ls -l /opt/Kingbase/ES/V8 ls -l /data/kingbase_data du -sh /data/kingbase_data ps -ef | grep kingbaseps里能看到kingbase -D /data/kingbase_data这样的进程,说明数据库已经跑起来了。如果只看到kingbase: writer process之类的后台子进程,那是正常的。kingbase.conf是后续所有运维调参的中央文件,端口、内存、日志开关都在里面;sys_log目录是启动日志和错误日志的位置。装完先看一眼这个文件的属主:
ls -lh /data/kingbase_data/kingbase.conf属主如果不是 kingbase,后面连接会报“配置目录权限不安全”的警告,用chown kingbase:kingbase -R /data/kingbase_data一次性修好。
3.4 安装失败后如何重试
安装这件事失败率高,尤其在环境不干净的服务器上。我的经验是:失败后不要立刻重跑 setup.sh,先清理再重装。具体步骤是把安装目录和数据目录都清掉,避免安装器误判“已安装”然后跳过初始化。命令如下:
rm -rf /opt/Kingbase/ES/V8 rm -rf /data/kingbase_data userdel -r kingbase # 如果用户也建乱了然后重新建用户、建目录、跑安装。不要怕删,刚装完的库没有业务数据,删了反而是最省事的后悔药。如果重装后还是失败,优先看/tmp下安装器生成的日志,文件名里通常带install和日期,里面会明确告诉你是授权过期、依赖缺失还是路径权限问题。
4. 初始化数据目录与服务管理:让“装完”变成“真能用”
4.1 手动初始化数据目录:initdb 的参数要一次调对
如果安装器没有自动初始化数据目录,或者你要把数据目录迁到新挂载的大盘上,就需要手动initdb。金仓的initdb和 PostgreSQL 同源,但参数更贴近金仓自己的模板。我的固定用法:
/opt/Kingbase/ES/V8/bin/initdb -D /data/kingbase_data \ -U system \ -A md5 \ --pwprompt \ --encoding=UTF8 \ --compatible-mode=oracle参数解释:
-D数据目录,必须存在且属主是 kingbase。-U system创建超级用户名,金仓默认叫system,不是postgres,这是它和 PG 最明显的差异之一。-A md5客户端认证方式。生产环境用 md5 或 scram-sha-256,测试环境也要避免 trust。--pwprompt交互式输入 system 密码。不要用空密码,后面找回密码是血泪。--encoding=UTF8字符集,要存中文就必须写。--compatible-mode=oracle打开 Oracle 兼容模式。如果项目是从 Oracle 迁过来的,没有这个模式,dual表、PL/SQL 可能直接失效。
initdb 完成后会要求输入密码,看到 “Success. You can now start the database server” 就是成功了。如果提示缺库,比如libpq.so.5,回看第 5 章处理。
4.2 用 sys_ctl 启停数据库
启停数据库不要直接调kingbase二进制,用同目录下的sys_ctl。它相当于 PG 的pg_ctl,负责启动、停止、状态查询和日志落盘:
/opt/Kingbase/ES/V8/bin/sys_ctl -D /data/kingbase_data \ -l /data/kingbase_data/sys_log/startup.log start-l指定日志文件绝对路径。日志目录如果不存在,启动会直接失败,所以先执行mkdir -p /data/kingbase_data/sys_log。启动后立刻看状态:
/opt/Kingbase/ES/V8/bin/sys_ctl -D /data/kingbase_data status看到server running就成功。停止库的命令:
/opt/Kingbase/ES/V8/bin/sys_ctl -D /data/kingbase_data stop -m fast-m fast相当于 Oracle 的 immediate,会等待事务中止后停止,避免数据丢失。除非库已经卡死,否则不要用-m immediate。
4.3 注册 systemd 服务:开机自启
数据库没有开机自启,相当于给自己埋雷。我用 systemd 管理,在/etc/systemd/system/kingbasees.service写入:
[Unit] Description=KingbaseES database server After=network.target [Service] User=kingbase Group=kingbase Type=forking ExecStart=/opt/Kingbase/ES/V8/bin/sys_ctl -D /data/kingbase_data -l /data/kingbase_data/sys_log/startup.log start ExecStop=/opt/Kingbase/ES/V8/bin/sys_ctl -D /data/kingbase_data stop -m fast ExecReload=/opt/Kingbase/ES/V8/bin/sys_ctl -D /data/kingbase_data reload Restart=on-failure LimitNOFILE=65536 LimitNPROC=65536 [Install] WantedBy=multi-user.targetLimitNOFILE和LimitNPROC必须写。金仓连接数一上来,文件描述符不够的报错很常见,默认 1024 根本不够用。写完执行:
sudo systemctl daemon-reload sudo systemctl enable --now kingbaseesType=forking是因为sys_ctl start会 fork 出后台数据库进程。如果启动失败,用journalctl -xeu kingbasees看日志。还有一个容易忽略的点:如果数据库监听的端口、socket 目录在kingbase.conf里改过,systemd 的ExecStart参数也要同步,否则重启后根本找不到实例。
4.4 首次连接验证:ksql 跑通建库建表
装完库之后,连接验证至少要包含两步:能不能登录、能不能建表。命令:
/opt/Kingbase/ES/V8/bin/ksql -U system -h 127.0.0.1 -p 54321 -d postgres-d postgres是默认维护库,如果你 initdb 时没建test,用postgres最稳。登录成功后执行:
create user app_user password 'App@1234'; create database app_db owner app_user; \q如果提示 system 密码不对,看第 5 章重置密码;如果提示FATAL: no pg_hba.conf entry for host,那是认证文件没加对应 IP 的规则。去/data/kingbase_data/pg_hba.conf加一行:
host all all 0.0.0.0/0 md5改完执行sys_ctl reload生效。这一步几乎是远程连接必须做的,漏掉的概率非常高,我每次装完都先检查。
5. 装完就“翻车”的五个常见坑:现象、原因与修复顺序
5.1 libpq.so.5 找不到
现象:执行/opt/Kingbase/ES/V8/bin/ksql报error while loading shared libraries: libpq.so.5: cannot open shared object file。
原因:金仓自带的lib目录没有进入LD_LIBRARY_PATH,系统默认找不到数据库自带的libpq。
解决:先用ldd /opt/Kingbase/ES/V8/bin/ksql确认缺失,再设置环境变量:
export LD_LIBRARY_PATH=/opt/Kingbase/ES/V8/lib:$LD_LIBRARY_PATH想永久生效就写进~/.bashrc:
echo 'export LD_LIBRARY_PATH=/opt/Kingbase/ES/V8/lib:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc如果是用 systemd 启动的服务,还需要在[Service]段加一行Environment=LD_LIBRARY_PATH=/opt/Kingbase/ES/V8/lib,否则服务能起但命令行工具会崩。
5.2 system 初始密码到底在哪
现象:安装时没注意初始化输出,连接时一直报password authentication failed for user "system"。网上教程里“system/system”“system/123456”试了一圈都进不去。
原因:金仓初始化时不会固定一个“所有人一样”的密码。console 安装或静默安装如果没走完密码配置,系统会生成一个随机 token 写进安装日志。网上很多旧版本教程写的默认密码,在 V8R3C2B0100 上已经不管用了。
解决:如果用的静默安装,先看install.properties里的kb_password字段。没填的话用单用户模式重置:
/opt/Kingbase/ES/V8/bin/sys_ctl -D /data/kingbase_data stop /opt/Kingbase/ES/V8/bin/kingbase -D /data/kingbase_data --single -P 54321在>提示符下执行:
alter user system password 'NewStrong#2024';输入exit退出,再用新密码连接。注意单用户模式要求数据目录属主是 kingbase,否则会报 “could not create lock file”。
5.3 授权文件 license.dat 的位置和有效期
现象:数据库能启动,但创建数据库或查询某些视图时提示license expired或a valid license is required。
原因:安装器没找到有效授权文件,装了默认试用授权,过期后功能受限。金仓授权文件固定叫license.dat,文件名不能改。
解决:拿到正式授权后,把它放到/opt/Kingbase/ES/V8/bin/license.dat或安装时指定的kb_license路径,确保属主是 kingbase,然后重启数据库。确认授权是否加载:
/opt/Kingbase/ES/V8/bin/ksql -U system -d postgres -c "select show_license();"如果输出里有expiration_date和并发数,说明授权已生效。如果这个函数不存在,试试select * from sys_license;,两个都不行就看/data/kingbase_data/sys_log/startup.log里关于 license 的日志行。
5.4 数据盘被 WAL 日志撑爆
现象:业务突然全部连不上,df -h一看数据盘 100%。数据库日志和 WAL 文件把盘填满,数据库反复崩溃。
原因:默认配置里日志保留量和 WAL 增长没有上限,高并发下几天就能把盘打满。
解决:先清理能清的临时文件和旧归档,然后进kingbase.conf调参数:
log_truncate_on_rotation = on log_rotation_age = 1d log_rotation_size = 100MB max_slot_wal_keep_size = 1GB改完sys_ctl reload,不用重启。同时挂一个定时任务,把老日志压缩归档。生产库一定不要把 WAL 目录和数据文件放在同一个只有几十 GB 的分区,这是硬教训。
5.5 JDBC 驱动与连接串不匹配
现象:navicat 连得上,Java 程序用jdbc:postgresql://host:54321/db却连不上,报Connection refused或握手失败。
原因:金仓 JDBC 驱动是专用 jar,不是 PostgreSQL JDBC。连接 URL 前缀必须是jdbc:kingbase8://,端口是 54321。用 PG 驱动即使网络通,也可能在握手阶段被拒。
解决:换成官方 kingbase8 驱动,URL 写法:
String url = "jdbc:kingbase8://127.0.0.1:54321/app_db"; String user = "system"; String pass = "你的密码"; Class.forName("com.kingbase8.Driver");如果你不确定驱动类名,把 jar 包解开看META-INF里的 Driver 类名,比猜靠谱。还要注意,java 项目里如果混用了 postgresql 和 kingbase8 两个驱动,有时会因为 DriverManager 加载顺序出错,建议只放一个金仓驱动。
6. 金仓装完之后,我习惯做的最后三个小动作
第一件事,把LD_LIBRARY_PATH写进/etc/profile.d/kingbase.sh,而不是只靠用户手工 source。因为 crontab 里的环境比交互终端干净很多,脚本里漏了环境变量会得到一堆找不到 lib 的报错。我的统一写法:
# /etc/profile.d/kingbase.sh export PATH=/opt/Kingbase/ES/V8/bin:$PATH export LD_LIBRARY_PATH=/opt/Kingbase/ES/V8/lib:$LD_LIBRARY_PATH第二件事,用一条 SQL 快速确认实例状态和兼容模式,比翻日志直观:
select version(); show compatible_mode; select show_license();如果compatible_mode输出为空或不含 oracle,而你所在的项目又依赖 Oracle 语法,就要趁数据量还小的时候考虑重新初始化,或者调整连接参数,而不是等项目快上线才发现dual表查询都过不了。这个“兼容模式”是金仓从 Oracle 迁移项目的关键检查点,装完库第一分钟就该确认。
第三件事,克隆测试环境时,我不会再重复跑安装程序。直接在目标机器上解压一个打包好的整目录,改掉kingbase.conf里的port,用同样的绝对路径启动,十几分钟就能多出一套库。操作顺序是:先停源库,tar打包/opt/Kingbase/ES/V8和数据目录,到目标机器解压到相同路径,再sys_ctl start。注意源库和克隆库的 machine-id 如果一样,可能造成锁文件相关异常,配置不同的 socket 目录或者在 systemd 里调整启动参数就可以规避。这个习惯帮我节省了大量重复安装时间,也让交付结果完全一致。希望帮到你。
本文还有配套的精品资源,点击获取