暂无图片
暂无图片
5
暂无图片
暂无图片
暂无图片

【金仓数据库产品体验官】KingbaseES(MySQL兼容版)安装及使用

原创 飞天 2025-08-24
828

KingbaseES(MySQL兼容版)数据库简介

金仓数据库管理系统[简称:KingbaseES]是中电科金仓(北京)科技股份有限公司(简称电科金仓)自主研发的、具有自主知识产权的商用关系型数据库管理系统(DBMS)。该产品面向事务处理类应用,兼顾各类数据分析类应用,可用做信息管理系统、业务及生产系统、决策支持系统、全文检索、地理信息系统等的承载数据库。

KingbaseES支持多种操作系统和硬件平台:支持Linux、国产Kylin等数十个操作系统产品版本,支持通用x86_64及国产飞腾、鲲鹏等CPU硬件体系架构。

针对不同类型的客户需求,KingbaseES提供标准版、企业版、专业版、开发版等多种版本。这些版本构建于同一数据库引擎上,不同平台版本完全兼容。

KingbaseES软件能够提供一主一备以及一主多备的高可用集群架构,实现数据及实例级 (异地) 故障容灾,也能够提供多节点并行服务,内存融合及存储共享,实现高并发性能利用最大化,结合读写分离或备份使用同步实现数据保护最大化。
image.png

KingbaseES(MySQL兼容版)单机部署

KES 软件下载

https://www.kingbase.com.cn/download.html
image.png

license下载

image.png

安装前准备

硬件环境要求

KingbaseES支持通用X86_64、飞腾、鲲鹏等国产CPU硬件体系架构。
image.png

软件环境要求

KingbaseES支持各种主流的Linux操作系统64位发行版本,包括CentOS、中标麒麟、银河麒麟、统信UOS、Deepin、凝思、中科方德、欧拉等操作系统。

主机、目录规划

主机名 ip地址 OS版本 内存、CPU 节点角色 数据库端口
node1 192.*.*.60 centos7.9 4G 、 1个双核 主节点 54321

软件包:/soft/KingbaseES_V009R003C011B0003_Lin64_install.iso
license文件:/home/kingbase/license_mysql.dat
软件安装目录 /opt/kes/v9
数据存放目录 /data

关闭SELINUX

# vi /etc/selinux/config
修改SELINUX=disabled
或者
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

关闭防火墙

# systemctl disable firewalld.service
# systemctl stop firewalld.service
# systemctl status firewalld

关闭RemoveIPC

systemd-logind服务中引入的一个特性,是当一个用户退出系统后,会删除所有有关的IPC对象。该特性由/etc/systemd/logind.conf文件中的RemoveIPC参数控制。某些操作系统会默认打开,会造成程序信号丢失等问题(只有redhat7及以上和一些特殊的国产Linux的版本需要修改,改之前可先查看此项是否为默认yes)。

 (1) 修改/etc/systemd/logind.conf文件中的“RemoveIPC”值为“no”
# cat >> /etc/systemd/logind.conf <<EOF
RemoveIPC=no
EOF

(2) 修改/usr/lib/systemd/system/systemd-logind.service文件中的“RemoveIPC”值为“no”
# cat >> /usr/lib/systemd/system/systemd-logind.service <<EOF
RemoveIPC=no
EOF
(3) 重启服务
systemctl daemon-reload
systemctl restart systemd-logind.service

(4) 结果验证
loginctl show-session | grep RemoveIPC
systemctl show systemd-logind | grep RemoveIPC
说明:没有输出是正常的。

配置sudo权限

cat  >>/etc/sudoers << EOF
kingbase ALL=(ALL) NOPASSWD:ALL
EOF

设置/etc/hosts

# cat >> /etc/hosts <<EOF
192.*.*.60 node1       #注意*要根据实际情况替换
EOF

设置内核参数

# cat >> /etc/sysctl.conf <<EOF
#added by kingbase
fs.aio-max-nr= 1048576
fs.file-max= 6815744
kernel.shmall= 2097152
kernel.shmmax= 4294967295
kernel.shmmni= 4096
kernel.sem= 250 32000 100 128
net.ipv4.ip_local_port_range= 9000 65500
net.core.rmem_default= 262144
net.core.rmem_max= 4194304
net.core.wmem_default= 262144
net.core.wmem_max= 1048576
EOF

sysctl -p 生效

设置资源限制

# cat >> /etc/security/limits.conf <<EOF
#added by kingbase
* soft nofile 65536
* hard nofile 65535
* soft nproc 65536
* hard nproc 65535
* soft core unlimited
* hard core unlimited
EOF

