Home

人大金仓 KingbaseES 学习 02:V9 单机安装与服务验证

目标

上一篇完成了麒麟 Linux 虚拟机的部署前检查。这一篇继续记录 KingbaseES V9 单机安装,以及安装后最小可用性验证。

这里我只保留已经完成并验证过的步骤。安装密码、license 内容等敏感信息不记录。

本次安装结果

项目当前值
安装介质KingbaseES_V009R001C002B0014_Lin64_install.iso
数据库版本V009R001C002B0014
操作系统Kylin Linux Advanced Server V10
安装用户kingbase
安装目录/opt/Kingbase/ES/V9
数据目录/data/kingbase/data
监听端口54321
数据库用户system
验证数据库test
字符编码UTF8
Localezh_CN.UTF-8
兼容模式Oracle
大小写敏感
认证方式scram-sha-256
服务脚本kingbased.service

上传并校验安装介质

安装介质上传到虚拟机后,先在服务器端再次校验。目的不是和官方值比对,而是确认本地文件和上传后的文件一致。

# 进入安装介质目录
cd /home/kingbase/install

# 查看 ISO 文件大小和属主
ls -lh KingbaseES_V009R001C002B0014_Lin64_install.iso

# 校验 ISO 的 MD5
md5sum KingbaseES_V009R001C002B0014_Lin64_install.iso

# 校验 ISO 的 SHA1
sha1sum KingbaseES_V009R001C002B0014_Lin64_install.iso

# 把 ISO 文件属主交给安装用户
chown kingbase:kingbase KingbaseES_V009R001C002B0014_Lin64_install.iso

服务器端校验值和本地一致:

MD5:  c2c1af691435d953146222dcd5aa11d5
SHA1: cc8aea1a2897a7d6afbdef51bf28881e8d313b54

示例输出:

[root@Kingbase-Server install]# ls -lh KingbaseES_V009R001C002B0014_Lin64_install.iso
-rw-r--r-- 1 root root 2.6G Jun 10 14:44 KingbaseES_V009R001C002B0014_Lin64_install.iso

[root@Kingbase-Server install]# md5sum KingbaseES_V009R001C002B0014_Lin64_install.iso
c2c1af691435d953146222dcd5aa11d5  KingbaseES_V009R001C002B0014_Lin64_install.iso

[root@Kingbase-Server install]# sha1sum KingbaseES_V009R001C002B0014_Lin64_install.iso
cc8aea1a2897a7d6afbdef51bf28881e8d313b54  KingbaseES_V009R001C002B0014_Lin64_install.iso

[root@Kingbase-Server install]# chown kingbase:kingbase KingbaseES_V009R001C002B0014_Lin64_install.iso
[root@Kingbase-Server install]# ls -lh KingbaseES_V009R001C002B0014_Lin64_install.iso
-rw-r--r-- 1 kingbase kingbase 2.6G Jun 10 14:44 KingbaseES_V009R001C002B0014_Lin64_install.iso

license 文件同样上传到 /home/kingbase/install,只调整属主,不记录 license 内容:

# 确认 license 文件存在
ls -lh license_41248_0.dat

# 把 license 文件属主交给安装用户
chown kingbase:kingbase license_41248_0.dat

挂载 ISO

使用 root 挂载 ISO,后续安装程序由 kingbase 用户执行。

# 创建 ISO 挂载目录
mkdir -p /mnt/kingbase_iso

# 只读挂载安装 ISO
mount -o loop,ro /home/kingbase/install/KingbaseES_V009R001C002B0014_Lin64_install.iso /mnt/kingbase_iso

# 确认挂载结果
findmnt /mnt/kingbase_iso

# 查看 ISO 顶层内容
ls -lh /mnt/kingbase_iso

# 查看安装文件
ls -lh /mnt/kingbase_iso/setup

本次挂载后看到的关键文件:

/mnt/kingbase_iso/setup.sh
/mnt/kingbase_iso/setup/install.bin
/mnt/kingbase_iso/setup/silent.cfg

示例输出:

[root@Kingbase-Server install]# findmnt /mnt/kingbase_iso
TARGET            SOURCE     FSTYPE  OPTIONS
/mnt/kingbase_iso /dev/loop0 iso9660 ro,relatime,nojoliet,check=s,map=n,blocksize=2048

[root@Kingbase-Server install]# ls -lh /mnt/kingbase_iso
total 6.0K
dr-xr-xr-x 2 root root 2.0K Sep 23  2024 setup
-r-xr-xr-x 1 root root 3.9K Sep 23  2024 setup.sh

