站起来活动活动吧~

编程开发

在苹果 MacOS 上基于 Docker 容器运行人大金仓(Kingbase)V8 R3 数据库的教程

2021年08月02日 20:52:51 · 本文共 1,570 字阅读时间约 5分钟 · 17,589 次浏览
在苹果 MacOS 上基于 Docker 容器运行人大金仓(Kingbase)V8 R3 数据库的教程

尊贵的苹果开发者,在国产化适配时是否很烦恼国产数据库没有提供 MacOS 运行环境下的安装文件?本文将带你在 MacOS 上基于 Docker 容器来运行国产化数据库:人大金仓数据库(Kingbase),其他国产数据库也是可以这样封装的,只不过我暂时没有需要就没有封装。

环境准备

首先,你的 MacOS 上需要安装 Docker,作为开发者的你应该装好了吧,Docker 的安装不是本文的重点,所以就不在此赘述了,默认已经安装好Docker。

然后,在你的 MacOS 上新建一个文件夹,作为数据库的数据目录挂载,要不然 Docker 容器中无法保存我们的数据,我这里新建到了 /opt/kingbase/data,然后要给 Docker 访问这个目录的权限,我直接把 /opt 权限都给 Docker 了,设置的路径是:Preferences -> Resources -> File Sharing:

Docker 访问目录权限设置

然后是准备一个 license.dat 文件,这个在官网就可以下载开发版的授权文件,我的 Git 仓库里也有,开发版的授权文件可以解锁所有功能,但是限制连接数10个,开发够用了,注意设置自己的数据库连接池最大连接数就行。

代码仓库

Github:https://github.com/renfei/kingbase-es-v8-r3-docker.git

码云:https://gitee.com/rnf/kingbase-es-v8-r3-docker.git

Gitlab:https://gitlab.com/renfei/kingbase-es-v8-r3-docker.git

构建Docker镜像

打开命令行,cd 到你准备下载的目录下,然后克隆、cd 进目录、开始构建Docker镜像:

git clone https://github.com/renfei/kingbase-es-v8-r3-docker.git
cd kingbase-es-v8-r3-docker
docker build -t kingbase:v8r3 .

如果是国内用户,可以使用我的码云仓库地址:https://gitee.com/rnf/kingbase-es-v8-r3-docker.git,注意最后一步构建Docker镜像,最后有个“点”不要忘记。

人大金仓Kingbase数据库Docker镜像

启动运行容器

等待构建完成,使用构建的镜像启动运行容器:

docker run -d --name kingbase -p 54321:54321 -e SYSTEM_PWD=SYSTEM -v /opt/kingbase/data:/opt/kingbase/data -v /opt/kingbase/license.dat:/opt/kingbase/Server/bin/license.dat kingbase:v8r3

这里说明一下参数:

  • --name: 容器名称

  • -p: 端口映射

  • -e: 默认用户SYSTEM,通过环境变量SYSTEM_PWD指定初始化数据库时的默认用户密码

  • -v: 挂载宿主机的一个目录,这里挂载了数据目录和license文件

到这里,已经在 MacOS 上基于 Docker 运行起来了 人大金仓 Kingbase 数据库,可以使用客户端去连接了,端口是 54321。

人大金仓Kingbase数据库Docker容器

常见问题 Q&A

FATAL: lock file kingbase.pid already exists

提示:FATAL: lock file kingbase.pid already exists。是因为 docker 容器被关闭了数据库还没来得及停机,我们去数据目录下把 kingbase.pid 文件删除掉即可,数据目录就是上面映射本机目录的,我的教程里是在 /opt/kingbase/data/。

kingbase: superuser_reserved_connections must be less than max_connections

日志提示:kingbase: superuser_reserved_connections must be less than max_connections,并且无法连接数据库。我们还是先去数据目录下找到 kingbase.conf 配置文件,里面有两个:

#superuser_reserved_connections = 10 # (change requires restart)

#super_manager_reserved_connections = 5 # (change requires restart)

我们把前面第一个井号去掉,然后把数字都改成 1 再启动。

