【KingbaseES数据库教程】国产化信创背景下的数据库选型与初识

一、 开篇前言

📝 本篇学习目标

咱们这是《KingbaseES数据库零基础入门到高阶实战全教程》专栏的第一篇。其实也就是个开头。今天这篇,咱们不搞那些特别虚的。主要目标就三个:第一,搞明白现在为什么大家都在弄国产数据库;第二,弄清楚KingbaseES到底是个啥东西,它能干嘛;第三,咱们手把手在电脑上把安装前的环境给查验一遍。

🧩 前篇知识回顾衔接

因为这是第一篇,前面没啥可回顾的。咱们就当是从零起步。如果你以前是搞开发的,或者是搞运维的,甚至你是个刚毕业的计算机学生,都没关系。只要你对数据库有点概念,比如知道数据是存在表里的,这就够了。接下来的500篇,我会带你一点点把这个国产数据库给啃下来。

💼 本篇适用场景

通常来说,你要是去了国企、事业单位,或者说你们公司要搞信创项目,领导突然丢给你一个任务:"小王啊,咱们明年要把数据库换成国产的,你先去调研一下。"这时候你看这篇就对了。还有的情况是,你以前一直用Oracle或者MySQL,现在要转型做国产化适配,这篇文章就是你的引路人。

🚀 学完能掌握什么技能

学完这篇,你能在同事或者领导面前把信创和KingbaseES的门道说出个一二三来。也就是说,你不会一听"国产数据库"就觉得心里没底。而且,咱们文章最后带了实操,你能自己在Linux服务器上把安装KingbaseES的前置条件给搞定。这对于后面咱们真正安装数据库是非常关键的一步。

二、 核心概念超详细讲解

2.1 到底什么是信创?为什么现在要搞国产化数据库?

其实这两年的情况大家也都看到了。很多企事业单位都在搞替换。那为什么要替换呢?原因其实很简单,底层的核心技术不能一直攥在别人手里。以前咱们用国外的数据库,比如Oracle,用着是挺爽的,功能也强。但是一旦人家不卖给你了,或者说给你断供了,你的业务就停了。这对国家层面的信息安全来说,是个大问题。

那么这个替换的过程,我们就叫它信创。全称是信息技术应用创新。说白了,就是从底层的芯片、操作系统,到上层的数据库、中间件、应用软件,全都用咱们国产的。那么数据库这一层,其实是非常核心的。因为所有的业务数据,不管是财务数据、人员档案,还是交易记录,全都存在数据库里。如果数据库这一层没搞定,信创其实就是个空壳子。也就是说,国产数据库是整个信创替换里最难啃的骨头之一。

💡 重点知识点 :

信创不是某一个具体的技术,它是一个生态替换的动作。咱们搞IT的,以后会越来越多地碰到信创项目。KingbaseES就是在这样的背景下被推到台前的。

2.2 KingbaseES是个什么东西?

KingbaseES到底是个啥呢?说白了,它就是一个关系型数据库管理系统。通常来说,在企业层级里的项目当中,用它来存数据。它不是开源的,大家千万别去网上瞎找什么源码包,找不到的。这是电科金仓出的商业数据库产品。电科金仓这公司背景挺硬的,属于中国电科集团下面的,在国产数据库圈子里算是老牌子了。

那么这个数据库有啥特点呢?其实最核心的一点,就是它的兼容性特别好。它专门针对Oracle做了很深的兼容适配。以前很多企业用Oracle,存储过程写了一大堆,PL/SQL语法用得飞起。现在要换数据库,如果换个语法完全不兼容的,那开发人员不得把代码重写一遍?这成本太大了。KingbaseES就考虑到了这一点,它支持很多Oracle的语法和特性。也就是说,你以前写Oracle的那套东西,放到KingbaseES上,稍微改改甚至不用改,就能跑起来。这对国产化迁移来说,是个巨大的优势。

⚠️ 注意事项 :

KingbaseES是闭源商业软件。咱们后续学习的所有操作,都是基于官方提供的安装包来的。不要去信网上那些所谓的"破解版"或者"开源版",那些往往都带了后门或者被篡改过,企业里用是要出大安全事故的。

