如何备份milvus向量数据库?

Milvus

1 前言

一个问题,一篇文章,一出故事。
笔者需要创建一个用于备份milvus的base shell脚本,脚本每天3点会被crontab触发,将使用如下命令执行备份,

milvus-backup create --config /etc/milvus-backup/backup.yaml

执行备份前,将使用如下命令检查配置否正常,如果正常则执行备份,否则脚本自动退出,

milvus-backup check --config /etc/milvus-backup/backup.yaml

将使用如下命令返回已经完成备份的备份列表,

milvus-backup list --config /etc/milvus-backup/backup.yaml

将使用如下命令删除超过7天的周一到周六的备份,周日的备份如果超过30天则执行删除,否则保留,请使用如下命令执行删除操作,

milvus-backup delete -n "backup_2025_09_17_08_10_09_495367775" --config /etc/milvus-backup/backup.yaml

2 最佳实践

2.1 备份环境

如何备份Milvus?

2.2 备份脚本

2.2.1 创建备份脚本

vim ~/scripts/backup-milvus.sh

加入如下配置,

#!/bin/bash

source /etc/profile

# Configuration file path
configFile="/etc/milvus-backup/backup.yaml"
# Log file path
logFile="/var/log/milvus_backup.log"

# Function to log messages
log() {
  echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$logFile"
}

# Check if the configuration is valid
if ! milvus-backup check --config "$configFile"; then
  log "Backup configuration check failed, exiting script."
  exit 1
fi

# Execute backup
milvus-backup create --config "$configFile"
log "Backup completed successfully."

# Get current date
currentDate=$(date +%Y-%m-%d)

# Get backup list
backupList=$(milvus-backup list --config "$configFile" | grep "^backup_")

# Iterate over the backup list
while IFS= read -r backupName; do
  # Extract backup date
  backupDate=$(echo "$backupName" | grep -oP '\d{4}_\d{2}_\d{2}')

  # Convert date format to YYYY-MM-DD
  backupDateFormatted=$(echo "$backupDate" | sed 's/_/-/g')

  # Calculate date difference
  backupTimestamp=$(date -d "$backupDateFormatted" +%s)
  currentTimestamp=$(date -d "$currentDate" +%s)
  diffDays=$(( (currentTimestamp - backupTimestamp) / 86400 ))

  # Check backup deletion conditions
  dayOfWeek=$(date -d "$backupDateFormatted" +%u) # 1 (Monday) to 7 (Sunday)

  if [[ $dayOfWeek -lt 7 ]]; then
    # Monday to Saturday
    if [[ $diffDays -gt 7 ]]; then
      milvus-backup delete -n "$backupName" --config "$configFile"
      log "Deleted backup: $backupName"
    fi
  else
    # Sunday
    if [[ $diffDays -gt 30 ]]; then
      milvus-backup delete -n "$backupName" --config "$configFile"
      log "Deleted backup: $backupName"
    fi
  fi
done <<< "$backupList"

2.2.2 测试脚本执行

bash ~/scripts/backup-milvus.sh

2.2.3 设置计划任务

crontab -e

加入如下设置,

0 3 * * * bash ~/scripts/backup-milvus.sh
没有评论

发表回复

Milvus
如何部署Oracle Linux 9.x milvus?

1 基础知识 1.1 Milvus的简介 – Milvus是鹰科Accipaitrida …

Milvus
如何熟悉milvus-cli?

1 前言 一个问题,一篇文章,一出故事。 笔者今天部署好Milvus的服务端,想要使用命令行客户端连 …

Docker
如何配置Docker Milvus外接minio存储?

1 前言 一个问题,一篇文章,一出故事。 本章将完成单节点的Docker Milvus对接外部的mi …