[root@Kingbase-Server install]# ls -lh /mnt/kingbase_iso/setup
total 2.6G
-r-xr-xr-x 1 root root   46 Sep 23  2024 MD5
-r--r--r-- 1 root root 8.6M Sep 23  2024 WenQuanDengKuanZhengHei-1.ttf
-r-xr-xr-x 1 root root 2.6G Sep 23  2024 install.bin
-r--r--r-- 1 root root 2.1K Sep 23  2024 silent.cfg

silent.cfg 中的默认安装目录指向 /opt/Kingbase/ES/V9,和本次 V9 学习路径一致。

执行控制台安装

切换到 kingbase 用户后,从挂载目录启动控制台安装:

# 切换到安装用户
su - kingbase

# 进入 ISO 挂载目录
cd /mnt/kingbase_iso

# 使用控制台模式启动安装程序
sh setup.sh -i console

本次安装选择的关键参数:

安装目录:/opt/Kingbase/ES/V9
数据目录:/data/kingbase/data
监听端口:54321
数据库用户:system
验证数据库:test
字符编码:UTF8
Locale:zh_CN.UTF-8
兼容模式:ORACLE
大小写敏感:YES
数据块大小:8k
认证方式:scram-sha-256

安装完成后,目录 /opt/Kingbase/ES/V9 下会出现一组指向实际版本目录的软链接,例如 ServerClientToolsSupToolsUninstall 等。

执行 root 脚本

安装结束后,按提示使用 root 执行安装脚本生成的 root.sh

# 使用 root 执行安装后的系统配置脚本
sh /opt/Kingbase/ES/V9/install/script/root.sh

本次执行后数据库被拉起:

KingbaseES V9 started successfully

数据目录已经生成数据库实例文件:

# 查看数据目录内容
ls -lh /data/kingbase/data

关键文件包括:

kingbase.conf
sys_hba.conf
sys_ident.conf
sys_wal/
sys_log/
kingbase.pid

处理服务接管

root.sh 执行后,数据库进程已经在运行。此时直接执行 systemctl start kingbased.service,会因为同一个数据目录里已有进程而失败。

本次日志里的关键信息是:

FATAL: lock file "kingbase.pid" already exists
HINT: Is another kingbase (PID 14176) running in data directory "/data/kingbase/data"?

这个错误不是安装失败,而是重复启动。同一个数据目录只能有一个数据库主进程。

示例输出:

[root@Kingbase-Server install]# tail -n 120 /data/kingbase/data/sys_log/startup.log
2026-06-10 15:34:48.318 CST [40358] LOG:  config the real archive_command string as soon as possible to archive WAL files
2026-06-10 15:34:48.319 CST [40358] FATAL:  lock file "kingbase.pid" already exists
2026-06-10 15:34:48.319 CST [40358] HINT:  Is another kingbase (PID 14176) running in data directory "/data/kingbase/data"?

处理方式是先确认当前实例状态,再做一次受控停库,然后交给 systemd 服务重新启动:

# 查看服务脚本能否识别当前数据库状态
service kingbased status

# 受控停止数据库实例
service kingbased stop

# 等待端口释放
sleep 3

# 确认 54321 已停止监听
ss -ltnp | grep 54321 || echo "54321 stopped"

# 清理 systemd 里之前失败的状态
systemctl reset-failed kingbased.service

# 通过 systemd 启动 KingbaseES 服务
systemctl start kingbased.service

# 查看 systemd 服务状态
systemctl status kingbased.service --no-pager

# 确认端口重新监听
ss -ltnp | grep 54321

启动成功后,systemctl status 显示:

Active: active (exited)
KingbaseES V9 started successfully

示例输出:

[root@Kingbase-Server install]# service kingbased stop
Stopping KingbaseES V9:
等待服务器进程关闭 .... 完成
服务器进程已经关闭

[root@Kingbase-Server install]# ss -ltnp | grep 54321 || echo "54321 stopped"
54321 stopped

[root@Kingbase-Server install]# systemctl start kingbased.service
[root@Kingbase-Server install]# systemctl status kingbased.service --no-pager
● kingbased.service - LSB: Start and stop the kingbase server
   Loaded: loaded (/etc/rc.d/init.d/kingbased; generated)
   Active: active (exited) since Wed 2026-06-10 15:39:29 CST; 35s ago

Jun 10 15:39:28 Kingbase-Server kingbased[40678]: 服务器进程已经启动
Jun 10 15:39:29 Kingbase-Server kingbased[40659]: KingbaseES V9 started successfully
Jun 10 15:39:29 Kingbase-Server systemd[1]: Started LSB: Start and stop the kingbase server.

