2021-08-02 20:52:51

在苹果 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://www.renfei.net/posts/1003506
评论与留言
以下内容均由网友提交发布,版权与真实性无法查证,请自行辨别。

本站有缓存策略,时间约2小时后能看到您的评论。本站使用自动审核机制,如果您的内容包含广告/谩骂/恐怖/暴力/涉政等不和谐内容将无法展示!

fjwpsyb 2022-03-25 11:34:53 - Guangzhou, Guangdong, China

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

回复
fjwpsyb 2022-03-25 11:46:21 - Guangzhou, Guangdong, China

在您的Git上找到了

回复
虚心请教 2022-03-21 11:04:19 - Quzhou, Zhejiang, China

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

回复
任霏 站点官方 2022-03-21 13:59:52 - Beijing, Beijing, China

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

回复
gokamisama 2022-03-09 23:35:07 - Chengdu, Sichuan, China

我的命令如下: 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

回复
gokamisama 2022-03-09 23:33:40 - Chengdu, Sichuan, China

执行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版,不知道博主有没有解决方法

回复
任霏 站点官方 2022-03-10 09:44:31 - Beijing, Beijing, China

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

回复
虚心求教 2022-03-08 16:06:07 - Quzhou, Zhejiang, China

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

回复
任霏 站点官方 2022-03-08 18:58:11 - Harbin, Heilongjiang, China

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

回复
虚心求教 2022-03-09 09:26:22 - Quzhou, Zhejiang, China

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

回复
Rookie 2021-10-25 02:00:35 - Hangzhou, Zhejiang, China

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

回复
renfei 站点官方 2021-10-28 22:12:41 - Beijing, Beijing, China

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

回复
songsong 2021-10-04 21:26:42 - Beijing, Beijing, China

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

回复
回旋踢 2021-09-27 11:49:04 - Beijing, Beijing, China

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

回复
虚心求教 2021-09-24 23:20:35 - Beijing, Beijing, China

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

回复
虚心求教 2021-09-24 11:55:00 - Beijing, Beijing, China

-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' 麻烦帮忙看下,是不是我写的命令有问题,还是版本问题,谢谢啦

回复
任霏 站点官方 2021-09-24 13:46:36 - Beijing, Beijing, China

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

回复
虚心求教 2021-09-24 10:14:18 - Beijing, Beijing, China

请问我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

回复
任霏 站点官方 2021-09-24 13:43:54 - Beijing, Beijing, China

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

回复
薄殇一宰 2021-08-27 14:23:13 - Dongguan, Guangdong, China

按照路径上的来操作的,但是启动时一直报: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 错误

回复
任霏 站点官方 2021-08-27 20:37:52 - Beijing, Beijing, China

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

回复

本站有缓存策略,时间约2小时后能看到您的评论。本站使用自动审核机制,如果您的内容包含广告/谩骂/恐怖/暴力/涉政等不和谐内容将无法展示!

关注任霏博客
扫码关注「任霏博客」微信订阅号
微博:任霏博客网
Twitter:@renfeii
Facebook:任霏