创建用户及用户组

# groupadd -g 1101 kingbase
# useradd -g kingbase -u 1101 -m kingbase
# passwd kingbase

创建软件安装目录并授权

# mkdir -p /opt/kes/v9
# chown -R kingbase:kingbase /opt/kes/v9

创建数据目录并授权

数据目录是KingbaseES中存放数据文件的目录,默认是在安装目录下的data目录。也可以与安装目录分开单独设置。

# mkdir -p /data
# chown -R kingbase:kingbase /data

KES安装包挂载

# mount -o loop /soft/KingbaseES_V009R003C011B0003_Lin64_install.iso /mnt/

命令行安装

主要安装过程如下:

# su - kingbase
$ cd /mnt
$ ./setup.sh 
1、接受许可协议
2、选择安装方式
  ->1- Full
    2- Client
    3- Custom
3、选择license文件:
   File Path: /home/kingbase/license_mysql.dat
4、选择软件安装文件夹
   ENTER AN ABSOLUTE PATH, OR PRESS <ENTER> TO ACCEPT THE DEFAULT
      : /opt/kes/v9 
5、选择数据目录文件夹
   Data folder (Default: /opt/kes/v9/data): /data
6、输入端口
   Please enter database service listened port, default 54321.
   Port (Default: 54321): 
5、输入数据库管理用户和密码
   Please enter database administrator user name.
   User: (Default: system): 
   Please Enter the Password: Please Enter the Password:******
6、输入服务器字符集编码
   Please enter server character set encoding.
    1- default
  ->2- UTF8
    3- GBK
    4- GB2312
    5- GB18030
ENTER THE NUMBER FOR YOUR CHOICE, OR PRESS <ENTER> TO ACCEPT THE DEFAULT: 2
7、输入数据库的区域设置
Please enter the Database Locale.
    1- C
  ->2- zh_CN.UTF-8
    3- en_US.UTF-8
ENTER THE NUMBER FOR YOUR CHOICE, OR PRESS <ENTER> TO ACCEPT THE DEFAULT: 2
8、输入数据库模式
Please enter database mode.
  ->1- MySQL
ENTER THE NUMBER FOR YOUR CHOICE, OR PRESS <ENTER> TO ACCEPT THE DEFAULT: 
9、输入大小写敏感性
Case Sensitivity
----------------
Please enter the case sensitivity.

    1- YES
  ->2- NO
 
ENTER THE NUMBER FOR YOUR CHOICE, OR PRESS <ENTER> TO ACCEPT THE DEFAULT: 
10、输入数据库block大小
   Please enter block size used in storing data.
  ->1- 8k
    2- 16k
    3- 32k
ENTER THE NUMBER FOR YOUR CHOICE, OR PRESS <ENTER> TO ACCEPT THE DEFAULT: 1
11、输入加密方法
   Please enter the encrypt method.
  ->1- scram-sha-256
    2- scram-sm3
    3- sm4
    4- sm3
 ENTER THE NUMBER FOR YOUR CHOICE, OR PRESS <ENTER> TO ACCEPT THE DEFAULT: 1
12、自定义参数
   Please enter database custom parameters.
   Custom (Default:  ): 
13、初始化数据库
   The database will be initialized, which may take some time. Please be patient.
   PRESS <ENTER> TO CONTINUE: 
14、安装完成
Congratulations. KingbaseES V9 has been successfully installed to:
/opt/kes/v9
If you want to register KingbaseES V9 as OS service, please run
    /opt/kes/v9/install/script/root.sh
PRESS <ENTER> TO EXIT THE INSTALLER: 
Complete.
15、root用户注册服务
root用户执行 /opt/kes/v9/install/script/root.sh
# /opt/kes/v9/install/script/root.sh
Starting KingbaseES V9: 
waiting for server to start.... done
server started
KingbaseES V9 started successfully

启停KES服务

# systemctl start kingbased
# systemctl status kingbased
# systemctl stop kingbased

配置kingbase用户环境变量

cat >>/home/kingbase/.bashrc<<EOF
export KINGBASE_DATA=/data
export PATH=$PATH:/opt/kes/v9/Server/bin
export LANG=zh_CN.UTF8
export KINGBASE_PORT=54321
EOF

环境变量生效:

source /home/kingbase/.bashrc

数据库连接测试

ksql连接测试

