一、产品简介
为满足企业级用户在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、启动数据库
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兼容模式下完美支持:
- ON DUPLICATE KEY UPDATE:主键冲突时执行更新操作
- VALUES()函数:引用INSERT语句中的值
- 部分字段更新:只更新指定字段,其他字段保持不变
- 主键约束识别:自动检测主键冲突
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兼容版)版本说明书》。