2.3 KingbaseES的核心优势有哪些?

咱们用大白话来拆解一下,为什么信创项目里经常能看到KingbaseES的身影。

① 兼容性极强:就像前面说的,它对Oracle的兼容性做得非常细。不光是基础的SQL语法,包括Oracle里的序列、触发器、包、存储过程,甚至是一些系统函数,它都做了兼容。其实很多时候,开发人员迁移代码,就是冲着这个去的。

② 安全性高:国产化项目往往对安全要求极高。KingbaseES在安全这块下了很多功夫。比如它支持三权分立(安全管理员、审计管理员、系统管理员分开),支持强制访问控制(MAC),还有数据加密存储等等。这些特性在国企的等保测评里是非常吃香的。

③ 高可用和集群方案成熟:企业里的数据库不能宕机。KingbaseES有自己的集群管理工具,能搞主从同步、读写分离。其实也就是一台机器挂了,另一台马上能顶上去,保证业务不断。后面咱们到了高阶阶段,会专门讲这些集群怎么搭。

④ 本地化服务好:买商业数据库,买的不仅仅是软件,还有服务。电科金仓在国内有很多原厂的技术支持。出了问题能找到人,这对于核心业务系统来说,往往比技术本身还重要。

2.4 和传统商业数据库Oracle的区别在哪?

既然说它兼容Oracle,那它和Oracle到底有啥区别?其实区别还是很大的。

首先,底层架构不一样。Oracle是一套完全自己搞的体系,非常庞大,装起来也费劲,吃硬件。KingbaseES的架构相对轻量一些,安装部署要快得多。

其次,使用习惯上。虽然KingbaseES兼容Oracle,但不可能做到百分之百一模一样。有些Oracle里特有的Hint,或者某些特别偏门的系统包,在KingbaseES里可能就没有对应的东西。那么在迁移的时候,就需要人工去改这些地方。咱们这个专栏后面会专门有一个阶段讲迁移适配,到时候会把那些坑点一个个给你揪出来。

最后,就是成本。Oracle的授权费那是天价,而且还要按CPU核数算。KingbaseES作为国产数据库,价格上就有优势得多,而且符合国家政策导向。

💡 重点知识点 :

KingbaseES不是Oracle的简单翻版。它有自己的内核体系。它是在自身强大的基础上,向外提供了一套类似Oracle的使用接口和语法糖,让开发者能平滑过渡。

2.5 KingbaseES的整体架构是怎样的?

