前言
金仓数据库管理系统KingbaseES V9是企业级大型通用融合数据库产品
面向全市场,具备三种兼容模式,最新发布版本为
V009R001C002B0014
面向细分市场,高度兼容MySQL,最新发布版本为
V009R003C011
面向细分市场,高度兼容SQLServer,最新发布版本为
V009R004C011
如果项目本身使用的Mysql想切换为KingbaseES版本选择:
V009R003
是比V009R001
的Mysql模式对Mysql的兼容性更好的。如果项目使用
V009R001
就没啥问题就没有必要换V009R003
,如果不兼容的地方太多则可以考虑V009R003
版本。更推荐使用
V009R001
,他是主分支使用的用户会多点。
下载地址
https://download.kingbase.com.cn/xzzx/index.htm
安装包
授权文件选择专业版
授权文件解压后把dat文件上传到/home/kingbase/
下
准备工作
查看系统语言
1 | echo $LANG |
修改系统语言
1 | export LANG=zh_CN.UTF-8 |
安装
创建用户
1 | useradd -m kingbase |
创建安装目录并授权
1 | #创建安装包目录和安装目录 |
挂载安装包
1 | mount KingbaseES_V009R001C001B0030_Lin64_install.iso /data/apps/KingbaseES |
安装
使用kingbase用户安装
1 | su - kingbase # 切换到安装用户 |
开始会解压安装资源,接下来是软件协议,一直下一步即可。
这点选择完全安装
这一步选择我们下载的授权文件即可
1 | /home/kingbase/license_41249_0.dat |
这里输入
1 | /data/db/Kingbase |
数据目录不变
端口号默认为54321
默认用户名是system
,这里改成root
,跟Mysql一致。
密码 输入自己的密码
编码设置为UTF-8
数据库模式设置为MySql
大小写敏感,这里为了兼容选择NO
注册服务
这个会注册服务并启动
1 | su - root |
测试
查找安装位置
1 | find / -name "ksql" |
软连接
1 | ln -s /data/db/Kingbase/Server/bin/ksql /usr/bin/ksql |
连接
人大金仓提供了 ksql
命令行客户端工具,可以使用它来连接本地数据库进行测试。
基本连接命令
1 | ksql -U 用户名 -d 数据库名 -h 主机地址 -p 端口号 |
- 用户名:数据库的用户名称,默认的超级用户是
system
。 - 数据库名:要连接的数据库名称,默认的数据库是
sys
。 - 主机地址:本地连接使用
127.0.0.1
或localhost
。 - 端口号:数据库监听的端口号,默认是
54321
。
1 | ksql -p 54321 -U root test |
操作
1 | 列出数据库: \l |
配置文件
配置文件路径
1 | cd /data/db/Kingbase/data |
kingbase.conf
与 kingbase.auto.conf
这两个参数文件的读取先后、优先级
- 对于kingbase.conf 与 kingbase.auto.conf文件,如果有相同条目,则以kingbase.auto.conf文件参数值为准(忽略 kingbase.conf 相同条目)。
- 读取先后顺序:数据库启动时先读取 kingbase.conf,再读取kingbase.auto.conf,如果二者相同条目,会忽略kingbase.conf文件的相同条目。
- 所有文件读取完成后,才apply参数,由于kingbase.conf参数读取在前,kingbase.auto.conf读取在后,对于有先后顺序要求的参数必须注意。
开启宽松模式
会话生效
1 | show sql_mode; |
全局生效
修改配置方式
修改kingbase.auto.conf
这个配置
1 | sql_mode = '' |
执行SQL方式
开启宽松模式
1 | -- 修改全局的 sql_mode 配置,去掉 ONLY_FULL_GROUP_BY 并设置 ANSI_QUOTES |
默认值
1 | ALTER SYSTEM SET sql_mode = 'ONLY_FULL_GROUP_BY,ANSI_QUOTES'; |
关键字
1 | -- 修改全局的 exclude_reserved_words 配置 |
修改连接数
1 | show max_connections; |
注意
设置连接数不生效,也可能是授权的问题,比如开发版的授权最大就是10个连接数。
各个版本对比:
重启
1 | service kingbased stop |
端口开放
数据库端口54321
数据库迁移工具端口54523
授权到期
重新下载授权
找到安装的位置这里是/data/db/Kingbase
替换其中的license.dat
客户端
https://www.sqlynx.com/zh-cn/download/
数据库迁移工具
启动WEB服务
1 | cd /data/db/Kingbase/ClientTools/guitools/KDts/KDTS-WEB/bin |
启动
1 | ./startup.sh |
可以看到
默认账号密码都是kingbase
停止
1 | ./shutdown.sh |
更换Mysql兼容版
卸载旧版
停止服务
1 | service kingbased stop |
以kingbase
用户登录系统后,进入${安装目录}/Uninstall
目录,执行如下命令,启动卸载程序
1 | cd /data/db/Kingbase/Uninstall |
解除挂载
1 | umount /data/apps/KingbaseES |
删除安装目录
1 | rm -rf /data/apps/KingbaseES |
删除服务
1 | rm -f /etc/systemd/system/kingbase.service |
安装新版
下载
1 | wget "https://kingbase.oss-cn-beijing.aliyuncs.com/MySQL -上架/mysql V009R003C011B0003/KingbaseES_V009R003C011B0003_Lin64_install.iso" |
创建用户
1 | useradd -m kingbase |
创建安装目录并授权
1 | #创建安装包目录和安装目录 |
挂载安装包
1 | mount KingbaseES_V009R003C011B0003_Lin64_install.iso /data/apps/KingbaseES |
使用kingbase用户安装
1 | su - kingbase # 切换到安装用户 |
如果遇到
1 | /tmp does not have enough disk space! |
授权文件要重新下载并放在/home/kingbase/
下
1 | /home/kingbase/license_MySQL试用授权.dat |
数据库迁移工具
启动WEB服务
1 | cd /data/db/Kingbase/ClientTools/guitools/KDts/KDTS-WEB/bin |
启动
1 | ./startup.sh |
可以看到
默认账号密码是
- kingbase
- Kb_DI@2019
停止
1 | ./shutdown.sh |
用户/角色管理
人大金仓中用户和角色其实是一样的,只不过用户就是拥有登录权限的角色。
角色可以没有登录权限但是可以除登录权限以外的权限赋予给用户。
查看角色/用户
查看角色
1 | SELECT rolname,rolcanlogin,rolsuper,rolconnlimit FROM pg_roles; |
rolname
:角色名称。rolsuper
:是否为超级用户,t
表示是,f
表示否。rolinherit
:是否继承父角色的权限,t
表示是,f
表示否。rolcreaterole
:是否可以创建新角色,t
表示是,f
表示否。rolcreatedb
:是否可以创建新数据库,t
表示是,f
表示否。rolcanlogin
:是否可以登录数据库,t
表示是,f
表示否。rolreplication
:是否具有复制权限,t
表示是,f
表示否。rolconnlimit
:允许的最大连接数,-1
表示无限制。rolpassword
:角色的密码(通常以加密形式存储)。rolvaliduntil
:角色密码的有效截止日期。
查看用户
在人大金仓数据库(KingbaseES)中,用户本质上也是一种特殊的角色(具有登录权限的角色)。
1 | SELECT rolname,rolcanlogin,rolsuper,rolcreaterole,rolcreatedb,rolconnlimit FROM pg_roles WHERE rolcanlogin = 't'; |
创建角色
创建角色
1 | CREATE ROLE role1; |
创建可登录的角色
1 | CREATE ROLE role2 WITH LOGIN PASSWORD '123456'; |
创建特定权限的角色
1 | CREATE ROLE role3 WITH LOGIN PASSWORD '123456' CREATEDB CREATEROLE; |
创建超级用户角色
1 | CREATE ROLE role4 WITH LOGIN PASSWORD '123456' SUPERUSER; |
创建特定权限不登录的角色
1 | CREATE ROLE role5 CREATEDB CREATEROLE SUPERUSER; |
创建新用户
创建用户
1 | -- 创建一个名为 new_user 的用户 |
若要将 test_db
数据库的所有权限赋予用户 psvmc
,则执行以下命令:
1 | # 连接权限 |
创建超级用户
1 | CREATE USER zj SUPERUSER PASSWORD '123456'; |
用户授予角色
1 | GRANT role5 TO zj; |
删除用户/角色
因为是同一个表存储的,所以用下面的任一个都能删除用户和角色。
1 | DROP ROLE role1; |
修改密码
连接
1 | ksql -U system test -h 127.0.0.1 -p 54321 |
修改密码
1 | ALTER USER system WITH PASSWORD 'new_password'; |
数据库操作
连接数据库
1 | ksql -U system test -h 127.0.0.1 -p 54321 |
创建数据库时,主要是定义数据库的基本属性,如数据库名称、字符集、排序规则等,并不会直接指定模式。
模式是数据库内部用于组织对象的逻辑结构,在创建数据库时,会默认创建一个 public
模式。
1 | CREATE DATABASE abi WITH ENCODING = 'UTF8'; |
查看库
1 | \l |
选择库
1 | \c abi |
查看表
1 | # 查看所有的表 |
删除库
1 | DROP DATABASE db01; |
当你创建表时,可以明确指定该表要创建在哪个模式下。
1 | -- 在 custom_schema 模式下创建用户表 |
schema_name
:表示要将表创建到的目标模式名称。table_name
:是要创建的表的名称。
如果不指定模式,默认会将表创建在 public
模式下。
1 | CREATE TABLE t_user ( |
删除表
1 | DO $$ |
本地导出导入
添加软链
1 | ln -s /data/db/Kingbase/KESRealPro/V009R003C011/Server/bin/sys_dump /usr/bin/sys_dump |
SQL导出导入
导出SQL
1 | sys_dump -U root -d xhkjedu_school_test -F p -f /root/xhkjedu_school_test.sql |
导入 SQL
连接
1 | ksql -U root test |
创建数据库
1 | CREATE DATABASE xhkjedu_school_2 ENCODING 'UTF8' TEMPLATE template0; |
退出 ksql
创建数据库完成后,使用 \l
命令查看数据库列表,可使用 \q
命令退出 ksql
交互界面。
导入
如果之前使用 sys_dump
导出的是 SQL 脚本,可以使用 psql
工具将其导入到目标数据库中。
1 | ksql -U root -d xhkjedu_school_2 -f /root/xhkjedu_school_test.sql |
-U username
:指定数据库的用户名。-d dbname
:指定要导入数据的数据库名称。-f /path/to/output.sql
:指定要导入的 SQL 脚本文件的路径。
压缩与解压
我这使用归档方式导入总是失败,而SQL方式是没问题的。
所以可以采用SQL+压缩的方式,也能节省一半的空间。
压缩
1 | tar -czvf xhkjedu_school.sql.tar.gz xhkjedu_school.sql |
解压
1 | tar -xzvf xhkjedu_school.sql.tar.gz |
归档导出导入
归档方式使用自定义格式会比SQL模式小50%左右,使用tar格式大小和SQL相当。
但是
我这使用归档方式导入总是失败,而SQL方式是没问题的。
导出归档
人大金仓的sys_dump
支持多种归档格式,主要有自定义格式(-F c
)和tar
格式(-F t
)。
自定义格式(-F c
)
1 | sys_dump -U root -d xhkjedu_school_test -F c -f /root/xhkjedu_school_test.dump |
tar
格式(-F t
)
1 | sys_dump -U root -d xhkjedu_school_test -F t -f /root/xhkjedu_school_test.tar |
导入归档文件
连接
1 | ksql -U root test |
创建数据库
1 | CREATE DATABASE xhkjedu_school_2 ENCODING 'UTF8' TEMPLATE template0; |
退出 ksql
创建数据库完成后,使用 \l
命令查看数据库列表,可使用 \q
命令退出 ksql
交互界面。
导入
自定义格式
1 | sys_restore -U root -d xhkjedu_school_2 -F c /root/xhkjedu_school_test.dump |
参数解释
-U root
:指定以root
用户身份连接到人大金仓数据库。通常需要确保该用户有足够的权限执行恢复操作。-d xhkjedu_school_2
:指定恢复数据的目标数据库为xhkjedu_school_2
。在执行恢复操作前,这个数据库应该已经存在。-F c
:指定恢复的归档文件为自定义格式(custom format)。自定义格式是sys_dump
导出的一种二进制格式,允许在恢复时进行更灵活的操作,比如可以选择只恢复特定的表或模式。--no-tablespaces
:该参数表示在恢复过程中不包含表空间信息。使用此参数后,恢复的数据会被放置在数据库的默认表空间中。-c
:即--clean
,在恢复数据之前,先删除目标数据库中已存在的与归档文件中同名的数据库对象(如表、索引、视图等)。这样可以确保恢复的数据是全新的,避免与现有数据冲突。--if-exists
:通常和-c
一起使用,它的作用是在删除数据库对象时,如果对象不存在,不会报错,而是继续执行后续操作。-O
:即--no-owner
,在恢复过程中,不尝试将数据库对象的所有权设置为归档文件中记录的原始所有者。恢复后的对象所有权将属于执行恢复操作的用户。-x
:即--no-privileges
,不恢复权限信息。这意味着恢复后的数据库对象的权限将由执行恢复操作的用户根据需要重新设置。-j 1
:-j
即--jobs
,用于指定并行恢复的作业数量。这里设置为1
,表示使用单线程进行恢复操作。如果将其设置为大于1
的数值,例如-j 4
,则会使用 4 个线程并行恢复,以提高恢复速度,但需要注意数据库服务器的硬件资源是否能够支持。-v
:即--verbose
,启用详细模式。在恢复过程中,会输出详细的执行信息,方便用户跟踪恢复进度和排查可能出现的问题。/root/xhkjedu_school_test.dump
:指定要恢复的归档文件的路径。确保该文件存在且具有可读权限。
tar格式
1 | sys_restore -U root -d xhkjedu_school_2 -F t /root/xhkjedu_school_test.tar |
日志
日志文件所在路径data/sys_log