这里的 active (exited) 是 SysV init 脚本被 systemd 包装后的表现。判断数据库是否真正运行,要继续看端口和 sys_ctl status

启用开机自启

# 设置 KingbaseES 服务开机自启
systemctl enable kingbased.service

# 确认自启状态
systemctl is-enabled kingbased.service

本次结果为:

enabled

重启后验证

为了确认自启不是只写入配置,还要重启虚拟机做一次验证:

# 重启服务器
reboot

重新连接后,先看服务日志:

# 查看本次开机后服务启动日志
journalctl -u kingbased.service -b --no-pager -n 80

本次启动日志显示:

KingbaseES V9 started successfully
Started LSB: Start and stop the kingbase server.

示例输出:

[root@Kingbase-Server ~]# journalctl -u kingbased.service -b --no-pager -n 80
Jun 10 16:09:17 Kingbase-Server systemd[1]: Starting LSB: Start and stop the kingbase server...
Jun 10 16:09:17 Kingbase-Server kingbased[1227]: Starting KingbaseES V9:
Jun 10 16:09:26 Kingbase-Server kingbased[1354]: 服务器进程已经启动
Jun 10 16:09:26 Kingbase-Server kingbased[1227]: KingbaseES V9 started successfully
Jun 10 16:09:26 Kingbase-Server systemd[1]: Started LSB: Start and stop the kingbase server.

继续看端口和实例状态:

# 确认数据库端口正在监听
ss -ltnp | grep 54321

# 使用 kingbase 用户确认实例状态
su - kingbase -c 'export PATH=/opt/Kingbase/ES/V9/Server/bin:$PATH; sys_ctl -D /data/kingbase/data status'

本次结果显示数据库进程正在运行:

/opt/Kingbase/ES/V9/KESRealPro/V009R001C002B0014/Server/bin/kingbase "-D" "/data/kingbase/data"

示例输出:

[root@Kingbase-Server ~]# ss -ltnp | grep 54321
LISTEN 0 244 0.0.0.0:54321 0.0.0.0:* users:(("kingbase",pid=1452,fd=13))
LISTEN 0 244 [::]:54321    [::]:*      users:(("kingbase",pid=1452,fd=14))

[root@Kingbase-Server ~]# su - kingbase -c 'export PATH=/opt/Kingbase/ES/V9/Server/bin:$PATH; sys_ctl -D /data/kingbase/data status'
sys_ctl: 正在运行服务器进程(PID: 1452)
/opt/Kingbase/ES/V9/KESRealPro/V009R001C002B0014/Server/bin/kingbase "-D" "/data/kingbase/data"

SQL 登录验证

最后使用 ksql 登录本机数据库,确认数据库不仅进程存在,而且可以正常执行 SQL:

# 切换到 kingbase 用户
su - kingbase

# 临时加入 KingbaseES 命令目录
export PATH=/opt/Kingbase/ES/V9/Server/bin:$PATH

# 登录 test 数据库
ksql -h 127.0.0.1 -p 54321 -U system -d test

进入 ksql 后执行:

\conninfo
select version();
show data_directory;
show port;
select current_user, current_database();
\q

本次验证结果:

test=# \conninfo
以用户 "system" 的身份, 在主机"127.0.0.1", 端口"54321"连接到数据库 "test"

test=# select version();
KingbaseES V009R001C002B0014 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28), 64-bit

test=# show data_directory;
/data/kingbase/data

test=# show port;
54321

test=# select current_user, current_database();
system | test

日志检查

启动日志中有一条提示:

config the real archive_command string as soon as possible to archive WAL files

这不是本次安装失败信息。它是在提醒后续如果要做归档和备份恢复实验,需要配置真实的归档命令。当前单机安装和基础连接验证可以继续推进,归档配置留到备份恢复阶段处理。

本次也出现过一次 FATAL: lock file "kingbase.pid" already exists。原因是数据库已经运行时又执行了服务启动,属于重复启动,不是数据目录损坏。受控停库后再由 systemd 启动,问题已经解决。

当前进度

KingbaseES V9 单机安装已经完成。当前已经验证:

  • 安装目录和数据目录生成正常。
  • kingbased.service 已设置开机自启。
  • 服务器重启后数据库能自动启动。
  • 54321 端口监听正常。
  • sys_ctl status 能看到数据库进程。
  • ksql 可以登录 test 数据库。
  • 基础 SQL 可以返回版本、数据目录、端口、当前用户和当前数据库。

下一篇继续进入启停管理、ksql 常用命令和基础巡检。

数据库 KingbaseES 人大金仓 Linux 麒麟 技术分享