先把环境落到一台机器上
接触一套新数据库,不能只盯着 SQL 语法。真正开始用的时候,最先碰到的往往是另一批问题:安装包怎么选,目录放哪里,数据库实例怎么初始化,服务怎么启停,客户端怎么连,授权文件放在哪,日志出了问题去哪看。
这些问题不复杂,但必须先跑一遍。否则后面写 SQL、备份恢复、工具使用时,环境本身一直不踏实。尤其是从 MySQL 过来,很多习惯会下意识套过去,比如默认端口、客户端连接方式、服务管理命令、数据目录位置。KingbaseES 底层和 PostgreSQL 有关系,但工具名、目录结构、兼容模式、授权机制都有自己的处理方式,不能只按 PostgreSQL 或 MySQL 的经验猜。
所以第一步先搭一个能反复折腾的单机环境。坏了可以重来,参数改错了可以回滚,授权换错了也能知道该恢复哪个文件。这个环境不承担生产职责,只负责把安装、初始化、启动、连接这几件事跑顺。
服务器是一台阿里云轻量服务器,Alibaba Cloud Linux 3,x86_64 架构,内存接近 2G,根分区 40G。

这个配置很普通,甚至有点紧。单机安装、启动服务、连库验证、小表测试没有问题;拿它做性能结论就不合适。比如初始化时默认 shared_buffers 是 128MB,这类结果和机器规格有关,不能直接拿来评价数据库性能。
这台机器上已经有 Docker 和 docker-compose。

不过安装这里没有走容器。官网的 Docker 镜像页面写得很清楚:这个镜像是 Docker 环境里的 tar 类型精简包,只包含数据库主体功能,不包含接口驱动和工具等相关内容。

如果只是快速起一个库,Docker 镜像当然省事。但这里不只是看数据库进程能不能跑,还要确认安装目录、工具目录、初始化方式、服务启停、授权文件位置。精简镜像会把很多安装细节藏掉,反而不方便摸清楚完整结构。所以这里直接用 ISO 在服务器上装。
目录规划
默认安装路径是 /opt/Kingbase/ES/V9,这里没有用默认值,统一放到 /acowbo/kingbase:
text
/acowbo/kingbase/
install/ # 软件安装目录
data/ # 数据目录
backup/ # 备份和授权备份
scripts/ # SQL 或 shell 脚本
logs/ # 启动日志
packages/ # 安装包、授权文件、校验文件
这个目录不复杂,关键是分开。软件文件放 install,实例数据放 data,启动日志放 logs,安装包和授权文件放 packages,替换授权前的旧文件放 backup。路径一开始定清楚,后面少很多"这个文件到底在哪"的时间。

安装和运行尽量使用普通用户,不要让数据库实例直接跑在 root 下。目录权限已经给到 kingbase 用户,后面执行 setup.sh、initdb、sys_ctl,都围绕这个用户来做。
安装包下载和校验
服务器是 x86_64,下载时选 X64_Linux。下载页上的包很多,Windows、Docker、海光、飞腾、鲲鹏、龙芯、申威都在一起,选错了也能下载成功,但装的时候就会浪费时间。

安装包放到:
text
/acowbo/kingbase/packages
下载完成后做一次 MD5 校验。这个动作很小,但排查问题时很有用。至少能确认本地 ISO 没有下坏,也能把"安装包是否和官网页面一致"这个问题先排掉。

