Docker容器中Kingbase数据库授权到期更换解决方案
当Docker容器内的Kingbase(人大金仓)数据库授权文件(license.dat)到期后,会直接导致数据库无法启动、核心功能受限,常见报错为 致命错误,license file expired。本文结合官方镜像特性与实操经验,整理了一套完整、可直接落地的授权更换与数据库恢复方案,覆盖"数据库已停止""数据库仍运行"两种核心场景,同时解决权限配置、启动异常等高频问题。
一、前置准备(必做)
1. 获取匹配的新授权文件
-
联系人大金仓官方客服,或通过官网下载与当前Kingbase数据库版本完全匹配 的新授权文件(
license.dat),版本不匹配会直接导致授权失效。 -
将新
license.dat文件放置在宿主机易访问的目录(示例:/opt/kingbase/new_license/),便于后续复制到容器内。
2. 确认容器与数据库核心信息
在操作前,先通过宿主机命令确认以下信息,避免路径或容器标识错误:
-
容器ID/名称:执行
docker ps查看,示例:kingbase_container或f88d7a92593c。 -
数据库数据目录(官方镜像默认):
/home/kingbase/userdata/data/ -
授权文件默认路径(官方镜像):
数据库管理
-
持久化路径(推荐操作路径):
/home/kingbase/userdata/etc/license.dat -
软链接路径:
/home/kingbase/install/kingbase/bin/license.dat(指向持久化路径)
-
二、核心方案(分场景操作)
场景一:数据库已停止(授权过期导致,推荐方案,最稳妥)
适用于授权已过期、数据库无法正常启动,需更换授权后重启数据库的场景。
步骤1:以root最高权限进入容器
Kingbase数据库的文件权限需严格匹配kingbase用户,需以root权限进入容器操作(避免权限不足):
# 替换【容器ID/名称】为你的实际容器标识
docker exec -it -u root 【容器ID/名称】 /bin/bash
步骤2:备份旧授权文件(必做,便于回滚)
进入授权文件目录,对旧授权文件进行备份
# 进入授权文件持久化目录(官方默认路径)
cd /home/kingbase/userdata/etc/
# 备份旧license.dat,添加时间戳(格式:年-月-日_时-分-秒)
mv license.dat license.dat.bak_$(date +%Y%m%d_%H%M%S)
步骤3:从宿主机复制新授权文件到容器
切换到宿主机执行以下命令,将新授权文件复制到容器内的授权目录(无需进入容器)
# 格式:docker cp 宿主机新license路径 容器ID/名称:容器内授权目录
# 替换【宿主机新license路径】和【容器ID/名称】
docker cp /opt/kingbase/new_license/license.dat 【容器ID/名称】:/home/kingbase/userdata/etc/
回到容器内(步骤1的终端),修改新授权文件的属主和权限------Kingbase数据库仅识别kingbase用户所属的授权文件,权限错误会导致启动失败
# 确保当前在授权文件目录
cd /home/kingbase/userdata/etc/
# 1. 修改文件属主为kingbase用户和kingbase组(必须)
chown kingbase:kingbase license.dat
# 2. 设置文件权限为750(kingbase用户可读可执行,其他用户无权限)
chmod 750 license.dat
# 验证权限(可选,确认配置正确)
ls -l license.dat
# 正确输出示例:-rwxr-x--- 1 kingbase kingbase 1234 4月 1 10:00 license.dat
步骤5:启动数据库服务
切换到kingbase用户,进入数据库bin目录,启动数据库
# 切换到kingbase用户(避免root启动数据库导致权限异常)
su - kingbase
# 进入数据库bin目录(官方默认路径)
cd /home/kingbase/install/kingbase/bin/
# 启动数据库(指定数据目录,官方默认路径)
./sys_ctl -D /home/kingbase/userdata/data/ start
# 验证数据库启动状态(可选)
./sys_ctl -D /home/kingbase/userdata/data/ status