目录
一、数据备份方案
1. 安装 Milvus Backup 工具
2. 备份所有集合数据
3. 验证备份是否成功
二、升级前准备
三、版本升级
1. 停止并移除旧服务
2. 拉取新版本镜像
3. 启动新版本服务
4. 验证升级
一、数据备份方案
1. 安装 Milvus Backup 工具
pip install milvus-backup
2. 备份所有集合数据
mkdir -p /root/milvus_backup
milvus_backup create -c all -o /root/milvus_backup/backup_$(date +%Y%m%d) --host 127.0.0.1 --port 19530
3. 验证备份是否成功
milvus_backup list -i /root/milvus_backup/backup_$(date +%Y%m%d)
二、升级前准备
提示: 此操作非必须执行,目的是为了数据备份,防止后续版本升级过程中发生数据丢失
查看当前集合信息(便于升级后验证)
pip3 install pymilvus && python3 -c "from pymilvus import connections, utility; connections.connect('default', host='127.0.0.1', port='19530'); print(utility.list_collections())"
看到输出结果
WARNING: All log messages before absl::InitializeLog() is called are written to STDERR
E0000 00:00:1747385665.884511 104933 http_proxy_mapper.cc:130] cannot parse value of 'http_proxy' env var. Error: INVALID_ARGUMENT: Could not parse 'scheme' from uri '192.168.1.87:7890'. Scheme must begin with an alpha character [A-Za-z].
['text_search_db5', 'image_search_db5', 'innovation_strategy_text_search', 'strategy_text_search']
2. 备份数据 ,查看Milvus容器的挂载卷信息
docker inspect milvus-standalone | grep -A 10 "Mounts"
看到如下输出
root@milvus-114:~# docker inspect milvus-standalone | grep -A 10 "Mounts"
"Mounts": [
{
"Type": "bind",
"Source": "/data/volumes/milvus",
"Destination": "/var/lib/milvus",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
}
],
"Config": {
root@milvus-114:~#
Milvus的所有数据存储在宿主机的 /data/volumes/milvus 目录,对应容器内的 /var/lib/milvus 目录。
停止Milvus服务(确保数据写入完成):
docker stop milvus-standalone
创建数据文件备份目录:
mkdir -p /root/milvus_full_backup_$(date +%Y%m%d_%H%M%S)
复制所有Milvus数据文件到备份目录:
cp -r /data/volumes/milvus/* /root/milvus_full_backup_20250516_183710/ && echo "备份完成!"
检测备份文件大小和完整性:
du -sh /root/milvus_full_backup_20250516_183710/
三、版本升级
提供了一个自动化更新脚本
bash /root/milvus_full_backup_20250516_183710/upgrade.sh
/root/milvus_full_backup_20250516_183710/upgrade.sh脚本内容
# Milvus 升级脚本: v2.4.12 到 v2.5.11
# 此脚本在执行前会先备份当前数据echo "=== Milvus 升级脚本 ==="
echo "此脚本将升级 Milvus 从 v2.4.12 到 v2.5.11"
echo "警告: 升级前请确保已备份所有重要数据!"
echo# 检查Docker是否运行
if ! docker info > /dev/null 2>&1; thenecho "错误: Docker 服务未运行!"exit 1
fi# 确认继续
read -p "是否继续升级? (y/n): " confirm
if [ "$confirm" != "y" ]; thenecho "升级操作已取消"exit 0
fi# 检查备份文件
if [ ! -d "/root/milvus_full_backup_20250516_183710" ]; thenecho "错误: 备份目录不存在!"exit 1
fi# 检查etcd和minio服务是否正常运行
if ! docker ps | grep -q milvus-etcd; thenecho "错误: etcd 服务未在运行!"exit 1
fiif ! docker ps | grep -q milvus-minio; thenecho "错误: MinIO 服务未在运行!"exit 1
fi# 获取Docker网络信息
NETWORK_NAME="milvus"
if ! docker network inspect $NETWORK_NAME > /dev/null 2>&1; thenecho "错误: milvus 网络不存在!"exit 1
fiecho "使用 Docker 网络: $NETWORK_NAME"# 停止当前服务
echo "停止 Milvus 服务..."
docker stop milvus-standalone || true# 备份容器配置
echo "备份容器配置..."
docker inspect milvus-standalone > /root/milvus_full_backup_20250516_183710/milvus-container-config.json || true# 删除当前容器(保留数据)
echo "删除当前容器..."
docker rm milvus-standalone || true# 拉取新版本镜像
echo "拉取 Milvus v2.5.11 镜像..."
docker pull milvusdb/milvus:v2.5.11# 创建新容器 - 使用正确的启动命令和网络配置
echo "创建新版本容器..."
docker run -d --name milvus-standalone \--network $NETWORK_NAME \--network-alias milvus-standalone \-p 19530:19530 \-p 9091:9091 \-v /data/volumes/milvus:/var/lib/milvus \-e ETCD_ENDPOINTS=etcd:2379 \-e MINIO_ADDRESS=minio:9000 \milvusdb/milvus:v2.5.11 milvus run standalone# 等待容器启动
echo "等待 Milvus 服务启动..."
sleep 30# 检查状态
echo "检查容器状态..."
if docker ps | grep -q milvus-standalone; thenecho "Milvus v2.5.11 容器已启动"# 检查日志是否有错误if docker logs milvus-standalone | grep -i "panic\|error\|fail" | grep -v "level=info"; thenecho "警告: 发现错误日志,请检查容器日志!"elseecho "服务日志检查通过"fi
elseecho "错误: Milvus 容器未能正常启动!"echo "请使用 'docker logs milvus-standalone' 检查错误"exit 1
fiecho
echo "升级完成! Milvus 已从 v2.4.12 升级到 v2.5.11"
echo "请使用以下命令测试连接:"
echo "python3 -c \"from pymilvus import connections; connections.connect('default', host='127.0.0.1', port='19530'); print('连接成功')\""
echo
echo "如果升级出现问题,请使用 restore.sh 脚本恢复"
简单执行方式:
1. 停止并移除旧服务
# 停止旧容器
docker stop milvus-standalone# 移除旧容器(保留数据卷)
docker rm milvus-standalone
2. 拉取新版本镜像
# 拉取新镜像
docker pull milvusdb/milvus:v2.5.11
3. 启动新版本服务
# 启动新容器
docker run -d --name milvus-standalone \--network milvus \--network-alias milvus-standalone \-p 19530:19530 \-p 9091:9091 \-v /data/volumes/milvus:/var/lib/milvus \-e ETCD_ENDPOINTS=etcd:2379 \-e MINIO_ADDRESS=minio:9000 \milvusdb/milvus:v2.5.11 milvus run standalone
4. 验证升级
# 检查容器状态
docker ps | grep milvus-standalone# 验证连接和版本
python3 -c "from pymilvus import connections, utility; \connections.connect('default', host='127.0.0.1', port='19530'); \print('连接成功,版本:', utility.get_server_version())"