咱们用一张图来看看KingbaseES大概是个什么结构。其实你不用怕,看不懂很正常,我先给你脑子里建个大概的印象就行。
#mermaid-svg-JrqKazVvCbDtkcJb{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-JrqKazVvCbDtkcJb .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-JrqKazVvCbDtkcJb .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-JrqKazVvCbDtkcJb .error-icon{fill:#552222;}#mermaid-svg-JrqKazVvCbDtkcJb .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-JrqKazVvCbDtkcJb .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-JrqKazVvCbDtkcJb .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-JrqKazVvCbDtkcJb .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-JrqKazVvCbDtkcJb .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-JrqKazVvCbDtkcJb .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-JrqKazVvCbDtkcJb .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-JrqKazVvCbDtkcJb .marker{fill:#333333;stroke:#333333;}#mermaid-svg-JrqKazVvCbDtkcJb .marker.cross{stroke:#333333;}#mermaid-svg-JrqKazVvCbDtkcJb svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-JrqKazVvCbDtkcJb p{margin:0;}#mermaid-svg-JrqKazVvCbDtkcJb .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-JrqKazVvCbDtkcJb .cluster-label text{fill:#333;}#mermaid-svg-JrqKazVvCbDtkcJb .cluster-label span{color:#333;}#mermaid-svg-JrqKazVvCbDtkcJb .cluster-label span p{background-color:transparent;}#mermaid-svg-JrqKazVvCbDtkcJb .label text,#mermaid-svg-JrqKazVvCbDtkcJb span{fill:#333;color:#333;}#mermaid-svg-JrqKazVvCbDtkcJb .node rect,#mermaid-svg-JrqKazVvCbDtkcJb .node circle,#mermaid-svg-JrqKazVvCbDtkcJb .node ellipse,#mermaid-svg-JrqKazVvCbDtkcJb .node polygon,#mermaid-svg-JrqKazVvCbDtkcJb .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-JrqKazVvCbDtkcJb .rough-node .label text,#mermaid-svg-JrqKazVvCbDtkcJb .node .label text,#mermaid-svg-JrqKazVvCbDtkcJb .image-shape .label,#mermaid-svg-JrqKazVvCbDtkcJb .icon-shape .label{text-anchor:middle;}#mermaid-svg-JrqKazVvCbDtkcJb .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-JrqKazVvCbDtkcJb .rough-node .label,#mermaid-svg-JrqKazVvCbDtkcJb .node .label,#mermaid-svg-JrqKazVvCbDtkcJb .image-shape .label,#mermaid-svg-JrqKazVvCbDtkcJb .icon-shape .label{text-align:center;}#mermaid-svg-JrqKazVvCbDtkcJb .node.clickable{cursor:pointer;}#mermaid-svg-JrqKazVvCbDtkcJb .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-JrqKazVvCbDtkcJb .arrowheadPath{fill:#333333;}#mermaid-svg-JrqKazVvCbDtkcJb .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-JrqKazVvCbDtkcJb .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-JrqKazVvCbDtkcJb .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-JrqKazVvCbDtkcJb .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-JrqKazVvCbDtkcJb .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-JrqKazVvCbDtkcJb .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-JrqKazVvCbDtkcJb .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-JrqKazVvCbDtkcJb .cluster text{fill:#333;}#mermaid-svg-JrqKazVvCbDtkcJb .cluster span{color:#333;}#mermaid-svg-JrqKazVvCbDtkcJb div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-JrqKazVvCbDtkcJb .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-JrqKazVvCbDtkcJb rect.text{fill:none;stroke-width:0;}#mermaid-svg-JrqKazVvCbDtkcJb .icon-shape,#mermaid-svg-JrqKazVvCbDtkcJb .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-JrqKazVvCbDtkcJb .icon-shape p,#mermaid-svg-JrqKazVvCbDtkcJb .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-JrqKazVvCbDtkcJb .icon-shape .label rect,#mermaid-svg-JrqKazVvCbDtkcJb .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-JrqKazVvCbDtkcJb .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-JrqKazVvCbDtkcJb .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-JrqKazVvCbDtkcJb :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 发送SQL请求
解析SQL语法
生成执行计划
读写数据
返回结果集
返回给客户端
写入操作日志
客户端/应用程序
KingbaseES服务端进程
查询优化器
执行器
物理存储: 表空间/数据文件
WAL日志文件

咱们简单过一下这个图。

客户端发个SQL过来,比如SELECT * FROM user。服务端进程接到这个请求了。

接着,解析器会看看这个SQL语法对不对。如果不对,直接给你报错退回去。

语法没问题,就交给查询优化器。优化器是个聪明东西,它会想,我是全表扫描快呢,还是走索引快呢?它选定一条最快的路,生成一个执行计划。

然后执行器就按照这个计划,去物理存储里把数据翻出来。如果是修改数据的操作,它还会顺手把操作记录写到WAL日志里,这个日志非常重要,是数据库宕机后恢复数据用的。

最后,数据原路返回给客户端。其实就是这么个流程。

三、 手把手实操教学:安装前的环境检查

咱们学数据库,光说不练假把式。虽然这是第一篇,还没到真正安装那一步,但咱们得把安装前的环境给准备好。其实很多新手装数据库失败,90%都是环境没弄好。咱们今天就拿最常见的Linux环境(CentOS/OpenCloudOS/Kylin等基于RedHat的发行版)来演示。

3.1 操作系统版本检查

KingbaseES对操作系统是有要求的。太老的系统肯定不行。咱们得先看看机器上是个什么系统。

① 登录到你的Linux服务器,输入下面的命令:

bash 复制代码
cat /etc/os-release

⌨️ 控制台输出结果说明:

bash 复制代码
[root@localhost ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"

看到这个输出,说明咱们这台机器是CentOS 7。通常来说,KingbaseES V8版本是支持CentOS 7的。如果你看到的是CentOS 6,那就不行了,太老了,得换系统。现在国产化项目里,经常用的是麒麟OS或者统信UOS,其实命令都差不多,你只要看VERSION_ID别太低就行。

3.2 检查系统内存和磁盘空间

数据库是最吃内存和磁盘的。内存太小,跑起来卡死你;磁盘太小,数据存不下就崩溃了。

① 检查内存使用情况,输入命令:

bash 复制代码
free -h

⌨️ 控制台输出结果说明:

bash 复制代码
[root@localhost ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           3.7G        142M        3.3G         12M        241M        3.3G
Swap:          2.0G          0B        2.0G

咱们主要看total这一列。物理内存(Mem)有3.7G。其实对于测试学习来说,2G是底线,最好能有个4G或者8G。如果你连2G都没有,我建议你还是换个机器吧,别折腾了。另外,Swap交换分区最好也有个2G左右,当做缓冲用。

② 检查磁盘空间,输入命令:

bash 复制代码
df -h

⌨️ 控制台输出结果说明:

bash 复制代码
[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 2.0G     0  2.0G   0% /dev
tmpfs                    2.0G     0  2.0G   0% /dev/shm
tmpfs                    2.0G   12M  2.0G   1% /run
tmpfs                    2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/mapper/centos-root   50G  2.5G   48G   6% /
...

咱们重点看挂载在/根目录下的这个分区。Size是50G,Avail(可用)还有48G。其实装数据库软件本身大概也就1-2个G,但是你得给数据留地方啊。以后建表、导数据,空间嗖嗖就没了。建议根目录至少留个20G以上的空闲空间。如果你这只有几个G,赶紧去扩容磁盘。

3.3 检查网络和端口情况

数据库装好后,是要对外提供服务的。咱们得看看默认的端口(通常是54321)有没有被别的程序占用。

① 检查端口占用情况:

bash 复制代码
netstat -tulnp | grep 54321

⌨️ 控制台输出结果说明:

bash 复制代码
[root@localhost ~]# netstat -tulnp | grep 54321

如果像上面这样,敲完命令什么都没输出,直接回到了命令行提示符。✅这就说明54321端口是空闲的,没被占用,非常好。如果输出了类似tcp 0 0 0.0.0.0:54321 0.0.0.0:* LISTEN 1234/xxx这样的内容,那说明端口被占了,你得找到那个占用端口的进程,把它杀掉,或者等会儿装数据库的时候换个端口。

3.4 关闭防火墙和SELinux(测试环境)

其实在生产环境里,防火墙是不能关的,而是要配置放行数据库端口。但是咱们这是学习环境,为了省事,防止安装过程中各种莫名其妙的网络拦截问题,通常来说,我们会把防火墙和SELinux先关掉。

① 临时关闭防火墙:

bash 复制代码
systemctl stop firewalld

② 永久关闭防火墙(防止机器重启后又起来了):

bash 复制代码
systemctl disable firewalld

⌨️ 控制台输出结果说明:

bash 复制代码
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.

看到输出了Removed symlink,✅说明防火墙已经成功关闭,并且开机也不会自启了。

③ 永久关闭SELinux:

SELinux是个安全子系统,经常会挡住数据库访问文件。咱们得改它的配置文件。

bash 复制代码
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

这个命令其实就是把配置文件里的SELINUX=enforcing替换成SELINUX=disabled。敲完之后,咱们得重启机器才能生效。为了不重启,咱们可以临时关一下:

bash 复制代码
setenforce 0

⌨️ 控制台输出结果说明:

bash 复制代码
[root@localhost ~]# setenforce 0
setenforce: SELinux is disabled

看到SELinux is disabled,✅这就说明当前SELinux已经被关掉了。接下来的安装就不会受它干扰了。

四、 常见报错与问题排查

其实在这个前置环境准备阶段,新手也经常踩坑。我把几个最常见的给你列出来。

4.1 报错:使用netstat命令提示 command not found

❌ 错误现象 :

你在终端敲netstat -tulnp,结果报错了:

bash 复制代码
bash: netstat: command not found

原因分析 :

那为什么会这样呢?原因在于,现在的Linux发行版(特别是最小化安装的),默认不自带net-tools这个网络工具包了。

解决方案 :

咱们得手动装一下。只要你的机器能连外网,敲下面这个命令就行:

bash 复制代码
yum install net-tools -y

装完之后再敲netstat命令,就能正常用了。

4.2 报错:关闭SELinux时报错 setenforce: SELinux is disabled

❌ 错误现象 :

有时候你敲setenforce 0,它直接给你返回一句setenforce: SELinux is disabled,你以为报错了。

原因分析 :

其实这不是报错。✅这恰恰说明你的SELinux当前已经是关闭状态了。也就是说,你之前可能已经关过一次了,或者系统默认就是关的。遇到这个提示,直接忽略就行,不用管它。

4.3 问题:磁盘空间不足怎么扩容?

❌ 错误现象 :

在执行df -h的时候,发现根目录/的Avail(可用空间)只剩几百兆了。

原因分析 **

这种情况往往是因为你分配的虚拟机磁盘太小了,或者系统日志把空间撑爆了。数据库是绝对装不下的。

解决方案 :

如果是虚拟机,先在虚拟机软件里把虚拟磁盘扩容,然后进系统用fdisk和resize2fs命令把分区扩容。这个操作比较复杂,属于Linux运维的基础知识。如果你不会,最简单的办法就是重新建一台大磁盘的虚拟机。咱们学数据库,别在系统运维的坑里卡太久。

五、 本篇总结

咱们今天这篇,算是开胃菜。其实主要讲了这么几点:

  1. 信创大背景下的国产数据库替换趋势,这是个不可逆的过程。咱们搞IT的必须顺应趋势。
  2. KingbaseES是电科金仓的核心产品,是闭源商业数据库。它最大的卖点是高度兼容Oracle,非常适合做平滑迁移。
  3. 它的架构其实也是客户端/服务端模式,有解析器、优化器、执行器这套标准流程。
  4. 咱们实操了安装前的环境检查。包括看系统版本、看内存磁盘、关防火墙、关SELinux。这些都是装数据库的前置条件,不弄好后面全是坑。

其实学数据库,最重要的就是动手。你光看文档是学不会的。今天讲的那些Linux命令,建议你自己在机器上多敲几遍,看看输出是什么。

六、 下一篇预告

环境检查完了,接下来是不是就可以装了?还不行。KingbaseES不像有些软件,双击就能装。它需要做一系列的系统内核参数配置,比如调整最大文件句柄数、调整共享内存等等。如果不调这些参数,数据库装上了,一跑高并发业务就崩了。

那么,咱们第2篇文章:《【KingbaseES数据库教程】安装前必做:系统内核参数与资源限制深度调优》 ,就会手把手带你改sysctl.conf和limits.conf文件。把这些底层的地基打牢了,后面装数据库才能顺风顺水。咱们下篇见!

相关推荐
rm -rf * && haha.sh1 小时前
【Linux】Rocky 9.8 操作系统磁盘分区与MySQL数据目录迁移
linux·运维·mysql
Source.Liu1 小时前
【A11】近期实现架构:面向 EPC 工作流企业 QQ 化的第一阶段
windows·架构·rust
高山有多高1 小时前
【Linux笔记】Socket编程基础
linux
资深技术分享员2 小时前
Geejing WebBuilder 数据库连接配置与在线 SQL 工具,运维的左右手
运维·数据库·sql·低代码
高山有多高2 小时前
【Linux笔记】UpdSocket
linux·运维·笔记
皓月盈江2 小时前
Linux系统grep、sed 、awk介绍下,使用方法及区别?
linux·运维·服务器·sed·grep·awk
ao-weilai2 小时前
MySQL数据库:表操作
数据库·mysql·adb
宵时待雨2 小时前
MySQL数据库1:数据库基础
服务器·数据库·mysql
云栖梦泽2 小时前
Linux内存管理
linux·运维·服务器