商业用途请联系作者获得授权。
版权声明:本文为博主「任霏」原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.renfei.net/posts/1003506
评论与留言

以下内容均由网友提交发布,版权与真实性无法查证,请自行辨别。

用 -m pg 模式启动时,用 postgres 的客户端来连接,连接失败,看日志,显示 ksql: error: could not connect to server: FATAL: role "system" does not exist。 用同样的用户名和密码, oracle 模式启动是可以正常连接上的,应该怎么处理呢?

然后把数字都改成 1 再启动。 如何重新启动?

我的docker部署完成了,我查看到数据库已经运行了,但是我的datagrip怎么测试都无法连接。我怎么从docker进入数据库,然后在docker里面执行sql语句?

renfei 站点官方 回复

先通过 docker exec -it 容器名/id /bin/bash 进入容器,然后在容器中使用 ksql 客户端进行连接数据库:/opt/kingbase/Server/bin/ksql -U system test

ksql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.KINGBASE.54321"

ksql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.KINGBASE.54321"?

renfei 站点官方 回复

进入容器查看一下日志,是不是启动失败了,日志文件在:/opt/kingbase/logfile

WARNING: max_connections should be less than orequal than 10 (restricted by license) HINT: the value of max_connect is set 10 WARNING: max_connections should be less than orequal than 10 (restricted by license) HINT: the value of max_connect is set 10 kingbase: superuser_reserved_connections must be less than max_connections 我按照文档修改了以后,不知道如何重启。

你好,我想问一下如果是分析型的数据库要怎么制作docker镜像呢 是修改V008R003C002B0320版本号吗

您好: 可以提供下对应版本的jdbc链接驱动包吗,谢谢 使用的人大金仓版本号:V008R003C002B0320 ps:The connection cannot be established because database version does not match driver version

V008R003C002B0320 这个对应的jdbc链接驱动你在哪里找到的?我也遇到了这个问题。

在您的Git上找到了

您好,请教下kingbase 8v 有可以查看历史执行sql的表吗? 类似 Oracle的 select * from v$sql,谢谢

任霏 站点官方 回复

没用过,但根据手册上的 log_statement 帮助内容,可以将SQL打印到日志里:https://help.kingbase.com.cn/stage-api/profile/document/kes/v8r3/html/admin/reference/ref-config-parameter/runtime-config-logging.html

我的命令如下: docker run -di --restart=always --privileged=true --name=kingbasev8r3 --user kingbase -p 54321:54321 -e SYSTEM_PWD=SYSTEM -v ${HOME}/docker/kingbase/data/:/opt/kingbase/data -v ${HOME}/docker/kingbase/license.dat:/opt/kingbase/Server/bin/license.dat kingbase:v8r3

执行run命令后查看日志,发现启动报错: The comparision of strings is case-insensitive. fixing permissions on existing directory /opt/kingbase/data ... initdb failed initdb: could not change permissions of directory "/opt/kingbase/data": Operation not permitted chown: changing ownership of '/opt/kingbase/data': Operation not permitted The files belonging to this database system will be owned by user "kingbase". This user must also own the server process. The database cluster will be initialized with locale "C". The default text search configuration will be set to "english". Data page checksums are disabled. 似乎是权限的问题,添加了 --privileged=true 也是同样报错,我的服务器是腾讯云centos7.6docker版,不知道博主有没有解决方法

我也遇到了这个问题,已经解决了,在此分享一下 1、宿主机也要创建kingbase的用户和用户组,并且要查看一下用户和用户组的ID(这个很重要) 2、把data目录的用户和用户组设置为kingbase 3、先不要把data路径挂载到宿主机上,这时就可以正常启动,启动后进入容器,查看一下容器内的kingbase的用户和用户组ID是多少,和第一步的ID是否一致,如果ID一致,那正常挂载目录就行;如果ID不一致,那就需要修改Dockerfile文件,在构建镜像时,修改容器内的用户和用户组ID,必须和宿主机的保持一致。然后重新构建镜像,就可以正常挂载宿主机目录了 4、其实直接修改宿主机的用户和用户组ID也是可以的,但是容器内的ID一般是1000,但是宿主机的这个ID很可能已经被占用了,无法修改,就只能修改容器内的ID

