一、產品簡介
為滿足企業級用戶在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兼容版)版本說明書》。




