docker环境升级数据库

1、先部署数据库

bash 复制代码
1.#导入镜像
[root@node1 ~]# docker load -i kdb_x86_64_V009R001C002B0014.tar


2.#改标签
[root@node1 ~]# docker tag kingbase_v009r001c002b0014_single_x86:v1 kingbase:v1
[root@node1 ~]# docker images


3.#修改默认路径
#找到 Docker 实际的数据目录
[root@node1 ~]# docker info | grep -i "docker root dir"
 Docker Root Dir: /apps/docker
 
# 编辑/创建daemon.json文件
vim /etc/docker/daemon.json
{
        "data-root" : "/var/lib/docker",
        "insecure-registries" : ["10.3.90.106:8081"]
}

#迁移原有 Docker 数据到新目录	
mkdir /var/lib/docker
mv /apps/docker/* /var/lib/docker/

# 设置正确的权限(必须是root:root)
chown -R root:root /var/lib/docker
chmod -R 700 /var/lib/docker

# 重启Docker服务
systemctl daemon-reload
systemctl restart docker

2、运行实例

bash 复制代码
#完整启动命令示例
docker run -tid --privileged \
-p 4321:54321 \
-v /mnt/data:/home/kingbase/userdata/ \
-e NEED_START=yes \
-e DB_USER=kingbase \
-e DB_PASSWORD=123456 \
-e DB_MODE=mysql \
--name kingbase \
kingbase:v1 /usr/sbin/init

[root@node1 ~]# docker logs kingbase
[root@node1 ~]# ps -ef |grep data
kingbase   5095   4998  1 23:24 ?        00:00:00 /home/kingbase/install/kingbase/bin/kingbase -D /home/kingbase/userdata/data

3、升级前

bash 复制代码
[root@node1 ~]# docker exec -it kingbase /bin/bash


Welcome to 3.10.0-1160.el7.x86_64

System information as of time:  Fri 13 Mar 2026 03:04:24 PM UTC

System load:    0.06
Processes:      19
Memory used:    34.1%
Swap used:      0.3%
Usage On:       19%
Users online:   0


[kingbase@900578af4dec ~]$ ksql
Type "help" for help.

kingbase=# select version();
                                                       version
----------------------------------------------------------------------------------------------------------------------
 KingbaseES V009R001C002B0014 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28), 64-bit
(1 row)

kingbase=# select build_version;
 build_version
---------------
 1100651784c
(1 row)

kingbase=# show database_mode;
 database_mode
---------------
 mysql

4、升级中

bash 复制代码
1.#停机备份
[root@node1 ~]# docker exec -it kingbase /bin/bash
[kingbase@900578af4dec ~]$ sys_ctl -D /home/kingbase/userdata/data/ stop
[kingbase@900578af4dec ~]$ exit
[root@node1 ~]# mkdir /mnt/data_bak
[root@node1 ~]# cp -r /mnt/data/ /mnt/data_bak/
#备份容器内程序目录到宿主机
#格式:docker cp 容器名:容器内路径 宿主机目标路径
[root@node1 ~]# docker cp kingbase:/home/kingbase/install/ /mnt/data_bak/


2.#升级(容器内直接访问升级包(无需拷贝))
#进入容器查看共享目录里的升级包
[root@node1 ~]# cp /kdb_install/kingbase-server-V009R001C002B0014PS055-linux-x86_64.tar /mnt/data
[root@node1 ~]# docker exec -it kingbase /bin/bash
[kingbase@900578af4dec ~]$ ls -l /home/kingbase/userdata/

# 能看到升级包,直接解压/使用即可
[root@node1 ~]# cp /kdb_install/kingbase-server-V009R001C002B0014PS055-linux-x86_64.tar /mnt/data

[kingbase@900578af4dec ~]$ tar xf /home/kingbase/userdata/kingbase-server-V009R001C002B0014PS055-linux-x86_64.tar -C /home/kingbase/install/kingbase/

[kingbase@900578af4dec ~]$ sys_ctl -D /home/kingbase/userdata/data/ start

5、升级后

bash 复制代码
[kingbase@900578af4dec ~]$ ksql
Type "help" for help.

kingbase=# select version();
                                                          version
---------------------------------------------------------------------------------------------------------------------------
 KingbaseES V009R001C002B0014PS055 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28), 64-bit
(1 row)

kingbase=# select build_version;
 build_version
---------------
 9a3e44a1414
(1 row)

kingbase=# show database_mode;
 database_mode
---------------
 mysql
(1 row)

与升级无关,就是测试删除是否可以恢复(容器被删)

创建测试数据

bash 复制代码
[root@node1 ~]# docker exec -it kingbase /bin/bash
[kingbase@900578af4dec ~]$ ksql

create table t1(id int);
insert into t1 values (1),(2),(3);
select * from t1;
 id
----
  1
  2
  3
(3 rows)

[kingbase@900578af4dec ~]$ sys_ctl -D /home/kingbase/userdata/data/ stop
[root@node1 ~]# mkdir /backup
[root@node1 ~]# cp -r /mnt/data/ /backup/
[root@node1 ~]# docker cp kingbase:/home/kingbase/install/ /backup/
bash 复制代码
#重新创建容器 + 恢复备份
[root@node1 ~]# docker rm -f kingbase
kingbase
[root@node1 ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES



步骤 1:#重新创建和原配置一致的容器(核心)
#用原来的启动参数重新创建容器(先不启动数据库,仅创建容器):
docker run -tid --privileged \
-p 4321:54321 \
-v /mnt/data:/home/kingbase/userdata/ \
-e NEED_START=no \
-e DB_USER=kingbase \
-e DB_PASSWORD=123456 \
-e DB_MODE=mysql \
--name kingbase \
kingbase:v1 /usr/sbin/init

#注意:把 NEED_START=yes 改为 no,避免容器创建时自动启动数据库(此时数据 / 程序还没恢复,启动会报错)。





步骤 2:#恢复程序目录(从宿主机备份到新容器)
#1.清空新容器内默认的程序目录(避免冲突)
[root@node1 ~]# docker exec -it kingbase rm -rf /home/kingbase/install/
#2.从宿主机备份恢复程序目录
[root@node1 ~]# docker cp /backup/install/ kingbase:/home/kingbase/
#3.修复程序目录权限
[root@node1 ~]# docker exec -it kingbase /bin/bash
[kingbase@1fefb4bc37d7 ~]$ sudo su
[root@1fefb4bc37d7 ~]#
[root@1fefb4bc37d7 ~]# chown -R kingbase:kingbase /home/kingbase/install/
[root@1fefb4bc37d7 ~]# chmod -R 755 /home/kingbase/install/




步骤 3:#恢复数据目录(挂载模式,直接恢复宿主机)
#1.清空宿主机挂载目录(/mnt/data)的旧数据
[root@node1 ~]# rm -rf /mnt/data/*
#2.拷贝 /mnt/data
[root@node1 ~]# cp -r /backup/data/ /mnt/
#3.修复数据目录权限
#宿主机权限
[root@node1 ~]#  chown -R root:root /mnt/data/ 
#容器内权限
[root@1fefb4bc37d7 ~]# chown -R kingbase:kingbase /home/kingbase/userdata/
  




步骤 4:#启动数据库并验证(和你原验证步骤一致)
# 1. 进入容器启动数据库
[kingbase@1fefb4bc37d7 ~]$ sys_ctl -D /home/kingbase/userdata/data start
# 2. 验证数据库是否正常(核心验证步骤)
[kingbase@1fefb4bc37d7 ~]$ ksql
Type "help" for help.

kingbase=# select * from t1;
 id
----
  1
  2
  3
(3 rows)
#3.(可选)把 NEED_START 改回 yes,确保容器重启后自动启动数据库
#需修改容器启动参数(或直接重启容器时指定)
[root@node1 ~]# docker rm -f kingbase

# 重新创建容器,改回 NEED_START=yes
docker run -tid --privileged \
-p 4321:54321 \
-v /mnt/data:/home/kingbase/userdata/ \
-e NEED_START=yes \
-e DB_USER=kingbase \
-e DB_PASSWORD=123456 \
-e DB_MODE=mysql \
--name kingbase \
kingbase:v1 /usr/sbin/init

#再次验证
[root@node1 ~]# docker exec -it kingbase /bin/bash


Welcome to 3.10.0-1160.el7.x86_64

System information as of time:  Fri 13 Mar 2026 04:04:26 PM UTC

System load:    0.32
Processes:      19
Memory used:    32.2%
Swap used:      2.2%
Usage On:       21%
Users online:   0


[kingbase@9915999ed0ee ~]$ ksql
Type "help" for help.

kingbase=# select * from t1 ;
 id
----
  1
  2
  3
(3 rows)

官网下载的容器镜像有问题(待解决)

https://www.kingbase.com.cn/download.html#database_list?packageDrivenToolId=9

V9R1C2B14、KingbaseES_Dcoker镜像、X64

bash 复制代码
#查看日志,报错解决
[root@node1 ~]# docker logs kingbase
/bin/bash: error while loading shared libraries: libtinfo.so.6: cannot open shared object file: Permission denied
相关推荐
程序员清风6 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
正在走向自律7 小时前
数据集成产品的技术底座:从日志解析原理到 KFS 同步链路搭建(含建表与增删改查完整代码)
数据库·oracle·信创·数据集成·国产数据库·kingbasees·全量+增量同步
程序员塔塔喵7 小时前
【MySQL篇|第七篇】MySQL事务
数据库·mysql·mysql事务
独隅8 小时前
Claude API 实战教程:从入门到完整项目
android·java·数据库·claude·claude code
_孤傲_8 小时前
快速掌握 MySQL 语法
数据库·后端·mysql
数字新视界10 小时前
一体化机柜在数据中心运维中的创新应用与优势分析
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
SelectDB10 小时前
从 StarRocks 走向 Apache Doris:如何实现引擎平滑替换与架构升级?
大数据·数据库·数据分析
为思念酝酿的痛10 小时前
MySQL的操作
数据库·mysql
猫咪很可爱10 小时前
Oracle ORA-4031 错误分析与处理:SGA 内存不足导致 update/exp/expdp 失败
数据库·oracle
小豆庄11 小时前
视频素材处理时的隐私盲区:云处理与本地处理的边界在哪
数据库·图像处理·视频·敏捷流程