任霏 站点官方 回复

看报错信息是因为映射的/opt/kingbase/data没有权限,docker内部运行是使用 kingbase 用户运行的,所以解决方案就是把/opt/kingbase/data的权限给 kingbase ,在宿主机上执行 chown kingbase:kingbase /opt/kingbase/data,这样把文件夹的权限给 kingbase和它的组

您好,请问mac有没有连接KingbaseES的图形化工具呢?

任霏 站点官方 回复

您好,其实官方的客户端也是通过 JDBC 操作的,所以基本任意数据库管理工具都可以连接,例如:DBeaver、DataGrip、IntelliJ IDEA 里的数据库工具,只要添加数据源类型,选择驱动包,就可以连接了

回复:您好,其实官方的客户端也是通过 JDBC 操作的,所以基本任意数据库管理工具都可以连接,例如:DBeaver、DataGrip、IntelliJ IDEA 里的数据库工具,只要添加数据源类型,选择驱动包,就可以连接了 ---------------------------- 可用,感谢!

你好,我这边想问下,镜像服务启动了,该连接哪个数据库呢?

renfei 站点官方 回复

您好,可以连接默认的TEST库,这个应该是肯定有的

/lib64/ld-linux-x86-64.so.2: No such file or directory 报了这个错误,怎么解决呢

docker run 那一长串后,出来一个字符串,然后去 docker containers 下面看 显示 exited(1);logs 下就一行错误 initdb failed

感谢🙏,第一个问题是空格的问题应该,我逐字敲完后可以构建了.第二个问题是我docker环境的问题,docker更新为最新版后需要重置配置文件.现已经正常使用,再次感谢您的分享和您的细心解答,期待下次相遇😄 还有一个问题可以请教下吗?就是我在容器里建文件夹没有权限,su root后密码不知道是多少,sudo mkdir xxx 提示我,没有sudo命令,请问有好的解决方法吗?谢谢解答

-v 后面可以指定文件吗 我的也是报错,还有。我执行了这个:@localhost kingbase-es-v8-r3-docker % docker run -d --name kingbase -p 54321:54321 -e SYSTEM_PWD=SYSTEM -v /opt/kingbase/data:/opt/kingbase/data -v /opt/kingbase:/opt/kingbase/Server/bin kingbase:v8r3 docker: 'run -d --name kingbase -p 54321:54321 -e SYSTEM_PWD=SYSTEM -v /opt/kingbase/data:/opt/kingbase/data -v /opt/kingbase:/opt/kingbase/Server/bin kingbase:v8r3' is not a docker command. See 'docker --help' 麻烦帮忙看下,是不是我写的命令有问题,还是版本问题,谢谢啦

任霏 站点官方 回复

-v 是挂载目录用的。报错是 is not a docker command,说明你使用的命令是错的,这不是 docker 的命令,前面不应该加 @localhost kingbase-es-v8-r3-docker %

请问我build的时候一直报错,是资源没了吗?failed to solve with frontend dockerfile.v0: failed to create LLB definition: failed to do request: Head "https://reg-mirror.qiniu.com/v2/library/centos/manifests/7?ns=docker.io": Moved Permanently

任霏 站点官方 回复

在构建镜像的时候会拉取centos的镜像作为基础,根据报错信息 failed to do request 来看,应该是您修改了仓库地址为七牛,这个仓库地址已经被移动了 :Moved Permanently,所以换个docker仓库镜像地址应该就可以

按照路径上的来操作的,但是启动时一直报:zsh: no such file or directory: docker run -d --name kingbase -p 54321:54321 -e SYSTEM_PWD=SYSTEM -v /Volumes/installation/opt/kingbase/data:/opt/kingbase/data -v /Volumes/installation/opt/kingbase/bin/license.dat:/opt/kingbase/Server/bin/license.dat kingbase:v8r3 错误

任霏 站点官方 回复

您好,经我测试,没有发现 no such file or directory 的报错,本地路径是否正确呢?另外复制本文时空格可能变为,导致命令报错,也需要检查一下空格。

微信搜一搜:任霏博客