暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

金仓 KingbaseES V9 MySQL 兼容版安装测试新体验

原创 jiayou 2025-09-01
372

一、产品简介

为满足企业级用户在MySQL替换、事务处理、高并发访问及复杂查询等业务场景,对平滑迁移、高性能、高可靠性和易用性的需求,KingbaseES在保留V009R001C002B0014版本MySQL模式原有能力的基础上推出了MySQL兼容版。最新版本号为V009R003C011。

版本优化

在工具方面,该版本进行了功能增强,包括:KDTS迁移工具支持全英文界面,对象管理工具支持将二进制数据显示为字符串、十六进制(hex)和base64格式。

在性能管理方面,该版本修复了EXPLAIN中使用HINT指定索引的问题。

获取方式

前往金仓官网(https://www.kingbase.com.cn/download.html)获取KingbaseESV9R3C11(MySQL兼容版)安装包。

此外官方提供90天企业版授权文件供测试使用。

二、金仓数据库安装与配置

1、环境准备:

KES支持包括Window、linux、统信、麒麟、欧拉等大部分操作系统平台,本文已Linux系统为例部署KES。

1.创建kingbase 用户

root # adduser kingbase

root # echo kingbase | passwd --stdin kingbase

2.创建相关目录并授权

root # mkdir -p /opt/Kingbase/ES/V9 /install

root # mkdir /opt/Kingbase/ES/V9/data

root # chown -R kingbase:kingbase /opt/Kingbase

root # chmod -R 775 /opt/Kingbase

root # chmod -R 700 /opt/Kingbase/ES/V9/data

上传安装包和授权文件到/install目录中

执行linux操作系统优化/install/optimize_system_conf.sh

执行/install/kb_scripts/kb_install/optimize_database_conf.sh

3.配置kingbase用户环境变量

kingbase> vi ~/.bash_profile

--------------------input------------------------------

export KINGBASE_HOME= /opt/Kingbase/ES/V9/Server

export KINGBASE_DATA= /opt/Kingbase/ES/V9/data

export PATH=$PATH: /opt/Kingbase/ES/V9/Server/bin

export KINGBASE_PORT=54321

kingbase> source .bash_profile

4.上传数据库介质及授权文件

5.系统参数设置

--调整并查看flysync用户的最大文件句柄数为65535、允许创建的最大进程数量为8096

root # vi /etc/security/limits.conf

--------------------input------------------------------

kingbase - nofile 65535

kingbase - nproc 8096

--hosts文件配置增加主机解析条目

root # vi /etc/hosts

--------------------input------------------------------

192.168.126.110 adminnode

2、静默安装:

使用kingbase 用户进行V9产品安装

#挂载KES数据库镜像文件

root # cp /mnt/iso/setup/silent.cfg /home/kingbase/

root # chown kingbase:kingbase /home/kingbase/silent.cfg

root # chmod +w /home/kingbase/silent.cfg

#修改静默配置文件

kingbase> vi silent.cfg

#license file path

KB_LICENSE_PATH=/home/kingbase/license_mysql.dat

#install dir path

USER_INSTALL_DIR=/opt/Kingbase/ES/V9

#data dir path

USER_SELECTED_DATA_FOLDER=/opt/Kingbase/ES/V9/data

#password, required

DB_PASS=kingbase

#password confirm, required

DB_PASS2=kingbase

kingbase> sh ./setup.sh -i silent -f /home/kingbase/silent.cfg

Now launch installer...

Verifying JVM...Complete.

提示完成KES 安装。如果需要数据库随系统自启动执行如下脚本,完成KES服务注册。

root # /opt/Kingbase/ES/V9/install/script/root.sh

3、启动数据库

Kingbase> sys_ctl start

starting KingbaseES V009R003C011

done
server started

4、连接数据库

可以通过金仓客户端开发工具KStudio连接数据库,也可以使用ksql命令行工具连接数据库。

1.KStudio 连接数据库

#进入ClientTools/guitools/KStudio目录打开KStudio程序

2.ksql 命令行工具连接数据库

Kingbase> ksql test system

#查看当前版本

# select version();

version

-------------------------

KingbaseES V009R003C011

(1 row)

#查看数据库兼容模式

# show database_mode;

database_mode

---------------

mysql

(1 row)

#查看默认数据库信息

# \l

KingbaseES初始化创建数据库集簇时,会创建两个模板数据库:TEMPLATE0 和 TEMPLATE1,用户数据库kingbase和test,以及存放系统安全信息的数据库security。

三、MySQL 兼容性测试

1、数据操作语句(DML)兼容性测试

1. INSERT IGNORE + IGNORE/LIMIT 子句

-- 创建设备信息表(主键:device_id)

CREATE TABLE device_info (

device_id CHAR(10) PRIMARY KEY COMMENT '设备ID',

device_name VARCHAR(20) NOT NULL COMMENT '设备名称',

status TINYINT DEFAULT 0 COMMENT '状态:0-正常,1-停用'

);

-- 插入初始数据

INSERT INTO device_info (device_id, device_name)

VALUES ('D20250001', '扫描仪'), ('D20250002', '打印机');

-- 尝试插入重复主键(device_id='D20250001')

INSERT IGNORE INTO device_info (device_id, device_name)

VALUES ('D20250001', '高拍仪'), ('D20250003', '服务器');

-- 查询结果

SELECT * FROM device_info;

-- 创建员工绩效表(唯一键:emp_id)

CREATE TABLE employee_performance (

emp_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '员工ID',

emp_name VARCHAR(20) NOT NULL COMMENT '姓名',

points INT DEFAULT 0 COMMENT '积分',

dept_id INT NOT NULL COMMENT '部门ID',

UNIQUE KEY udx_name_dept (emp_name, dept_id)

);

-- 插入测试数据

INSERT INTO employee_performance (emp_name, points, dept_id)

VALUES ('张三', 100, 101), ('李四', 80, 101), ('王五', 120, 102);

-- 更新操作:为部门101的员工增加积分(忽略唯一键冲突,限制更新2条)

UPDATE IGNORE employee_performance

SET points = points + 50

WHERE dept_id = 101

ORDER BY points DESC

LIMIT 2;

-- 查询更新后数据

SELECT * FROM employee_performance;

兼容性验证总结

特性

测试结果

关键表现

INSERT IGNORE

通过

主键/唯一键冲突时跳过错误,继续执行非冲突插入

UPDATE IGNORE + LIMIT

通过

限制更新条数并忽略约束冲突,语法行为与 MySQL 一致

2. INSERT ON DUPLICATE KEY UPDATE

-- 插入设备维护记录,冲突时更新维护时间。

CREATE TABLE device_maintenance (

device_code CHAR(8) PRIMARY KEY,

last_maintenance DATE,

next_due DATE

);

INSERT INTO device_maintenance VALUES ('DEV-2025', '2025-06-01', '2025-12-01');

-- 主键冲突时更新维护时间

INSERT INTO device_maintenance (device_code, last_maintenance)

VALUES ('DEV-2025', '2025-07-31')

ON DUPLICATE KEY UPDATE last_maintenance = VALUES(last_maintenance);

结果:device_code='DEV-2025'的 last_maintenance更新为 2025-07-31,其他字段不变

兼容性验证总结

KingbaseES V9R3 C11在MySQL兼容模式下完美支持:

  1. ON DUPLICATE KEY UPDATE:主键冲突时执行更新操作
  2. VALUES()函数:引用INSERT语句中的值
  3. 部分字段更新:只更新指定字段,其他字段保持不变
  4. 主键约束识别:自动检测主键冲突

3. REPLACE INTO

-- 替换部门联络人信息(主键冲突时整行替换)。

CREATE TABLE dept_contact (

dept_id INT PRIMARY KEY,

contact_person VARCHAR(20),

phone CHAR(11)

);

INSERT INTO dept_contact VALUES (1, '张工', '13800138000');

-- 主键冲突时替换整行

REPLACE INTO dept_contact

VALUES (1, '李工', '13900139000');

结果:dept_id=1的旧记录被删除后插入新数据,contact_person和 phone均更新

4. LOAD DATA INFILE

-- 文件 /home/kingbase /device_202507.csv 内容:

“DEV2025001”,”高精度传感器”,0,”2025-07-10”

-- 从 CSV 导入设备信息数据

LOAD DATA INFILE '/home/kingbase/device_202507.csv'

INTO TABLE device_info

FIELDS TERMINATED BY ',' -- 字段分隔符为逗号

OPTIONALLY ENCLOSED BY '"' -- 字段可选引号包裹

LINES TERMINATED BY '\n' -- 行终止符为换行

;

结果:CSV 数据成功导入

2、数据查询语句:GROUP BY WITH ROLLUP

-- 统计各项目组不同职级的成本汇总及多级小计。

CREATE TABLE project_team (

project_code VARCHAR(10),

job_role VARCHAR(20),

monthly_cost DECIMAL(10,2)

);

INSERT INTO project_team VALUES

('P2025-A', 'Developer', 15000.00),

('P2025-A', 'QA', 12000.00),

('P2025-B', 'Developer', 18000.00);

-- 多级汇总:按项目和职级分组,生成项目小计和总计

SELECT project_code, job_role, SUM(monthly_cost) AS total_cost

FROM project_team

GROUP BY project_code, job_role WITH ROLLUP;

3、PLMYSQL 兼容性测试

1. 用户变量与存储过程

-- 使用 @bonus_rate变量计算部门奖金池,并通过存储过程更新员工奖金

-- 创建测试表

CREATE TABLE employee_perf (

emp_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '员工ID',

emp_name VARCHAR(20) NOT NULL COMMENT '姓名',

points INT DEFAULT 0 COMMENT '绩效积分',

dept_id INT NOT NULL COMMENT '部门ID'

);

CREATE TABLE dept_bonus (

dept_id INT PRIMARY KEY COMMENT '部门ID',

bonus_pool DECIMAL(10,2) DEFAULT 0.00 COMMENT '奖金池'

);

-- 插入数据

INSERT INTO employee_perf (emp_name, points, dept_id)

VALUES ('张三', 150, 101), ('李四', 200, 101), ('王五', 180, 102);

INSERT INTO dept_bonus VALUES (101, 5000.00), (102, 8000.00);

-- 定义用户变量(跨会话有效)

SET @bonus_rate = 0.1; -- 奖金系数

-- 创建存储过程:按部门汇总绩效并分配奖金

DELIMITER $$

CREATE PROCEDURE calc_dept_bonus(IN dept INT)

BEGIN

DECLARE total_points INT;

DECLARE bonus_allocation DECIMAL(10,2);

-- 计算部门总积分

SELECT SUM(points) INTO total_points

FROM employee_perf WHERE dept_id = dept;

-- 计算奖金分配额

SET bonus_allocation = total_points * @bonus_rate;

-- 更新奖金池

UPDATE dept_bonus

SET bonus_pool = bonus_pool - bonus_allocation

WHERE dept_id = dept;

-- 输出调试信息

SELECT CONCAT('部门 ', dept, ' 分配奖金: ', bonus_allocation) AS log;

END

$$

DELIMITER ;

-- 调用存储过程

CALL calc_dept_bonus(101);

四、总结

本次测试在 KingbaseES MySQL 兼容模式下完成部分语法兼容性、功能兼容性。想要了解更多MySQL兼容版信息请查阅官方手册,《金仓数据库管理系统KingbaseES(MySQL兼容版)版本说明书》

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

文章被以下合辑收录

评论