使用1Panel图形界面快速部署人大金仓数据库:零命令错误指南与证书管理、备份恢复sql文件等

在容器化部署数据库时,手动输入Docker命令不仅容易出错,还可能因权限和配置问题导致部署失败。人大金仓数据库作为国产数据库的代表,其容器化部署对许多开发者来说是一个挑战。本文将介绍如何通过 1Panel 图形化管理工具,无需记忆复杂命令,快速完成人大金仓数据库的容器化部署,同时规避常见权限和配置问题。


前置条件

  1. 所需文件 自行去人大金仓官网下载对应的文件,以下是我本地的

    • 人大金仓镜像文件:kdb_x86_64_V009R001C002B0014.tar
    • 授权文件:license_dev.zip
  2. 工具环境

    • 已安装 1Panel 管理面板

部署步骤详解

步骤1:导入镜像并准备目录

  1. 导入镜像至Docker
    将下载的镜像文件加载到本地Docker环境:

    docker load -i kdb_x86_64_V009R001C002B0014.tar  

    完成后,检查镜像是否存在:

    docker images | grep kingbase  
  2. 创建数据目录并配置权限
    在宿主机上创建挂载目录,并设置权限(以下两种方式二选一):

    • 临时测试权限(快速但安全性低):

      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创建容器

  1. 进入容器管理界面
    登录1Panel后台,依次点击左侧菜单:容器 > 创建容器
  2. 关键配置项说明

    • 镜像名称:输入镜像标签 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)。
  3. 启动命令(可选)
    若镜像依赖 systemd 初始化,需在 命令/参数 中填写:

    /usr/sbin/init  
  4. 一键部署
    点击 确认 完成容器创建,1Panel将自动拉取镜像并启动服务。

常见问题与解决方案

问题1:权限不足导致启动失败

  • 现象:容器日志提示 Permission denied
  • 修复方法

    1. 确认挂载目录 /mnt/kingbase 的权限与容器内用户UID匹配。
    2. 在环境变量中添加 PGID=1000PUID=1000(根据实际UID调整)。

问题2:数据库连接失败

  • 排查步骤

    1. 进入容器日志界面(1Panel > 容器 > kingbase > 日志),检查初始化是否完成。
    2. 验证端口是否开放:

      telnet 127.0.0.1 54321  

验证部署成功

  1. 容器状态检查
    在1Panel的容器列表中,确认 kingbase 状态为 运行中
  2. 目录挂载验证
    进入容器终端执行:

    docker exec -it kingbase /bin/bash  
    ls -l /home/kingbase/userdata  # 应显示宿主机文件  
  3. 数据库连接测试
    使用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:替换证书文件

  1. 操作宿主机目录
    将新的 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  
  2. 重启容器生效
    在1Panel界面中重启容器,或通过命令:

    docker restart kingbase  

数据库启停与管理

启动与停止数据库服务

  1. 进入容器终端
    通过1Panel界面进入容器终端(容器 > kingbase > 终端),或使用命令:

    docker exec -it kingbase /bin/bash  
  2. 操作数据库服务

    # 进入数据库安装目录  
    cd /home/kingbase/install/kingbase/bin  
    # 停止数据库  
    ./sys_ctl -D /home/kingbase/userdata/data/ stop  
    # 启动数据库  
    ./sys_ctl -D /home/kingbase/userdata/data/ start  

查看容器日志

通过1Panel界面或命令行实时监控容器日志:

  1. 1Panel操作

    • 进入 容器 > kingbase > 日志,查看实时运行日志。
  2. 命令行操作

    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进行还原恢复的,注意此区别。

标签: MySQL, Docker, 人大金仓

相关文章

KingbaseES V9 全自动静默安装指南与一键部署脚本

一、静默安装原理与优势KingbaseES的静默安装通过预置配置文件实现无人值守部署,特别适合批量环境与自动化运维场景。相比交互式安装,静默模式具有以下优势:通过配置文件统一管理安装参数支持自动...

在1Panel中解决Docker内PHP网络请求超时问题

在1Panel管理面板中,我们可能会遇到在使用Docker运行的PHP环境中发起网络请求时出现的超时问题。最近给博客写了一个远程请求插件,之前还是正常,这两天突然请求500错误了...问题分析当...

图片Base64编码

CSR生成

图片无损放大

图片占位符

Excel拆分文件