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
相关推荐
数据知道2 小时前
MongoDB审计日志配置:详细讲述满足合规性要求的安全记录
数据库·安全·mongodb
難釋懷2 小时前
Redis搭建哨兵集群
数据库·redis·缓存
璞~2 小时前
安装达梦数据库
数据库
oioihoii2 小时前
数据库查询优化中的谓词下推策略与成本感知优化实践
服务器·数据库·oracle
Full Stack Developme2 小时前
MongoDB 应用场景
数据库·mongodb
学习是生活的调味剂2 小时前
大模型应用之使用LangChain实现RAG(二)智能客服
服务器·数据库·langchain
瓜农老梁2 小时前
战火中的微光:归途
数据库
m0_738120723 小时前
渗透测试——pyexpvm靶机详细提权过程(MSF框架,Hydra数据库爆破,SUDO提权)
服务器·网络·数据库·python·sql·web安全
于眠牧北3 小时前
ubuntu22.04安装docker以及安装过程中报错解决方法
运维·docker·容器