ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

人大金仓 KingbaseES Linux 安装部署与避坑指南

人大金仓 KingbaseES Linux 安装部署与避坑指南 简介人大金仓数据库KingbaseES V008R003C002B0100 Linux 64位安装包是一套面向国产化环境的高可靠性关系型数据库部署介质适合运维人员、DBA及信创项目技术工程师使用。KingbaseES支持标准SQL具备完整的OLTP在线事务处理与OLAP在线分析能力并采用多进程架构配合高可用和灾难恢复机制可承载金融、政务、能源等关键业务场景的高并发读写与复杂查询需求。包体共3个文件包含sh安装引导脚本、bin安装主程序和md5校验文件整体约475MB安装过程支持图形化界面与命令行两种方式便于不同经验的用户完成部署。目前已有196人学习下载适合需要快速搭建人大金仓数据库环境、验证应用兼容性或评估性能表现的技术人员参考。借助安装脚本、校验工具及官方配套文档可有效降低环境搭建门槛并为后续日常管理、参数调优和故障处理提供清晰起点。1. 人大金仓 KingbaseES这份 Linux 安装包能替项目解决什么问题在信创改造和国产化选型里人大金仓是被点名最多的国产数据库之一KingbaseES 的 Linux 安装包也就成了现场工程师手边最常见的东西。这份 V008R003C002B0100 的 tar.gz本质是一个与 PostgreSQL、Oracle 深度兼容的关系型数据库发行版装上 X86_64 Linux 服务器后可以提供 SQL 解析、事务处理、存储过程、备份恢复这些核心能力重点用在业务系统从 Oracle/PostgreSQL 迁移到国产库的项目里。拿到它不是拿去存档而是要在真实环境把它装起来、连上库、实测事务和并发。这套笔记适合急于在项目现场验证迁移可行性的 DBA 和业务开发也适合要做数据库选型评审的架构师——下面的安装、授权、连库、排查路径都是拆过真实部署后沉淀出来的。2. 安装前的环境确认系统参数、目录规划和 license 前置检查2.1 确认 Linux 发行版、位数和 glibcKingbaseES 的包名里写明 Lin64指的是 X86_64 架构。现在信创现场经常出现 arm64 的机器比如鲲鹏、飞腾这种机器需要单独的 aarch64 版本安装包直接拿 Lin64 包跑会报“cannot execute binary file”。所以在解包之前我一般会先执行一组命令把环境底数摸清楚。uname -m cat /etc/os-release ldd --version | head -n 1 free -g df -h /optuname -m输出 x86_64 才能继续如果是 aarch64这份包用不了。cat /etc/os-release看发行版和版本号CentOS 7/8、Ubuntu、统信 UOS 都是常见宿主但依赖包的安装方式不一样。ldd --version确认 glibc 版本KingbaseES 对 glibc 有最低版本要求装的时候如果报/lib64/libm.so.6: version GLIBC_2.28 not found就是系统 libc 太老。free -g和df -h分别确认内存与磁盘。KingbaseES 至少要有 2 核 4G生产库建议 8G 起步数据目录所在分区建议预留 50G 以上空余尤其是同时要导入迁移数据的场景。注意磁盘不能只看总容量还得看数据盘挂载点。很多人把数据目录放在根分区导入数据一半时根分区写满数据库直接 crash恢复起来很痛苦。这是我在现场踩过的第一个坑。2.2 创建专用运行用户和数据目录数据库进程不建议用 root 跑一是安全上太冒险二是后续做备份、日志轮转、文件权限管理都会别扭。常见做法是新建一个专门的系统用户比如kingbase再把安装目录和数据目录分开规划。groupadd kingbase useradd -g kingbase -m -s /bin/bash kingbase mkdir -p /opt/Kingbase/ES /data/kingbase chown -R kingbase:kingbase /opt/Kingbase/ES /data/kingbase/opt/Kingbase/ES放安装程序本身属于“程序目录”升级、打补丁时基本只读。/data/kingbase放数据文件、日志文件、备份文件属于“数据目录”要和程序目录物理分隔。把两个目录都 chown 给 kingbase 用户后面所有安装、初始化、启停都用这个用户做避免 root 装完产生一堆 root 属主文件。有些现场为了省事直接用 root 跑安装程序安装程序也能完成但后面用sys_ctl启停时如果数据目录里有 root 创建的文件就会报权限错误。与其事后清理不如一开始就建好专用账号。2.3 授权文件和系统时间两处最容易被忽略的前置条件KingbaseES 是商业授权模式安装时必须指定 license 文件。比较常见的文件名叫license.dat也有部分版本用.key后缀。安装程序在检测到合法 license 之前不会放行后续步骤更麻烦的是license 校验会和系统时间绑定。我遇到过一台机器BIOS 电池没电导致系统时间跳到 2019 年安装时 license 校验一直报“授权文件无效”。来回换了三个 license 都没用最后用date -s把时间同步回来才通过。date chronyc tracking timedatectl set-ntp truedate先看当前时间是否在合理区间。chronyc tracking看 NTP 同步状态如果输出Leap status : Normal且同步源正常时间基本没问题。timedatectl set-ntp true开启自动同步。如果公司内网隔离连不上外网 NTP就至少保证服务器时间和授时服务器偏差不超过 5 分钟。提示license 文件验证失败未必是文件损坏先检查系统时间再做换授权操作。系统时间穿越是最大嫌疑。2.4 解包之后先读目录结构安装包是 tar.gz 压缩格式解包命令很简单但解完之后不要急着跑安装脚本先看目录内容和文档。tar xzf KingbaseES-V008R003C002B0100-Lin64-install.tar.gz cd KingbaseES-V008R003C002B0100 ls -la find . -maxdepth 2 -type f | head -50解包后的目录里通常会有安装主脚本、授权文件示例、文档目录、jre 目录等。不同发行版结构略有差异但核心文件基本一致。目录或文件作用注意事项setup.sh或install.sh安装主程序图形界面直接跑无图形环境用 console 模式doc/安装手册、参数手册初始密码、默认端口、兼容模式都写在里面license 相关文件授权证书安装时通过参数指定或放置到安装目录jre/或java/安装向导运行时依赖不需要单独装 JDKinstall/预置脚本与依赖包不要手动删除安装过程中会被调用解包后第一件事我习惯先打开doc里 README 或 Release Notes,看一眼这个版本对操作系统和 glibc 的约束再开始装。装前多花五分钟后面省掉的不止五个小时。3. 命令行安装与数据库初始化跑通 setup、initdb 和 sys_ctl3.1 用 console 模式完成静默安装服务器如果没有图形环境或者你走 SSH 远程操作就没法用图形向导。这时候需要用命令行模式安装。不同发行版带的脚本名稍有差异常见的是setup.sh我一般这样执行./setup.sh -i console -mode uninstall \ --license /data/kingbase/license.dat \ --install-dir /opt/Kingbase/ES/V8 \ --data-dir /data/kingbase/data \ --port 54321-i console指定交互模式为控制台适合无图形 Linux 服务器。--license指定授权文件绝对路径路径写在数据目录下避免安装后找不到。--install-dir是程序安装目录生产上固定为/opt/Kingbase/ES/V8。--data-dir是数据库实例的数据目录这个目录后续要反复使用建议用单独的挂载点。--port 54321是 KingbaseES 默认端口除非和你现有业务冲突否则建议保持默认方便后续迁移工具识别。安装过程会输出进度条和日志看到Installation completed才表示成功。这里有个经验安装日志文件一定不要删排错时它是最可靠的依据。如果安装失败先翻日志里的ERROR行绝大多数是缺少依赖库或者 license 路径不对。3.2 初始化数据库实例和管理员账号有的安装程序在安装结束时自动初始化实例有的版本需要手动执行 initdb。如果你是手动初始化核心命令如下/opt/Kingbase/ES/V8/bin/initdb -D /data/kingbase/data \ -U system \ -E UTF8 \ --dbcompatibilityPG \ --localeC.UTF-8-D指定数据目录必须和安装时保持一致且目录为空。-U system指定超级用户KingbaseES 的默认管理账号习惯叫system类似于 Oracle 的 sys。-E UTF8指定编码。如果业务要兼容旧系统 GBK 数据也可以改成-E GBK但后续容易遇到乱码问题建议统一 UTF8。--dbcompatibilityPG指定兼容模式。KingbaseES 支持 PostgreSQL 和 Oracle 两种兼容模式迁移源库是 PostgreSQL 就选 PG源库是 Oracle 就选 Oracle。兼容模式这个参数很容易被忽略但它直接影响 SQL 语法解析、数据类型行为、存储过程写法。选错模式不会导致初始化失败但后续迁移时会有大量方言问题。一定要在初始化前确认。初始化成功后数据目录下会生成kingbase.conf、pg_hba.conf等配置文件。注意这些文件名沿用了 PostgreSQL 的命名习惯内容也是类似的格式有 PG 经验的人上手很快。3.3 启动数据库并验证连接启动和停止数据库用的是sys_ctl命令它对应 PostgreSQL 的pg_ctl。第一次启动时我习惯把日志写到明确位置/opt/Kingbase/ES/V8/bin/sys_ctl -D /data/kingbase/data \ -l /data/kingbase/logs/startup.log start sleep 3 /opt/Kingbase/ES/V8/bin/ps -ef | grep kingbase ss -lntp | grep 54321sys_ctl后面的-D是数据目录-l指定启动日志路径。启动完成后用ss -lntp检查 54321 端口是否进入 LISTEN 状态。如果进程存在但端口没监听大概率是kingbase.conf里listen_addresses配置不对或端口被占用。然后执行一次最基本的连接测试/opt/Kingbase/ES/V8/bin/ksql -U system -d test -p 54321 -h 127.0.0.1ksql是 KingbaseES 自带的命令行客户端对应 PostgreSQL 的psql。-d test表示连接 test 数据库。如果 test 库不存在可以先连默认的postgres库再创建。首次连接成功后执行SELECT version();能看到版本信息确认安装没问题。我从 PostgreSQL 转过来时一开始老把sys_ctl记成pg_ctl在命令行敲了半天都没反应。后来就把它当两个不同工具记initdb对应创建实例sys_ctl对应启停ksql对应连接三者构成日常最常用命令组合。3.4 注册 systemd 服务实现开机自启生产服务器重启后数据库不会自己起来。用 systemd 管理是常见做法新建一个服务文件sudo vim /etc/systemd/system/kingbase.service[Unit] DescriptionKingbaseES Database Server Afternetwork.target [Service] Userkingbase Groupkingbase Typeforking ExecStart/opt/Kingbase/ES/V8/bin/sys_ctl -D /data/kingbase/data -l /data/kingbase/logs/startup.log start ExecStop/opt/Kingbase/ES/V8/bin/sys_ctl -D /data/kingbase/data stop Restarton-failure [Install] WantedBymulti-user.target写完后运行sudo systemctl daemon-reload sudo systemctl enable kingbase sudo systemctl start kingbase systemctl status kingbaseTypeforking是因为sys_ctl start会后台派生数据库进程systemd 需要等主进程退出才认为启动完成。Restarton-failure让数据库崩溃后自动拉起现场没人值守时很有用。服务文件的用户必须是 kingbase否则数据目录权限又会出问题。这里要强调systemd 服务和 license 授权是两码事服务能启动不代表授权合法。如果 license 过期数据库可能启动几秒后自动退出systemd 状态会变成 failed。遇到这种情况别只盯 systemd先去查启动日志。4. 初始密码、授权与客户端连接第一次登不进库时的排查顺序4.1 初始密码在哪里写安装完第一件事先改密码KingbaseES 的初始密码通常在安装向导过程中设置一部分版本也支持安装后通过配置文件修改。如果安装日志里保存了初始化参数能看到当时的-P或密码相关配置。第一次登进去后我建议立刻执行一次密码修改并记录到密码管理表里。/opt/Kingbase/ES/V8/bin/ksql -U system -d postgres -p 54321 ALTER USER system WITH PASSWORD YourStrongPassword123;ALTER USER system WITH PASSWORD ...是 SQL 命令改完立即生效不需要重启。system 是超级用户密码强度直接决定数据库安全底线不要沿用安装向导里默认生成的弱口令。有同行跟我说过“初始密码输不对像黑匣子一样猜”其实最稳妥的办法是回看安装时的应答文件或日志。KysingbaseES 的准备工作在解包后的doc目录里通常有默认密码说明不同发行版不一致但安装时设置的密码不会出现在明文日志里。如果你确实忘了密码可以用initdb重新初始化实例或者用单用户模式重置——那是最后手段生产库不要随便用。4.2 授权文件替换 license 后的生效条件现场常见的操作是先用试用 license 跑通功能等商务流程走完后换成正式 license。更换授权不是简单覆盖文件还需要重启数据库服务。cp /data/kingbase/license_new.dat /opt/Kingbase/ES/V8/license.dat chown kingbase:kingbase /opt/Kingbase/ES/V8/license.dat /opt/Kingbase/ES/V8/bin/sys_ctl -D /data/kingbase/data restartlicense 文件名和路径因版本而异判断依据是安装日志里--license参数指向的路径。文件权限要确保运行用户可读否则会出现“服务能启动但授权校验失败”的怪现象。替换后必须重启因为授权信息在进程启动时加载到内存不会热加载。故障排查时看日志里有没有license expired、invalid license这类关键字。多数版本在启动日志里会打印授权有效期一眼就能看到还剩多少天。4.3 客户端连接参数从 ksql、JDBC 到 Navicat服务端跑通后客户端连接参数是下一个坑。KingbaseES 端口默认 54321和 PostgreSQL 的 5432 不一致很多新手拿默认端口去连直接超时。客户端类型连接方式关键参数说明ksql 命令行ksql -U system -d test -h 192.168.1.10 -p 54321主机、端口、库名服务器本机连时-h 127.0.0.1JDBCjdbc:kingbase8://192.168.1.10:54321/test驱动类com.kingbase8.Driver驱动包名是 kingbase8不是 pgjdbcNavicat选择 PostgreSQL 连接类型主机、端口、库名、用户名部分版本需要选“高级”里的驱动设置Qt QSqlDatabaseQPSQL 驱动需要定制编译的驱动通用 psql 驱动可能协议不匹配JAVA 项目接入时JDBC 连接串最容易写错。有人把它写成jdbc:postgresql://虽然 KingbaseES 在底层协议上兼容 PG但 JDBC 驱动不会像数据库那样做协议兼容身份识别会失败。正确的做法是引入kingbase8驱动包URL 前缀用jdbc:kingbase8://。Navicat 连接时有经验的人会告诉你选 PostgreSQL 类型而不是“其他数据库”。因为 KingbaseES 的网络协议和 PostgreSQL 高度一致Navicat 的 PG 驱动可以直接握手但前提是服务端pg_hba.conf里认证方式允许远程连接。4.4 连接失败时按顺序看日志和监听状态连接失败时不要坐在那里反复尝试按顺序排查是最快的。我总结的固定步骤# 第一步看端口是否监听 ss -lntp | grep 54321 # 第二步看监听地址是否包含客户端所在网段 cat /data/kingbase/data/kingbase.conf | grep listen_addresses # 第三步看认证配置 cat /data/kingbase/data/pg_hba.confpg_hba.conf里默认可能只允许本地连接远程访问需要新增一条记录host all all 192.168.1.0/24 scram-sha-256192.168.1.0/24是客户端网段按实际网络调整。scram-sha-256是安全认证方式老版本可能用md5两边要对齐否则会一直报password authentication failed。修改完pg_hba.conf不需要重启但要 reload 让配置生效sys_ctl -D /data/kingbase/data reload。从这三步排查完90% 的连接问题都能定位。还没解决的话再去翻startup.log和客户端日志看有没有 SSL 协商失败的提示。5. 避坑安装、授权、并发连接里最容易翻车的五个现场5.1 字符集选错导致中文乱码现象数据导入后查询中文全是问号或者客户端连接后中文变乱码部分模糊查询对中文条件永远查不出结果。原因初始化实例时-E参数指定了 UTF8但业务源库是 GBK导入工具没有做编码转换或者客户端连接时没有声明 client_encoding。解决数据迁移场景下导数据前必须确认源库编码和目标库编码。源库 GBK 就用iconv转换后再导入或者在导入脚本里明确设置客户端编码set client_encoding UTF8;如果都已经初始化成 GBK后悔药有限最省事的是备份数据后重新 initdb 成 UTF8。初始化前务必定好编码这是血泪经验。5.2 license 替换后服务起来又立刻退出现象替换 license 后执行sys_ctl start进程启动不到三秒就消失startup.log里有license expired字样。原因新 license 文件名不对或者文件权限不是 kingbase 用户可读进程启动时校验失败主动退出。解决确认授权文件名和安装参数里指定的路径严格一致。复制完成后执行ls -l看属主用chown kingbase:kingbase修正。然后重启服务chown kingbase:kingbase /opt/Kingbase/ES/V8/license.dat /opt/Kingbase/ES/V8/bin/sys_ctl -D /data/kingbase/data restart如果还起不来用-l /tmp/db.log指定独立日志文件看完整错误栈别只看 systemd 状态。5.3 initdb 报 data directory not empty现象执行初始化命令时报data directory not empty或Permission denied操作中止。原因数据目录里残留了之前失败的安装文件或者目录属主不是 kingbase 用户。解决备份好旧数据后清空目录再修正属主rm -rf /data/kingbase/data/* chown -R kingbase:kingbase /data/kingbase /opt/Kingbase/ES/V8/bin/initdb -D /data/kingbase/data ...初始化是幂等操作中相对脆弱的一环目录状态不干净就会翻车。我每次初始化前都会强制看一眼目录是不是空的避免玄学问题。5.4 连接数达到上限新业务连不上现象应用日志里报connection limit exceeded for database或者too many connections连接池扩容也没用。原因KingbaseES 的连接数受 max_connections 参数限制但更隐蔽的是授权文件里可能限制了最大连接数无论参数怎么调都会被授权封顶。解决先确认授权限制再调参数。如果授权限制是 50 连接把 max_connections 调到 200 也没用。/opt/Kingbase/ES/V8/bin/ksql -U system -d postgres -p 54321 SHOW max_connections;连接数不足时优先建议业务侧使用连接池把并发复用起来如果确实需要更多连接走商务换大授权连接数。靠调参数硬撑后期会突然全盘拒绝新连接影响面非常大。5.5 Navicat 能连通达梦却连不上金仓现象同样的网络环境用 Navicat 连接达梦数据库正常连接 KingbaseES 报connection timeout或auth failed。原因Navicat 对不同类型的数据库使用不同驱动。达梦用的是 DM 驱动KingbaseES 需要选 PostgreSQL 驱动如果选错驱动握手阶段就会失败。另外金仓默认端口 54321不是达梦的默认端口端口不对也会超时。解决在 Navicat 新建连接时选 PostgreSQL 类型主机填金仓服务器 IP端口填 54321用户名用 system。如果认证失败去服务器端查pg_hba.conf确认网络段和认证方式没有拦截。Navicat 连不上金仓不一定是服务端问题很多时候是客户端工具的驱动选择问题。这一点在运维交接时特别容易浪费两个小时。6. 把安装包做成 Docker 镜像容器化部署与巡检习惯6.1 用 Dockerfile 做可复用镜像服务器多了之后每台都手动装一遍数据库不现实。把 tar.gz 包做成镜像是一个值得掌握的容器化技巧。核心思路是在基础镜像里完成解包和静默安装再把数据目录挂载出来。FROM centos:7 COPY KingbaseES-V008R003C002B0100-Lin64-install.tar.gz /tmp/ RUN tar xzf /tmp/KingbaseES-V008R003C002B0100-Lin64-install.tar.gz -C /opt \ cd /opt/KingbaseES-V008R003C002B0100 \ ./setup.sh -i console -mode silent ... \ rm -rf /tmp/KingbaseES-V008R003C002B0100* VOLUME [/data/kingbase] EXPOSE 54321Dockerfile 构建时不要用交互模式静默安装参数要提前写全。数据目录用VOLUME声明容器销毁后数据还在宿主机磁盘上这是容器化数据库的底线。镜像构建是给团队复用的不是给自己玩一次的所以安装脚本的版本号要写死。运行容器的命令也留好docker run -d --name kingbase8 \ -p 54321:54321 \ -v /data/kingbase:/data/kingbase \ -e TZAsia/Shanghai \ kingbase:v8-v将宿主机/data/kingbase挂载为容器内数据目录备份时直接备份宿主机目录就行。-e TZAsia/Shanghai固定时区因为 license 校验对系统时间敏感容器默认 UTC 时区很可能踩到授权时间差。6.2 容器内的备份恢复和宿主机备份互补容器化数据库的备份原则是“宿主机文件层面备份 逻辑备份双保险”。逻辑备份使用 KingbaseES 自带的sys_dump工具docker exec kingbase8 /opt/Kingbase/ES/V8/bin/sys_dump \ -h 127.0.0.1 -p 54321 -U system -d test \ -F c -f /backup/test_$(date %F).dmp-F c是自定义格式压缩比高配合sys_restore恢复时可以按表选择性导入。备份文件生成在容器内但容器销毁后备份也没了所以要把/backup也挂载到宿主机或者备份后立即docker cp出来。恢复时用sys_restore反向操作docker exec -i kingbase8 /opt/Kingbase/ES/V8/bin/sys_restore \ -U system -d test -p 54321 /backup/test_2024-01-01.dmp从那以后我对容器数据库的备份习惯改成了强制要求每天至少一次逻辑备份同时宿主机层面对数据目录做快照。两者都做才能把“误删表”这类问题的回滚时间控制在分钟级这种双保险给过我实实在在的后悔药。6.3 容器场景下的巡检快读命令容器环境下几个快速巡检命令值得固定下来docker exec kingbase8 /opt/Kingbase/ES/V8/bin/ksql -U system -d postgres -p 54321 SELECT count(*) FROM pg_stat_activity; SELECT query, state FROM pg_stat_activity WHERE stateactive;第一个 SQL 看当前活跃连接数和授权上限做对比提前发现扩容需求。第二个 SQL 抓长时间 active 的查询配合pg_stat_activity里的wait_event_type看锁等待还是 IO 等待。锁等待问题在国产库上并不少见尤其并发写入集中的业务。如果看到大量wait_event_type为 Lock优先查谁持有锁没释放而不是盲目重启数据库。重启一瞬间的恢复时间可能比你想象的长得多。我现在每次部署完金仓无论物理机还是容器都固定走一遍四件事改掉 system 默认密码、确认 license 有效期、打开日志轮转、挂载数据卷并验证备份恢复。这四件事加起来不到二十分钟却能把后续百分之八十的运维问题拧掉。希望帮到你。本文还有配套的精品资源点击获取
返回列表