KingbaseES(MySQL兼容版)數(shù)據(jù)庫簡介
金倉數(shù)據(jù)庫管理系統(tǒng)[簡稱:KingbaseES]是中電科金倉(北京)科技股份有限公司(簡稱電科金倉)自主研發(fā)的、具有自主知識產(chǎn)權的商用關系型數(shù)據(jù)庫管理系統(tǒng)(DBMS)。該產(chǎn)品面向事務處理類應用,兼顧各類數(shù)據(jù)分析類應用,可用做信息管理系統(tǒng)、業(yè)務及生產(chǎn)系統(tǒng)、決策支持系統(tǒng)、全文檢索、地理信息系統(tǒng)等的承載數(shù)據(jù)庫。
KingbaseES支持多種操作系統(tǒng)和硬件平臺:支持Linux、國產(chǎn)Kylin等數(shù)十個操作系統(tǒng)產(chǎn)品版本,支持通用x86_64及國產(chǎn)飛騰、鯤鵬等CPU硬件體系架構。
針對不同類型的客戶需求,KingbaseES提供標準版、企業(yè)版、專業(yè)版、開發(fā)版等多種版本。這些版本構建于同一數(shù)據(jù)庫引擎上,不同平臺版本完全兼容。
KingbaseES軟件能夠提供一主一備以及一主多備的高可用集群架構,實現(xiàn)數(shù)據(jù)及實例級 (異地) 故障容災,也能夠提供多節(jié)點并行服務,內(nèi)存融合及存儲共享,實現(xiàn)高并發(fā)性能利用最大化,結合讀寫分離或備份使用同步實現(xiàn)數(shù)據(jù)保護最大化。

KingbaseES(MySQL兼容版)單機部署
KES 軟件下載
https://www.kingbase.com.cn/download.html

license下載

安裝前準備
硬件環(huán)境要求
KingbaseES支持通用X86_64、飛騰、鯤鵬等國產(chǎn)CPU硬件體系架構。

