一台 2C2G 服务器上的 KingbaseES 安装记录

先把环境落到一台机器上

接触一套新数据库,不能只盯着 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.shinitdbsys_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.shsetup 目录,安装入口就没有问题。

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,只安装数据库服务。但完整安装会保留更多客户端工具和辅助工具,适合把目录结构先看全。尤其后面要用 ksqlsys_ctlsys_dumpsys_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、试备份恢复,已经够用了。

相关推荐
SelectDB2 小时前
从 Machine-Readable 到 Agent-Ready:面向智能体的数据库接口演进
大数据·数据库·agent
画江湖Test2 小时前
Redis 块的原理
数据库·redis·缓存·性能优化
流烟默2 小时前
国产数据库CERDB是什么以及服务启停
数据库·cerdb
数据库小学妹2 小时前
关系型数据库核心原理拆解:SQL解析、事务引擎、存储结构全链路分析
数据库·经验分享·sql·数据库架构·dba
海市公约2 小时前
Redis主从复制全量同步七步时序与命令传播机制详解
数据库·redis·缓存·主从复制·高可用架构·全量同步
我是唐青枫2 小时前
Java JdbcTemplate 实战指南:用 Spring 轻量完成数据库增删改查
java·数据库·spring
梓䈑3 小时前
【MySQL】MySQL安装 和 配置
数据库·mysql
小马爱打代码3 小时前
Redis 和 MySQL 双写一致性:延迟双删、读写锁、MQ、Canal 怎么选?
数据库·redis·mysql