[kingbase@node1 ~]$ ksql -U system -d test
用户 system 的口令:
授权类型: SALES-企业版.
输入 "help" 来获取帮助信息.

test=# 
# 查看数据库连接信息
test=# \conninfo
以用户 "system" 的身份,通过套接字"/tmp"在端口"54321"连接到数据库 "test"

# 查看数据库版本

test=# select version();
         version         
-------------------------
 KingbaseES V009R003C011
(1 row)

test=# 
# 查看数据库兼容模式
test=# show database_mode;
 database_mode 
---------------
 mysql
(1 行记录)

# 查看数据库列表
test=# \l
                                  数据库列表
   名称    | 拥有者 | 字元编码 |  校对规则   |    Ctype    |     存取权限      
-----------+--------+----------+-------------+-------------+-------------------
 kingbase  | system | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | 
 security  | system | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | 
 template0 | system | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/system        +
           |        |          |             |             | system=CTc/system
 template1 | system | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/system        +
           |        |          |             |             | system=CTc/system
 test      | system | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | 
(5 行记录)

test=# 

# 查看数据库自带的用户列表
test=# \du
                              角色列表
  角色名称  |                    属性                    | 成员属于 
------------+--------------------------------------------+----------
 kcluster   | 无法登录                                   | {}
 sao        | 没有继承, 建立角色                         | {}
 sao_oper   | 没有继承, 无法登录                         | {}
 sao_public | 没有继承, 无法登录                         | {}
 sso        | 没有继承, 建立角色                         | {}
 sso_oper   | 没有继承, 无法登录                         | {}
 sso_public | 没有继承, 无法登录                         | {}
 system     | 超级用户, 建立角色, 建立 DB, 复制, 绕过RLS | {}

test=# 

# 创建表
test=# create table testtab(id int);
CREATE TABLE

# 查看表
test=# \dt
               关联列表
 架构模式 |  名称   |  类型  | 拥有者 
----------+---------+--------+--------
 public   | testtab | 数据表 | system
(1 行记录)

test=# 

navicat连接测试

image.png
image.png
image.png
image.png

dbeaver连接测试

KES软件自带jdbc驱动,位置在KES软件安装目录的Interface/jdbc目录下。本例中KES软件安装目录是/opt/kes/v9,自带的驱动如下:

[root@node1 ~]# cd /opt/kes/v9/Interface/jdbc
[root@node1 jdbc]# ll
total 12552
-rw-rw-r-- 1 kingbase kingbase 5867298 Feb 14  2025 bcprov-jdk15on-1.70.jar
-rw-rw-r-- 1 kingbase kingbase 1211035 Feb 14  2025 kingbase8-9.0.0.jar
-rw-rw-r-- 1 kingbase kingbase 1066191 Feb 14  2025 kingbase8-9.0.0.jre6.jar
-rw-rw-r-- 1 kingbase kingbase 1206164 Feb 14  2025 kingbase8-9.0.0.jre7.jar
-rw-rw-r-- 1 kingbase kingbase 1212488 Feb 14  2025 postgresql-42.2.9.jar
-rw-rw-r-- 1 kingbase kingbase 1067360 Feb 14  2025 postgresql-42.2.9.jre6.jar
-rw-rw-r-- 1 kingbase kingbase 1207631 Feb 14  2025 postgresql-42.2.9.jre7.jar

把数据库服务器上的kingbase8-9.0.0.jar驱动下载到本地。
dbeaver通过jdbc连接数据库:

新建驱动:选择菜单Database->Driver Manager->New
image.png

新建数据库连接:选择菜单Database->New Database Connection->选择刚才创建的kingbase驱动
image.png

测试连接:
image.png

查看表结构:
image.png

查询表数据:
image.png

SQL兼容测试–INSERT ON DUPLICATE KEY

CREATE TABLE tab2( a INT primary key, b INT ); INSERT INTO tab2 VALUES(1,2); INSERT INTO tab2 VALUES(2,3); INSERT INTO tab2 VALUES(3,4); select * from tab2; INSERT INTO tab2 VALUES(3,5) ON DUPLICATE KEY UPDATE a = b; SELECT * FROM tab2;

mysql中执行过程如下:
image.png
kingbase中执行过程如下:
image.png
结论:INSERT ON DUPLICATE KEY语法是兼容的。

SQL兼容测试–IGNORE

SELECT * FROM tab2; update ignore tab2 set a=2 where a=4;

mysql中执行过程如下:
image.png
kingbase中执行过程如下:
image.png
结论:ignore语法是兼容的。

