Docker安装人大金仓KingbaseES 8.6.8.14 与GIS插件,以及DBeaver的连接教程
官方文档安装教程:https://help.kingbase.com.cn/v8/install-updata/install-docker/install-docker-1.html#p
下载安装包
注意:
- 镜像包版本与GIS插件版本要一致,我这里安装的是V008R006C008B0014,其他版本的插件包可能得找客服或者QQ群或者网上再找找。
- 授权文件建议下载企业版的,只有企业版和专业版支持扩展GIS,其他版本不支持,且所有版本默认都不带GIS的需要自己安装。
Docker镜像下载地址:KES-电科金仓官网
GIS插件包:链接: https://pan.baidu.com/s/1M5nGvdzV1wCbnYntQH2sOg 提取码: s999
授权文件下载:KES-电科金仓官网
安装步骤
1.加载镜像包
加载镜像包:docker load -i /data/upload_file/kdb_x86_64_V008R006C008B0014.tar
查看镜像是否存在:docker images|grep kingbase
创建挂载路径:mkdir /mnt/kingbase8
挂载路径授权:chmod -R 755 /mnt/kingbase8/
2.启动容器
注意:
- 支持mysql、pg、oracle三种兼容模式
- mysql模式不支持GIS安装,如果要使用GIS的建议使用pg模式
- pg模式需要指定 ENABLE_CI=no ,不然会因为大小写敏感问题而启动不了数据库
完整启动命令:
pg模式启动:docker run -tid --privileged -p 54321:54321 -v /mnt/kingbase8:/home/kingbase/userdata/ -e NEED_START=yes -e DB_USER=kingbase -e DB_PASSWORD=123456 -e DB_MODE=pg -e ENABLE_CI=no --name kingbase kingbase_v008r006c008b0014_single_x86:v1 /usr/sbin/init
启动选项可以查看官方文档:2. 安装详解 — KingbaseES产品手册
查看启动日志,如果没什么报错信息,看到“server started”,说明启动成功:
docker logs kingbase
3.授权
查找授权文件路径:find / -name license.dat
解压授权文件压缩包,将授权文件拷贝进去:
docker cp /data/upload_file/yxm/license_29296_0.dat kingbase:/home/kingbase/install/kingbase/etc/
进去容器里面,将自带的授权文件重命名,改成新上传的授权文件:
docker exec -it kingbase /bin/bash
cd /home/kingbase/install/kingbase/etc/
mv license.bat license.dat_init
mv license_29296_0.dat license.dat
exit
不确定授权后用不用重启,不放心的可以 docker restart kingbase
重启一下
4.验证安装成功与否
进入容器,用ksql连接数据库,查看当前版本,如果能正常连接并查看版本就说明安装成功了:
docker exec -it kingbase /bin/bash
ksql -Ukingbase -p54321
select version();
5.安装GIS插件
前面也说了,目前mysql模式不支持gis功能,所以如果需要gis,则安装的时候要使用pg或者oracle模式,pg模式下还需要设置ENABLE_CI=no,如果你不是照着我的教程操作的话,建议先检查一下,如查看数据库兼容模式:show database_mode;
题外话,在官方社区里看到下面内容,也许对有些人有帮助,贴一下:
金仓数据库KIngbaseES sqlserver 模式安装gis 扩展,安装扩展前需要执行 set default_sql_parser=pg;
如果是 3.4 版本的gis 还需要设置 set enable_sqlserver_datatype = off;
解压GIS插件包,将里面的lib、bin、share目录里的内容复制到docker容器的对应位置,注意是复制,不是覆盖:
docker cp /data/upload_file/license_29296_0.dat kingbase:/home/kingbase/install/kingbase/etc/
docker cp /data/upload_file/postgis-3.1.2/lib/. kingbase:/home/kingbase/install/kingbase/lib/
docker cp /data/upload_file/postgis-3.1.2/bin/. kingbase:/home/kingbase/install/kingbase/bin/
docker cp /data/upload_file/postgis-3.1.2/share/extension/. kingbase:/home/kingbase/install/kingbase/share/extension/
进入容器,连接数据库:ksql -Ukingbase -p54321
执行以下命令安装gis(好像可以不用全部执行,我是全部执行了的):
说明,gis安装只是安装到当前数据库,如果不是当前数据库使用gis要先创建并切换数据库,后面有提到
CREATE EXTENSION postgis;
CREATE EXTENSION postgis_raster;
CREATE EXTENSION postgis_sfcgal;
CREATE EXTENSION fuzzystrmatch;
CREATE EXTENSION postgis_tiger_geocoder;
CREATE EXTENSION postgis_topology;
CREATE EXTENSION address_standardizer;
CREATE EXTENSION address_standardizer_data_us;
6.验证GIS功能
这步可以参考官方文档关于GIS的部分:4. 数据管理和查询 — KingbaseES产品手册
-- 创建带地理位置数据的数据表
CREATE TABLE global_points (
id SERIAL PRIMARY KEY,
name VARCHAR(64),
location GEOGRAPHY(POINT,4326)
);
-- 创建索引
CREATE INDEX global_points_gix ON global_points USING GIST ( location );
-- 插入测试数据
INSERT INTO global_points (name, location) VALUES ('Town', ST_GeographyFromText('SRID=4326; POINT(-110 30)') );
INSERT INTO global_points (name, location) VALUES ('Forest', ST_GeographyFromText('SRID=4326;POINT(-109 29)') );
INSERT INTO global_points (name, location) VALUES ('London', ST_GeographyFromText('SRID=4326;POINT(0 49)') );
-- 查询测试,如查询距离指定的点1000公里以内的地点(location)的名称
SELECT name FROM global_points WHERE ST_DWithin(location, ST_GeographyFromText('SRID=4326;POINT(-110 29)'), 1000000);
DBeaver连接
参考文档:https://icode.best/i/026383377944225
大概就是,在dbeaver顶部工具栏找到 数据库-驱动管理器 ,点击“新建”按钮,填写以下内容:
com.kingbase8.Driver
jdbc:kingbase8://{host}[:{port}]/[{database}]
然后,点击上方选项卡“库”,添加驱动文件,驱动文件可以在官网下载,JDBC那个就是了,注意选择版本:KES-电科金仓官网
到这就完成了,之后正常创建连接即可。
创建数据库、用户并授权
-- 创建dapeng专用用户、数据库并授予相关权限
CREATE USER hello WITH PASSWORD 'zhisuan2018';
create database hellodb
WITH
OWNER = kingbase
ENCODING = 'UTF8'
LC_COLLATE = 'zh_CN.UTF-8'
LC_CTYPE = 'zh_CN.UTF-8'
TEMPLATE = template0;
GRANT CONNECT ON DATABASE hellodb TO hello;
-- 授予public模式中现有表的所有权限
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO hello;
-- 授予public模式中现有序列的所有权限
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO hello;
-- 授予public模式中现有函数的所有权限
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO hello;
-- 授予未来创建表的权限,需要连接到目标数据库执行
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT ALL PRIVILEGES ON TABLES TO hello;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT ALL PRIVILEGES ON SEQUENCES TO hello;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT ALL PRIVILEGES ON FUNCTIONS TO hello;