挂载 ISO:
bash
mkdir -p /mnt/kingbase
mount -o loop /acowbo/kingbase/packages/*.iso /mnt/kingbase
ls -lah /mnt/kingbase
挂载时出现下面这种提示是正常的:
text
WARNING: device write-protected, mounted read-only.
ISO 本来就是只读介质。只要挂载后能看到 setup.sh 和 setup 目录,安装入口就没有问题。

console 模式安装
服务器没有图形桌面,SSH 里直接用 console 模式:
bash
cd /mnt/kingbase
sh setup.sh -i console
不带 -i console 时,安装器可能会尝试图形安装。远程服务器上没有 X11 环境,这条路通常走不通。加上 -i console 后,安装流程就在终端里一步一步交互。

启动后能看到安装器检测到 Java 1.8,然后进入欢迎页。提示 Press [ENTER] to next 时,直接回车继续。
许可协议需要翻到结尾。到选择项时,输入 1 接受:
text
Press [1] Accept, [2] Refuse, [3] Redisplay:

授权文件那一步可以先回车。安装器会提示:如果没有选择 license 文件,会使用内置试用授权,并提醒在有效期内及时更新授权文件。这里先跳过,安装可以继续走。安装完成后再替换开发版授权。
安装路径填规划好的目录:
text
/acowbo/kingbase/install
安装器不会直接把所有文件散在这个目录下,而是继续创建版本目录。本次安装完成后的实际路径是:
text
/acowbo/kingbase/install/KESRealPro/V009R001C010

安装组件选择 Full。

这里也可以选 Server,只安装数据库服务。但完整安装会保留更多客户端工具和辅助工具,适合把目录结构先看全。尤其后面要用 ksql、sys_ctl、sys_dump、sys_restore 这些工具时,完整安装更省心。
安装完成后,屏幕上会列出关键目录:
text
Boot: /acowbo/kingbase/install/KESRealPro/V009R001C010/install
Product Manual: /acowbo/kingbase/install/KESRealPro/V009R001C010/doc
Database Operations Tool: /acowbo/kingbase/install/KESRealPro/V009R001C010/SupTools
Server: /acowbo/kingbase/install/KESRealPro/V009R001C010/Server
High Availability: /acowbo/kingbase/install/KESRealPro/V009R001C010/KingbaseHA
Interface: /acowbo/kingbase/install/KESRealPro/V009R001C010/Interface
DeployTool: /acowbo/kingbase/install/KESRealPro/V009R001C010/ClientTools/guitools/DeployTools
KDTS: /acowbo/kingbase/install/KESRealPro/V009R001C010/ClientTools/guitools/KDts
KStudio(CS): /acowbo/kingbase/install/KESRealPro/V009R001C010/ClientTools/guitools/KStudio
这一步只是把软件装到磁盘上,还没有创建数据库实例。换句话说,Server/bin 里的工具已经有了,但数据目录还没初始化,数据库服务也还没启动。

不走 Kconsole
安装结束时,程序提示可以启动 Kconsole 初始化数据库:
bash
/acowbo/kingbase/install/KESRealPro/V009R001C010/Server/bin/kconsole.sh
实际在 SSH 里执行会报错:
text
No X11 DISPLAY variable was set
java.awt.HeadlessException

这个报错不是数据库安装失败,而是工具需要图形界面。服务器没有 X11 DISPLAY,Swing 窗口起不来。命令行服务器上没必要卡在这里,直接用 initdb 初始化实例更直接。
先确认几个工具确实在安装目录下:
bash
find /acowbo/kingbase/install -name kconsole.sh -o -name initdb -o -name sys_ctl -o -name ksql
能看到这些路径:
text
/acowbo/kingbase/install/KESRealPro/V009R001C010/Server/bin/ksql
/acowbo/kingbase/install/KESRealPro/V009R001C010/Server/bin/kconsole.sh
/acowbo/kingbase/install/KESRealPro/V009R001C010/Server/bin/initdb
/acowbo/kingbase/install/KESRealPro/V009R001C010/Server/bin/sys_ctl
/acowbo/kingbase/install/KESRealPro/V009R001C010/ClientTools/bin/ksql
Server/bin 里的这套工具就是后面主要使用的入口。
initdb 初始化实例
初始化命令如下:
bash
/acowbo/kingbase/install/KESRealPro/V009R001C010/Server/bin/initdb \
-D /acowbo/kingbase/data \
-U system \
-W \
-E UTF8 \
-m oracle \
--enable-ci
几个参数含义如下:
text
-D /acowbo/kingbase/data 指定数据目录
-U system 指定超级用户
-W 交互输入超级用户密码
-E UTF8 指定编码
-m oracle 使用 oracle 兼容模式
--enable-ci 开启大小写不敏感
密码不要直接写到命令里,-W 会让终端交互输入两次。初始化过程中会创建配置文件、系统库、审计相关内容,并把数据刷到磁盘。

初始化输出里有几个信息可以记下来:
text
locale: en_US.UTF-8
default max_connections: 100
default shared_buffers: 128MB
default time zone: Asia/Shanghai
local authentication: trust
trust 认证要注意。测试机上先跑通流程可以接受,但正式环境不能直接照搬。后面涉及连接认证时,要单独改 sys_hba.conf,不能让本地连接长期无密码放开。
初始化成功后,安装器给出的启动命令是:
bash
/acowbo/kingbase/install/KESRealPro/V009R001C010/Server/bin/sys_ctl \
-D /acowbo/kingbase/data \
-l logfile start
这里的 logfile 最好换成明确路径,方便后面查启动日志。
固定常用命令路径
实例初始化完成后,再把环境变量写到 kingbase 用户的 .bashrc:
bash
export KES_HOME=/acowbo/kingbase/install/KESRealPro/V009R001C010/Server
export KINGBASE_DATA=/acowbo/kingbase/data
export PATH=$KES_HOME/bin:$PATH
先初始化,再写环境变量,顺序更清楚。因为安装路径和数据目录都已经确认,写进去以后不容易改来改去。
加载配置:
bash
source ~/.bashrc
确认工具路径:
bash
which ksql
which sys_ctl
which initdb

这一步完成后,命令就不用再写完整路径了。比如启动服务时可以直接使用 sys_ctl,连接数据库时可以直接使用 ksql。
启动服务
先建日志目录:
bash
mkdir -p /acowbo/kingbase/logs
启动数据库:
bash
sys_ctl -D $KINGBASE_DATA -l /acowbo/kingbase/logs/kingbase.log start
启动成功后会看到:
text
waiting for server to start.... done
server started
检查状态:
bash
sys_ctl -D $KINGBASE_DATA status
再看端口监听:
bash
ss -lntp | grep 54321
本次实例监听在 54321,进程属于 kingbase 用户。
ksql 第一次连接
第一次连接直接写:
bash
ksql -h 127.0.0.1 -p 54321 -U system
结果报错:
text
FATAL: database "system" does not exist
这个错误很容易误判成密码问题,其实不是。没有指定 -d 时,ksql 会尝试连接和用户名同名的数据库。这里用户是 system,但数据库里没有叫 system 的库。
补上数据库名即可:
bash
ksql -h 127.0.0.1 -p 54321 -U system -d test

进库后查版本和当前连接:
sql
select version();
select current_database(), current_user;
返回版本是 KingbaseES V009R001C010,当前数据库是 test,当前用户是 system。
连接验证时还做了一个大小写不敏感测试:插入 Hello,用 hello 查询,可以查到结果。这和初始化时加的 --enable-ci 对得上。第一次 create table 少打了一个 c,修正后继续执行即可,这种小手误不影响结论。
查看授权
安装时没有指定授权文件,所以数据库使用内置试用授权。连上 test 库后执行:
sql
select get_license_validdays();
返回 90,说明当前授权剩余 90 天。

官网授权页面里有不同类型的授权。实验环境只做功能验证,选开发版授权即可。授权文件内容、机器码、授权编号这些信息不适合放到公开内容里,只记录类型和验证结果。

替换授权
新授权下载到 /acowbo/kingbase/packages 后,先备份安装目录里的旧授权文件。这里要先创建备份目录,否则 cp 会报 No such file or directory。
bash
BACKUP_DIR=/acowbo/kingbase/backup/license-$(date +%F-%H%M%S)
mkdir -p "$BACKUP_DIR"
cp /acowbo/kingbase/install/KESRealPro/V009R001C010/license.dat \
"$BACKUP_DIR/license.dat.bak"
再覆盖新授权:
bash
cp /acowbo/kingbase/packages/license_4_V009R001C-开发版-365天.dat \
/acowbo/kingbase/install/KESRealPro/V009R001C010/license.dat
授权文件替换后重启数据库:
bash
sys_ctl -D $KINGBASE_DATA stop
sys_ctl -D $KINGBASE_DATA -l /acowbo/kingbase/logs/kingbase.log start
重新连接,再查一次:
sql
select get_license_validdays();
返回 365,说明新的开发版授权已经生效。

总结
到这里,数据库已经不只是"文件装上去了"。ISO 能正常挂载,console 安装能走完,initdb 能把实例初始化出来,sys_ctl 能把服务拉起来,ksql 也能连进 test 库。授权这块也顺手验证了一下:默认试用授权是 90 天,换成开发版授权后,get_license_validdays() 返回 365。
目录按自己的环境调整即可,不用照搬这里的路径。只要把软件、数据、日志、安装包、授权文件分开,后面删实例、查日志、换授权、做备份都会省事很多。
这次还留下了几个小坑:kconsole.sh 在没有图形界面的服务器上起不来,直接用 initdb 更省事;ksql -U system 不指定数据库名时会去连 system 库,所以需要补 -d test;替换 license.dat 前要先建备份目录,不然 cp 也会报错。
现在这个实例还谈不上生产配置。认证方式、自启动、日志轮转、备份策略都没处理。用它试工具、试 SQL、试备份恢复,已经够用了。