SQL兼容测试–LOAD DATA INFILE

1、LOAD DATA INFILE … INTO TABLE employees FIELDS TERMINATED BY ‘,’;

##创建表 CREATE TABLE employees ( id INT PRIMARY KEY, salary DECIMAL(10, 2), deptno int ); ##编辑emp.csv文件 cat /tmp/emp.csv 1,9000,10 2,10000,10 3,5000,20 ##将文件中的数据导入到表中 LOAD DATA INFILE '/tmp/emp.csv' INTO TABLE employees FIELDS TERMINATED BY ',';

mysql执行过程如下:
image.png
kingbase执行过程如下:
image.png
结论:mysql和kingbase执行结果相同,语法兼容。

2、LOAD DATA INFILE … INTO TABLE employees FIELDS TERMINATED BY ‘,’ ENCLOSED BY ‘’’ LINES TERMINATED BY ‘\n’;

##创建表 CREATE TABLE employees2 ( id INT PRIMARY KEY, name varchar(30), salary DECIMAL(10, 2), deptno int ); ##编辑emp2.csv文件 cat /tmp/emp2.csv 1,'张三',9000,10 2,'李四',10000,10 3,'王五',5000,20 ##将文件中的数据导入到表中 LOAD DATA INFILE '/tmp/emp2.csv' INTO TABLE employees2 FIELDS TERMINATED BY ',' ENCLOSED BY '\'' LINES TERMINATED BY '\n';

mysql执行过程如下:
image.png
kingbase执行过程如下:
image.png
结论:mysql和kingbase的语法稍有不同。

kingbase中可以用如下语句执行:
image.png

SQL兼容测试–GROUP BY WITH ROLLUP

CREATE TABLE sales ( id INT PRIMARY KEY AUTO_INCREMENT, region VARCHAR(50), product_category VARCHAR(50), year INT, quarter INT, amount DECIMAL(10, 2) ); INSERT INTO sales (region, product_category, year, quarter, amount) VALUES ('North', 'Electronics', 2023, 1, 15000.00), ('North', 'Electronics', 2023, 2, 18000.00), ('North', 'Clothing', 2023, 1, 8000.00), ('North', 'Clothing', 2023, 2, 9500.00), ('South', 'Electronics', 2023, 1, 22000.00), ('South', 'Electronics', 2023, 2, 25000.00), ('South', 'Clothing', 2023, 1, 12000.00), ('South', 'Clothing', 2023, 2, 14000.00), ('North', 'Electronics', 2024, 1, 16000.00), ('North', 'Clothing', 2024, 1, 9000.00), ('South', 'Electronics', 2024, 1, 23000.00), ('South', 'Clothing', 2024, 1, 13000.00); SELECT COALESCE(region, '所有地区') AS region, COALESCE(product_category, '所有类别') AS product_category, COALESCE(CAST(year AS CHAR), '所有年份') AS year, COALESCE(CAST(quarter AS CHAR), '所有季度') AS quarter, SUM(amount) AS total_amount FROM sales GROUP BY region, product_category, year, quarter WITH ROLLUP ORDER BY region, product_category, year, quarter;

mysql中执行过程如下:
image.png
kingbase中执行过程如下:
image.png
结论:GROUP BY WITH ROLLUP语法是兼容的。

附录:KingbaseES(KES)卸载

删除服务

# sh /opt/kes/v9/install/script/rootuninstall.sh

卸载KES

# su - kingbase
$ /opt/kes/v9/Uninstall/Uninstaller

碰到的问题

使用navicat工具查看创建的testtab表字段时报错:
image.png
看来navicat对kes的兼容还有待完善。

参考文档

https://bbs.kingbase.com.cn/documentGuide?recId=ef7404928de44316a3e72c84e64af712

总结

通过以上测试发现,KingbaseES(MySQL兼容版)和mysql的兼容度还是很高的,后面有时间再测试其他功能。

关于作者:
网名:飞天,墨天轮2024年度优秀原创作者,拥有 Oracle 10g OCM 认证、PGCE认证、MySQL 8.0 OCP认证以及OBCA、KCP、KCSM、ACP、磐维等众多国产数据库认证证书,目前从事Oracle、Mysql、PostgresSQL、磐维数据库管理运维工作,喜欢结交更多志同道合的朋友,热衷于研究、分享数据库技术。
微信公众号:飞天online
墨天轮:https://www.modb.pro/u/15197
如有任何疑问,欢迎大家留言,共同探讨~~~

最后修改时间:2025-09-01 23:05:27
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论