軟件環(huán)境要求
KingbaseES支持各種主流的Linux操作系統(tǒng)64位發(fā)行版本,包括CentOS、中標麒麟、銀河麒麟、統(tǒng)信UOS、Deepin、凝思、中科方德、歐拉等操作系統(tǒng)。
主機、目錄規(guī)劃
| 主機名 | ip地址 | OS版本 | 內(nèi)存、CPU | 節(jié)點角色 | 數(shù)據(jù)庫端口 |
|---|---|---|---|---|---|
| node1 | 192.*.*.60 | centos7.9 | 4G 、 1個雙核 | 主節(jié)點 | 54321 |
軟件包:/soft/KingbaseES_V009R003C011B0003_Lin64_install.iso
license文件:/home/kingbase/license_mysql.dat
軟件安裝目錄 /opt/kes/v9
數(shù)據(jù)存放目錄 /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服務中引入的一個特性,是當一個用戶退出系統(tǒng)后,會刪除所有有關的IPC對象。該特性由/etc/systemd/logind.conf文件中的RemoveIPC參數(shù)控制。某些操作系統(tǒng)會默認打開,會造成程序信號丟失等問題(只有redhat7及以上和一些特殊的國產(chǎn)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 #注意*要根據(jù)實際情況替換
EOF
設置內(nèi)核參數(shù)
# 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
創(chuàng)建用戶及用戶組
# groupadd -g 1101 kingbase
# useradd -g kingbase -u 1101 -m kingbase
# passwd kingbase
創(chuàng)建軟件安裝目錄并授權
# mkdir -p /opt/kes/v9
# chown -R kingbase:kingbase /opt/kes/v9
創(chuàng)建數(shù)據(jù)目錄并授權
數(shù)據(jù)目錄是KingbaseES中存放數(shù)據(jù)文件的目錄,默認是在安裝目錄下的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、接受許可協(xié)議
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、選擇數(shù)據(jù)目錄文件夾
Data folder (Default: /opt/kes/v9/data): /data
6、輸入端口
Please enter database service listened port, default 54321.
Port (Default: 54321):
5、輸入數(shù)據(jù)庫管理用戶和密碼
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、輸入數(shù)據(jù)庫的區(qū)域設置
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、輸入數(shù)據(jù)庫模式
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、輸入數(shù)據(jù)庫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、自定義參數(shù)
Please enter database custom parameters.
Custom (Default: ):
13、初始化數(shù)據(jù)庫
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用戶執(zhí)行 /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用戶環(huán)境變量
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
環(huán)境變量生效:
source /home/kingbase/.bashrc
數(shù)據(jù)庫連接測試
ksql連接測試
[kingbase@node1 ~]$ ksql -U system -d test
用戶 system 的口令:
授權類型: SALES-企業(yè)版.
輸入 "help" 來獲取幫助信息.
test=#
# 查看數(shù)據(jù)庫連接信息
test=# \conninfo
以用戶 "system" 的身份,通過套接字"/tmp"在端口"54321"連接到數(shù)據(jù)庫 "test"
# 查看數(shù)據(jù)庫版本
test=# select version();
version
-------------------------
KingbaseES V009R003C011
(1 row)
test=#
# 查看數(shù)據(jù)庫兼容模式
test=# show database_mode;
database_mode
---------------
mysql
(1 行記錄)
# 查看數(shù)據(jù)庫列表
test=# \l
數(shù)據(jù)庫列表
名稱 | 擁有者 | 字元編碼 | 校對規(guī)則 | 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=#
# 查看數(shù)據(jù)庫自帶的用戶列表
test=# \du
角色列表
角色名稱 | 屬性 | 成員屬于
------------+--------------------------------------------+----------
kcluster | 無法登錄 | {}
sao | 沒有繼承, 建立角色 | {}
sao_oper | 沒有繼承, 無法登錄 | {}
sao_public | 沒有繼承, 無法登錄 | {}
sso | 沒有繼承, 建立角色 | {}
sso_oper | 沒有繼承, 無法登錄 | {}
sso_public | 沒有繼承, 無法登錄 | {}
system | 超級用戶, 建立角色, 建立 DB, 復制, 繞過RLS | {}
test=#
# 創(chuàng)建表
test=# create table testtab(id int);
CREATE TABLE
# 查看表
test=# \dt
關聯(lián)列表
架構模式 | 名稱 | 類型 | 擁有者
----------+---------+--------+--------
public | testtab | 數(shù)據(jù)表 | system
(1 行記錄)
test=#
navicat連接測試




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
把數(shù)據(jù)庫服務器上的kingbase8-9.0.0.jar驅動下載到本地。
dbeaver通過jdbc連接數(shù)據(jù)庫:
新建驅動:選擇菜單Database->Driver Manager->New

新建數(shù)據(jù)庫連接:選擇菜單Database->New Database Connection->選擇剛才創(chuàng)建的kingbase驅動

測試連接:

查看表結構:

查詢表數(shù)據(jù):

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中執(zhí)行過程如下:

kingbase中執(zhí)行過程如下:

結論:INSERT ON DUPLICATE KEY語法是兼容的。
SQL兼容測試–IGNORE
SELECT * FROM tab2; update ignore tab2 set a=2 where a=4;
mysql中執(zhí)行過程如下:

kingbase中執(zhí)行過程如下:

結論:ignore語法是兼容的。
SQL兼容測試–LOAD DATA INFILE
1、LOAD DATA INFILE … INTO TABLE employees FIELDS TERMINATED BY ‘,’;
##創(chuàng)建表
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
##將文件中的數(shù)據(jù)導入到表中
LOAD DATA INFILE '/tmp/emp.csv' INTO TABLE employees FIELDS TERMINATED BY ',';
mysql執(zhí)行過程如下:

kingbase執(zhí)行過程如下:

結論:mysql和kingbase執(zhí)行結果相同,語法兼容。
2、LOAD DATA INFILE … INTO TABLE employees FIELDS TERMINATED BY ‘,’ ENCLOSED BY ‘’’ LINES TERMINATED BY ‘\n’;
##創(chuàng)建表
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
##將文件中的數(shù)據(jù)導入到表中
LOAD DATA INFILE '/tmp/emp2.csv'
INTO TABLE employees2
FIELDS TERMINATED BY ','
ENCLOSED BY '\''
LINES TERMINATED BY '\n';
mysql執(zhí)行過程如下:

kingbase執(zhí)行過程如下:

結論:mysql和kingbase的語法稍有不同。
kingbase中可以用如下語句執(zhí)行:

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, '所有地區(qū)') 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中執(zhí)行過程如下:

kingbase中執(zhí)行過程如下:

結論:GROUP BY WITH ROLLUP語法是兼容的。
附錄:KingbaseES(KES)卸載
刪除服務
# sh /opt/kes/v9/install/script/rootuninstall.sh
卸載KES
# su - kingbase
$ /opt/kes/v9/Uninstall/Uninstaller
碰到的問題
使用navicat工具查看創(chuàng)建的testtab表字段時報錯:

看來navicat對kes的兼容還有待完善。
參考文檔
https://bbs.kingbase.com.cn/documentGuide?recId=ef7404928de44316a3e72c84e64af712
總結
通過以上測試發(fā)現(xiàn),KingbaseES(MySQL兼容版)和mysql的兼容度還是很高的,后面有時間再測試其他功能。
關于作者:
網(wǎng)名:飛天,墨天輪2024年度優(yōu)秀原創(chuàng)作者,擁有 Oracle 10g OCM 認證、PGCE認證、MySQL 8.0 OCP認證以及OBCA、KCP、KCSM、ACP、磐維等眾多國產(chǎn)數(shù)據(jù)庫認證證書,目前從事Oracle、Mysql、PostgresSQL、磐維數(shù)據(jù)庫管理運維工作,喜歡結交更多志同道合的朋友,熱衷于研究、分享數(shù)據(jù)庫技術。
微信公眾號:飛天online
墨天輪:http://www.sunline.cc/u/15197
如有任何疑問,歡迎大家留言,共同探討~~~




