使用1Panel图形界面快速部署人大金仓数据库:零命令错误指南与证书管理、备份恢复sql文件等
在容器化部署数据库时,手动输入Docker命令不仅容易出错,还可能因权限和配置问题导致部署失败。人大金仓数据库作为国产数据库的代表,其容器化部署对许多开发者来说是一个挑战。本文将介绍如何通过 1Panel 图形化管理工具,无需记忆复杂命令,快速完成人大金仓数据库的容器化部署,同时规避常见权限和配置问题。
前置条件
所需文件 自行去人大金仓官网下载对应的文件,以下是我本地的
- 人大金仓镜像文件:
kdb_x86_64_V009R001C002B0014.tar
- 授权文件:
license_dev.zip
- 人大金仓镜像文件:
工具环境
- 已安装 1Panel 管理面板
部署步骤详解
步骤1:导入镜像并准备目录
导入镜像至Docker
将下载的镜像文件加载到本地Docker环境:docker load -i kdb_x86_64_V009R001C002B0014.tar
完成后,检查镜像是否存在:
docker images | grep kingbase
创建数据目录并配置权限
在宿主机上创建挂载目录,并设置权限(以下两种方式二选一):临时测试权限(快速但安全性低):
sudo mkdir -p /mnt/kingbase sudo chmod -R 777 /mnt/kingbase
精准权限配置(需确认容器用户UID):
sudo mkdir -p /mnt/kingbase sudo chown -R 1000:1000 /mnt/kingbase # 假设容器内用户UID为1000
步骤2:通过1Panel创建容器
- 进入容器管理界面
登录1Panel后台,依次点击左侧菜单:容器 > 创建容器。 关键配置项说明
- 镜像名称:输入镜像标签
kingbase_v009r001c002b0014_single_x86:v1
。 - 容器名称:自定义(如
kingbase
)。 - 网络模式:默认
bridge
,若需外部访问需配置端口映射。 - 端口映射:容器端口
54321
映射到宿主机同端口。 环境变量:
NEED_START=yes
:启用数据库初始化。DB_USER=root
:设置管理员账号。DB_PASSWORD=123456
:建议生产环境修改为复杂密码。DB_MODE=mysql
:兼容MySQL模式。
存储卷挂载:
- 宿主机路径:
/mnt/kingbase
- 容器路径:
/home/kingbase/userdata
- 宿主机路径:
- 特权模式:务必勾选(对应
--privileged
)。
- 镜像名称:输入镜像标签
启动命令(可选)
若镜像依赖systemd
初始化,需在 命令/参数 中填写:/usr/sbin/init
- 一键部署
点击 确认 完成容器创建,1Panel将自动拉取镜像并启动服务。
常见问题与解决方案
问题1:权限不足导致启动失败
- 现象:容器日志提示
Permission denied
。 修复方法:
- 确认挂载目录
/mnt/kingbase
的权限与容器内用户UID匹配。 - 在环境变量中添加
PGID=1000
和PUID=1000
(根据实际UID调整)。
- 确认挂载目录
问题2:数据库连接失败
排查步骤:
- 进入容器日志界面(1Panel > 容器 > kingbase > 日志),检查初始化是否完成。
验证端口是否开放:
telnet 127.0.0.1 54321
验证部署成功
- 容器状态检查
在1Panel的容器列表中,确认kingbase
状态为 运行中。 目录挂载验证
进入容器终端执行:docker exec -it kingbase /bin/bash ls -l /home/kingbase/userdata # 应显示宿主机文件
数据库连接测试
使用MySQL客户端连接:mysql -uroot -p123456 -h127.0.0.1 -P54321
若成功进入SQL命令行,则部署完成!
进阶方案:Docker Compose部署
若需版本控制或批量部署,可使用以下 docker-compose.yml
:
version: '3'
services:
kingbase:
image: kingbase_v009r001c002b0014_single_x86:v1
container_name: kingbase
privileged: true
ports:
- "54321:54321"
volumes:
- "/mnt/kingbase:/home/kingbase/userdata"
environment:
- NEED_START=yes
- DB_USER=root
- DB_PASSWORD=123456
- DB_MODE=mysql
command: /usr/sbin/init
在1Panel的 Compose 功能中导入该文件即可一键部署。
证书持久化与更新
人大金仓容器启动后,会自动将 license.dat
文件持久化到挂载目录,并通过软链接动态绑定。以下是替换证书的操作流程:
步骤1:确认证书挂载路径
- 宿主机路径:
/mnt/kingbase/etc
(对应容器内路径/home/kingbase/userdata/etc
)。 证书软链接关系:
# 容器内查看软链接 ls -l /home/kingbase/install/kingbase/bin/license.dat # 输出示例: # lrwxrwxrwx 1 kingbase kingbase 47 Oct 11 09:01 # /home/kingbase/install/kingbase/bin/license.dat -> /home/kingbase/userdata/etc/license.dat
步骤2:替换证书文件
操作宿主机目录:
将新的license.dat
文件覆盖到宿主机的持久化目录:# 替换证书 sudo cp /path/to/new_license.dat /mnt/kingbase/etc/license.dat # 修改权限(必须!否则容器内用户无法读取) sudo chown 1000:1000 /mnt/kingbase/etc/license.dat # 用户UID需与容器内一致(默认1000) sudo chmod 755 /mnt/kingbase/etc/license.dat
重启容器生效:
在1Panel界面中重启容器,或通过命令:docker restart kingbase
数据库启停与管理
启动与停止数据库服务
进入容器终端:
通过1Panel界面进入容器终端(容器 > kingbase > 终端),或使用命令:docker exec -it kingbase /bin/bash
操作数据库服务:
# 进入数据库安装目录 cd /home/kingbase/install/kingbase/bin # 停止数据库 ./sys_ctl -D /home/kingbase/userdata/data/ stop # 启动数据库 ./sys_ctl -D /home/kingbase/userdata/data/ start
查看容器日志
通过1Panel界面或命令行实时监控容器日志:
1Panel操作:
- 进入 容器 > kingbase > 日志,查看实时运行日志。
命令行操作:
docker logs -f kingbase
完整操作流程图
graph TD
A[导入镜像] --> B[创建挂载目录]
B --> C[1Panel配置容器]
C --> D[启动容器]
D --> E{是否需更新证书?}
E -->|是| F[替换license.dat并设置权限]
E -->|否| G[连接数据库验证]
F --> H[重启容器生效]
H --> G
sys_dump备份数据:
sys_dump
是用于备份 KingbaseES 数据库的工具。根据官网介绍,即使数据库目前正在并发使用,它也能创建一致的备份。sys_dump
不阻塞其他用户访问数据库(读取或写入)。
使用sys_dump时,需要进入到数据库安装路径下的Server/bin
目录下执行
备份为sql脚本文件
./sys_dump -h 127.0.0.1 -p 54321 -d db_demo -U memory -f /opt/backup/db_demo.sql
备份为dump归档文件
./sys_dump -h 127.0.0.1 -p 54321 -d db_demo -U memory -Fc -f /opt/backup/db_demo.dump
备份dump文件时 最好加上 -Fc 参数,否则在使用sys_restore命令进行还原时会出现如下提示:
# 输入文件显示为文本格式转储。请使用ksql
sys_restore: error: input file appears to be a text format dump. Please use ksql.
-Fc
:-F即format,也即选择输出的格式,有多种值,其中两种如下,其他的不再介绍,可查看下方官网文档。
- p:plain,输出一个纯文本形式的 SQL 脚本文件(默认值)。
- c:custom,输出一个适合于作为 sys_restore 输入的自定义格式归档。
恢复数据
人大金仓中,sys_restore 命令和 ksql 命令都可以进行数据还原
sys_restore命令
sys_restore
可以从由sys_dump
命令创建的dump归档文件还原数据库数据。该命令需要在安装路径下的Server/bin
目录下执行
./sys_restore -h 127.0.0.1 -p 54321 -d db_demo -U memory /opt/backup/db_demo.dump >> /opt/backup/restore.log 2>&1
也可以还原sql文件
./sys_restore -h 127.0.0.1 -p 54321 -d db_demo -U memory /opt/backup/db_demo.sql >> /opt/backup/restore.log 2>&1
Ksql还原
Ksql 是 KingbaseES 数据库的主要命令行界面
使用ksql还原sql脚本文件
./ksql -h "127.0.0.1" -p 54321 -d db_demo -U memory -f /opt/backup/db_demo.sql >> /opt/backup/ksql_restore.log 2>&1
使用ksql还原dump文件
./ksql -h "127.0.0.1" -p 54321 -d db_demo -U memory -f /opt/backup/db_demo.dump >> /opt/backup/ksql_restore.log 2>&1
在使用ksql进行还原时请注意,如果你还原的文件是 通过sys_dump
命令 并且加了-F
(format --format=format) 参数的,那么就不能
通过ksql进行还原,而是要通过sys_restore
命令进行还原,否则会报如下信息:
# 输入是Kingbase自定义格式转储。
The input is a Kingbase custom-format dump.
# 使用sys_restore命令行客户端将此转储还原到数据库。
Use the sys_restore command-currLine client to restore this dump to a database.
通过 sys_dump 命令备份时不加 -F
(format --format=format) 参数,不管是SQL脚本文件还是dump归档文件都是可以通过ksql进行还原恢复的,注意此区别。
版权声明:本文为原创文章,版权归 全栈开发技术博客 所有。
本文链接:https://www.lvtao.net/database/deploy-kingbasees-with-1panel-gui-license-management.html
转载时须注明出处及本声明