Milvus向量数据库-数据备份与恢复

前言

随着Milvus版本的持续迭代,越来越多的用户将其作为构建生产环境的向量数据服务使用。作为数据服务使用,其中的运维、数据安全、容灾备份自然是用户最关心且不容有失的需求。为解决这一需求,Milvus-backup项目工具应运而生。

Milvus-bakcup是Zilliz专门为Milvus向量数据库开发的数据备份与恢复的工具。它不同于Milvus向量数据库Attu图形管理工具和ANN算法可视化工具Feder。

下面会具体介绍Milvus-backup工具的使用方法。

一、Milvus-backup工具功能简介

Milvus-backup工具支持以下工作能力:

1.支持命令行和Restful API的多种交互方式;

2.支持热备份,对Milvus集群运行几乎没有影响;

3.支持集群全量备份和指定collection(集合)备份;

4.可通过bulkinsert实现备份与恢复,并可以恢复时重命令collection(集合);

5.支持S3,支持跨bucket备份,可以实现集群间迁移;

6.支持Milvus2.2.0+的版本;

7.目前只支持备份数据,不备份索引数据;

二、Milvus-backup工具设计思路

2.1、Milvus-backup的编程语言

Milvus-backup是使用go语言实现的,部分逻辑直接拷贝 Milvus 源码,保证最大程度的兼容性和操作习惯的一致性。

2.2、Milvus-backup工具的交互方式

Milvus-bakcup支持多种交互使用方法,如下:

2.2.1、命令行方式

考虑备份工具使用的主要用户,是对Milvus的运维开发人员,命令行是最简便直接的使用方式,Milvus-backup基于cobra框架实现了命令行。

2.2.2、Restful API方式

Milvus-backup 还提供 Restful API,便于工具服务化,并提供了友好的 Swagger UI。

Milvus-backup主要包含以下接口,分别是备份(backup)和恢复(restore)的主要操作:

备份(backup):

1.CreateBackup

2.GetBackup

3.ListBackups

4.DeleteBackup

恢复(restore):

1.RestoreBackup

2.GetRestore

详情可参考:Milvus-bakcup

2.2.3、Go module方式

因为Milvus-backup工具是go语言开发的,所以还可以作为go module集成到其他工具之中。例如,未来我们会提供all in one的Milvus工具箱,将包括Milvus-backup在内的运维工具一起打包。

三、实现原理

熟悉Milvus向量数据库的运维人员都知道,Milvus目前使用 etcd存储元数据的(以下称为 metadata),使用对象存储(minio、S3 等)存储真实数据(以下称为 storage)。

未来,Milvus可能会支持更多的存储介质,如 MySQL、Alluxio、HDFS 等,在设计上要考虑兼容性。

因此本次我们采用备份与恢复的方案是:

1、备份环节

Metadata不直接调用etcd接口,而是通过Milvus SDK获取必要信息,存储到自定义的backup metadata文件中,backup metadata使用json格式,便于观察和适配;

storage通过调用存储SDK直接复制数据到指定路径,备份数据和原数据几乎保持相同路径结构,降低理解成本。

在备份的时候,工具会调用Milvus的flush接口来获得备份的快照时间戳,这是备份环节唯一会影响Milvus集群的地方,但影响很小。

2、恢复环节

不直接操作metadata和storage,而是调用Milvus SDK重新创建collection,通过2.2.0新推出的bulkinsert功能,将数据批量插入到新建collection中,因此逻辑上备份恢复得到的是一张新表,只不过与原表数据内容一致。

四、操作方法

熟悉了以上对Milvus-backup工具的介绍后,可以对其进行实操了。

因为Milvus-backup工具是go语言开发的,所以该工具有2种方式安装:源码编译和二进制。

在安装Milvus-backup工具之前,需要准备好Milvus向量数据库,具体安装方法可以参照之前写的:安装Milvus向量数据库。

注:本次的操作是对milvus单机模式进行的备份与恢复操作方法,集群的方法还在研究中。

4.1、Milvus-backup工具安装

本次安装我采用的是二进制的安装方法,如果大家不想用二进制方法安装,可以选择源码编译的方法进行安装配置。

如果采用源码编译的方法进行安装的话,需要先配置go环境,再使用go进行编译,具体可以查看本文最后:第六节中的源码安装milvus-backup。

4.1.1、Milvus-backup工具下载

Milvus-backup工具地址:https://github.com/zilliztech/milvus-backup/releases

大家一定要根据自己的Milvus向量数据库版本去选择Milvus-backup工具的对应版本,如果版本选择不对的话,在进行备份或恢复时,会有失败的的情况发生。

下面是针对Milvus-backup工具版本对应的Milvus向量数据库版本的对应选择。

Milvus向量数据库版本

Milvus-backup工具版本

v2.3.0 and above

v0.4.0 and above

v2.2.9 and above

v0.3.0 and above

v2.2.0 to v2.2.8

v0.1.0 to v0.2.2

我自己的Milvus向量数据库为:2.3.20版本,我分别选择了Milvus-backup的0.4.20和0.4.21。

下载时要同时下载二进制文件和源码文件,彩用的是二进制方法安装,为什么要还要下载源码文件呢?因为使用milvus-backup工具进行备份或恢复时,需要一个backup.yaml的配置文件,二进制包中没有该配置文件。

还有一个相对来说比较重要的就是,建好milvus向量数据库,如果没有创建collection可以使用源码包example目录下写好的python程序,prepare_data.py(准备数据)、clean_data.py(清理数据)、verify_data.py(验证数据)进行数据的生产,不需要自己再写一遍程序进行数据准备等工作。

如下图是milvus-backup工具的安装包,大家可以根据自己主机的情况选择对应的安装包即可。

4.1.2、解压milvus-backup

解压之前,要先创建milvus-backup的工作目录和日志目录,这个大家可以根据自己实际情况进行自定义。

[iwen@jina-milvus 0.4.20]$ mkdir -pv /iwen/milvus-backup

[iwen@jina-milvus 0.4.20]$ mkdir -pv /iwen/milvus-backup/logs

[iwen@jina-milvus 0.4.20]$ tar -xf milvus-backup_Linux_x86_64.tar.gz

解压出来会有3个文件,分别为:milvus-bakcup、LICENSE、README.md,把milvus-backup文件移动到新建目录中。

[iwen@jina-milvus 0.4.20]$ mv milvus-bakcup /iwen/milvus-backup

再解压milvus-backup源码文件。

[iwen@jina-milvus 0.4.20]$ unzip milvus-backup-0.4.20.zip

[iwen@jina-milvus 0.4.20]$ cd milvus-backup-0.4.20

移动或复制configs目录到新建目录/iwen/milvus-backup下。

[iwen@jina-milvus milvus-backup-0.4.20]$ mv configs /iwen/milvus-backup

4.1.3、修改backup.yaml文件

修改之前进行一下备份,以免修改出问题,容易对配置文件进行恢复。

[iwen@jina-milvus configs]$ cp backup.yaml backup.yaml.YYYYMMDD

YYYYMMDD代表年月日

[iwen@jina-milvus configs]$ vi backup.yaml

找到下面标红的参数

# Configures the system log output.

log:

  level: info # Only supports debug, info, warn, error, panic, or fatal. Default 'info'.

  console: true # whether print log to console

  file:

    rootPath: "logs/backup.log"

http:

  simpleResponse: true

# milvus proxy address, compatible to milvus.yaml

milvus:

  address: localhost

  port: 19530

  authorizationEnabled: false

  # tls mode values [0, 1, 2]

  # 0 is close, 1 is one-way authentication, 2 is two-way authentication.

  tlsMode: 0

  user: "root"

  password: "Milvus"

# Related configuration of minio, which is responsible for data persistence for Milvus.

minio:

  # cloudProvider: "minio" # deprecated use storageType instead

  storageType: "minio" # support storage type: local, minio, s3, aws, gcp, ali(aliyun), azure, tc(tencent)

  

  address: localhost # Address of MinIO/S3

  port: 9000   # Port of MinIO/S3

  accessKeyID: minioadmin  # accessKeyID of MinIO/S3

  secretAccessKey: minioadmin # MinIO/S3 encryption string

  useSSL: false # Access to MinIO/S3 with SSL

  useIAM: false

  iamEndpoint: ""

  

  bucketName: "a-bucket" # Milvus Bucket name in MinIO/S3, make it the same as your milvus instance

  rootPath: "files" # Milvus storage root path in MinIO/S3, make it the same as your milvus instance

  # only for azure

  backupAccessKeyID: minioadmin  # accessKeyID of MinIO/S3

  backupSecretAccessKey: minioadmin # MinIO/S3 encryption string

  

  backupBucketName: "milvus-hello" # Bucket name to store backup data. Backup data will store to backupBucketName/backupRootPath

  backupRootPath: "mybackup" # Rootpath to store backup data. Backup data will store to backupBucketName/backupRootPath

backup:

  maxSegmentGroupSize: 2G

parallelism:

    # collection level parallelism to backup

    backupCollection: 4

    # thread pool to copy data. reduce it if blocks your storage's network bandwidth

    copydata: 128

    # Collection level parallelism to restore

    restoreCollection: 2

  

  # keep temporary files during restore, only use to debug

  keepTempFiles: false

  

  # Pause GC during backup through Milvus Http API.

  gcPause:

    enable: true

seconds: 7200

address: http://localhost:9091

address对应的localhost可以根据自己环境的实际情况进行更改,如果milvus向量数据库所在的主机和milvus-backup在一台主机上就不需要修改,反之修改成milvus向量数据库所在的主机IP。

bucketNamerootPath要根据milvus向量数据库中milvus.yaml配置文件中对应的参数进修改,确保backup.yaml中的这2个参数要和milvus.yaml一致。

如果这2个参数不一致的话,会遇到备份恢复的collection只有metadata,没有数据的问题。

这两个参数,在不同的部署模式中,默认值是不同的,具体差异见下表:

filed

Docker Compose

Helm/milvus operator

bucketName

a-bucket

milvus-bucket

rootPath

files

file

backupBucketName代表备份文件的名字,可以根据需要进行修改。

backupRootPath: 代表备份文件所在的目录,可以根据需要进行修改。

注:如果想要提高数据的备份与恢复效率,可以在“parallelism”小节点中调整相应的参数。

4.1.4、check配置初检查

[iwen@jina-milvus milvus-backup]$ ./milvus-backup check

[iwen@jina-milvus milvus-backup]$ ./milvus-backup check

0.4.21 (Built on 2024-08-22T04:00:46Z from Git SHA 760ea2c7e05992e1f0f01c9b7a98aee2796b90cb)

config:backup.yaml

[2024/08/28 14:37:22.869 +08:00] [INFO] [logutil/logutil.go:165] ["Log directory"] [configDir=]

[2024/08/28 14:37:22.869 +08:00] [INFO] [logutil/logutil.go:166] ["Set log file to "] [path=logs/backup.log]

[2024/08/28 14:37:23.021 +08:00] [INFO] [storage/minio_chunk_manager.go:144] ["minio chunk manager init success."] [bucketname=a-bucket] [root=files]

[2024/08/28 14:37:23.039 +08:00] [INFO] [storage/minio_chunk_manager.go:144] ["minio chunk manager init success."] [bucketname=milvus-hello] [root=mybackup]

Succeed to connect to milvus and storage.

Milvus version: v2.3.20

Storage:

milvus-bucket: a-bucket

milvus-rootpath: files

backup-bucket: milvus-hello

backup-rootpath: mybackup

标红部分检查出了milvus向量数据库的版本,以及backup.yaml配置文件中修改的备份名称和路径。

4.1.3、数据备份

备份时是使用milvus-backup中的create参数进行备份,可以使用help来查看数据备份的帮助。

[iwen@jina-milvus milvus-backup]$ ./milvus-backup create –help

[iwen@jina-milvus milvus-backup]$ ./milvus-backup create --help

0.4.21 (Built on 2024-08-22T04:00:46Z from Git SHA 760ea2c7e05992e1f0f01c9b7a98aee2796b90cb)

create subcommand create a backup.

Usage:

  milvus-backup create [flags]

Flags:

  -n, --name string                   backup name, if unset will generate a name automatically

  -c, --colls string                  collectionNames to backup, use ',' to connect multiple collections

  -d, --databases string              databases to backup

  -a, --database_collections string   databases and collections to backup, json format: {"db1":["c1", "c2"],"db2":[]}

  -f, --force                         force backup, will skip flush, should make sure data has been stored into disk when using it

      --meta_only                     only backup collection meta instead of data

      --rbac                          whether backup RBAC meta

  -h, --help                          help for create

Global Flags:

      --config string   config YAML file of milvus (default "backup.yaml")

      --set strings     Override yaml values using a capitalized snake case format (--set MILVUS_USER=Marco)

[iwen@jina-milvus milvus-backup]$ ./milvus-backup create -n backup_name -c database.collection

-n:代表备份的名称,可以根据情况进行命名

-c:你表要备份哪个collection,需要注意的是,如果Milvus向量数据库中有多个数据库,备份collection要指出要备份哪个数据库中的哪个集合,如果不指定,会默认备份default为中的集合,此时会报出如下错误:

图中标红部分就是我要备份iwen这个集合,但它属于另一个库(test),没有指定库名,备份报错。如果指明哪个库,会备份成功,如下所示:

备份完成之后,一定要查看一下图中标蓝部份,看看没有ERROR信息,如果有,说明备份有错,且备份是失败的。

如果当时没有看这些信息,也可以通过查看milvus-bakcup的日志进行查看。目录所在目录是:/iwen/milvus-backup/logs

此时可以到对应的目录下看看自己的备份文件是否生成,查看方式有2种,下面会分别介绍一下:

第1种方法:在操作系统上进行查看

找到milvus向量数据库所安装位置(数据存放位置),进入到minio目中进行查看,如下所示:

 [root@jina-milvus volumes]# pwd

/iwen/milvus/2.3.20/volumes

这是我自己的安装路径(数据存放位置),大家可以根据自己的实际情况进行查看。

[root@jina-milvus volumes]# cd minio

我在backup.yaml配置文件中配置的备份名称和备份路径分别为:milvus-hello和mybackup,所以可以看到备分文件已经生成,如下:

[root@jina-milvus mybackup]# pwd

/iwen/milvus/2.3.20/volumes/minio/milvus-hello/mybackup

[root@jina-milvus mybackup]# ls -lrt iwen_backup_20240827

总用量 0

drwxr-xr-x 3 root root  24 8月  28 14:52 binlogs

drwxr-xr-x 8 root root 160 8月  28 14:52 meta

iwen_backup_20240827这是刚才备份时,对备份文件的名字,该目录下生成了binlogs和meta数据目录,说明备份文件已生成。

如果忘记了自己的备份名字,也可以使用milvus-backup命令进行查看,如下:

[iwen@jina-milvus milvus-backup]$ ./milvus-backup list

图中标红部分就是查看备份文件命令和生成的备份文件。

2种方法:使用minio console进行查看

一般启动milvus向量数据库后,会自动把minio console启动起来,可以使用ps命令进行查看。

[root@jina-milvus milvus-backup]# ps -ef|grep minio

root      20619  20591 12 07:50 ?        00:52:54 minio server /minio_data --console-address :9001

可以使用浏览器直接访问http://ip:9001进行访问查看,该平台的默认用户名和密码为:minioadmin。如下图所示:

登录进去之后,默认会打开备份文件浏览页,找到backup.yaml中backupBucketName对应的值。

点击milvus-hello可以查看备份信息,找到backup.yaml中backupRootPath对应的值。

点击mybackup可以查看该备份目录下所有的备份,找到自己备份时对备份文件命名的名称,点击进入。

图中标红部分,就是我刚才的备份文件,点击进去可以查看。

binlogs目录下存放的是备份数据,这里的数据文件是data类型。

meta目录下存放的是meta元数据,可以查看备份的信息,这里都是json格式的文件,大家可以下载下来进行查看。

到此为止,备份数据和查看备份数据的方法已全部完成,接下来就是要对备份的数据进行恢复了。

4.1.4、数据恢复

恢复数据我们使用的是restore这个参数命令,可以使用--help查看帮助信息。

[iwen@jina-milvus milvus-backup]$ ./milvus-backup restore --help

[root@jina-milvus milvus-backup]# ./milvus-backup restore --help

0.4.21 (Built on 2024-08-22T04:00:46Z from Git SHA 760ea2c7e05992e1f0f01c9b7a98aee2796b90cb)

restore subcommand restore a backup.

Usage:

  milvus-backup restore [flags]

Flags:

  -n, --name string                   backup name to restore

  -c, --collections string            collectionNames to restore

  -s, --suffix string                 add a suffix to collection name to restore

  -r, --rename string                 rename collections to new names, format: db1.collection1:db2.collection1_new,db1.collection2:db2.collection2_new

  -d, --databases string              databases to restore, if not set, restore all databases

  -a, --database_collections string   databases and collections to restore, json format: {"db1":["c1", "c2"],"db2":[]}

      --meta_only                     if true, restore meta only

      --restore_index                 if true, restore index

      --use_auto_index                if true, replace vector index with autoindex

      --drop_exist_collection         if true, drop existing target collection before create

      --drop_exist_index              if true, drop existing index of target collection before create

      --skip_create_collection        if true, will skip collection, use when collection exist, restore index or data

      --rbac                          whether restore RBAC meta

  -h, --help                          help for restore

Global Flags:

      --config string   config YAML file of milvus (default "backup.yaml")

      --set strings     Override yaml values using a capitalized snake case format (--set MILVUS_USER=Marco)

如果对数据进行恢复时,想把对应的索引也一并创建好,需要把--restore_index这个参数加上。

[iwen@jina-milvus milvus-backup]$ ./milvus-backup restore --restore_index -n backup_name -s _recover

backup_name:代表备份的文件名称,如果忘记备份名称,可以使用milvus-backup list命令进行查看

-s:代表恢复数据时,为集合创建一个新的名字,并且这个名字是以_recover命名的。也可以根据自己的实际情况进行命名。

注:如果想把原collection恢复,恢复前需要把之前备份的collection进行删除或是重命名。大家可以根据自身的实际使用情况进行方法的选择。

如下图所示,是恢复数据的结果:

一定要关注最后的结果是否是success和图中标蓝部分,有没有ERROR错误信息。恢复日志同样存在/iwen/milvus-backup/logs目录下。

这里为了看的方便直接,我这里使用的Attu图形工具查看的恢复情况。

大家也可以用自己写的Python程序进行新旧数据的对比,如果不想自己写,可以使用milvus-backup源码example中的verify_data.py进行数据对比。

但是要注意,如果想用milvus-backup源码example中的verify_data.py进行数据对比的话,一定要先看一下该程序内容,如:字段、库、collection、索引等相关信息是否和自己创建的一样。

Attu图形工具查看:

原:

恢复后:

从恢复的情况来看,字段、索引和数据量个数一样。但为什么状态不一样呢,原数据是“已加载”,恢复的是“未加载”,这是因为数据目前还在存在内存中,还没有落盘,落盘后,状态就变为“已加载”了,此时需要利用python代码把该数据从内存中进行落盘,也可以利用Attu这个图形工具,点击“未加载”进行数据落盘,在日常的工作中要使用python代码进行落盘操作,就是数据恢复完之后,要进行一次python代码落盘的操作。

4.1.5、milvus-backup 0.4.21版本问题

如果大家使用的是milvus-backup 0.4.21版本,这个版本经过自己测试使用,在进行数据恢复时,无法正常进行数据恢复,如下图标红部分:

在进行数据恢复时,报出了ERROR的错误,从日志中发现,根据备份的binlogs中的文件进行数据插入时,无法找到对应的目录,经过分析查看,恢复把文件所在的目录ID合并成了一个,找不到文件造成。

真实文件目录结构,如下图所示:

milvus-backup 0.4.21版本,把图中标蓝色部分的最后2级目录合并成一个造成数据无法恢复。

到此为止,利用milvus-bakcup工具对milvus向量数据库的数据进行备份与恢复过程已验证完成。

五、Restful API操作方式

Milvus-backup工具除了提供命令行操作外,还提供了一套完成的Restful API调用的方式。

不管是二进制安装,还是源码编译安装,解压出的包都会包含一个README.md帮助文档,这里面提供了如何使用Restful API的方式去完成Milvus向量数据的备份与恢复。

同时Milvus-backup还提供了Swagger UI方式查看Restful API接口和参数的方式,下面分别对这2种方式进行介绍:

第1种:通过README.md帮助文档查看

[iwen@jina-milvus milvus-backup]$ vi README.md

找到API Reference小节,如下图所示:

1、备份相关:

create:数据备份

list:查看所有备份文件

get_bakcup:按名称检索备份文件

delete:按名称删除备份文件

2、恢复相关:

restore:按备份文件名称进行数据恢复

get_restore:获取数据恢复状态信息

注:接口的“--data-raw”这个参数目前在curl的版本中已经没有该参数了,可以使用“-d”参数来代替。

如果要使用Restful API方式进行数据的备份与恢复,需要把milvus-backup以服务的方式进行启动才能使用,启动方法也在README.md帮助文档中。

启动方法如下:

[iwen@jina-milvus milvus-backup]$ vi README.md

找到API server小节,如下图所示:

如下所示启动Restful API。

[iwen@jina-milvus milvus-backup]$ ./milvus-backup server

Restful API启动后的默认端口为8080,如果不想使用8080,可以使用以下方式启动。

[iwen@jina-milvus milvus-backup]$ ./milvus-backup server -p port

-p:代表启动Restful API时,需要用哪个端口启动,直接在“-p”后面写入想要运行的端口号即可。如想在8090端口下启动:

[iwen@jina-milvus milvus-backup]$ ./milvus-backup server -p 8090

启动milvus-backup的Restful API如下操作:

[iwen@jina-milvus milvus-backup]$ ./milvus-backup server

[iwen@jina-milvus milvus-backup]$ ./milvus-backup server

0.4.20 (Built on 2024-08-20T02:34:30Z from Git SHA 725052152b2655378f4d42ef2151127ce5e0005b)

config:backup.yaml

[2024/08/29 09:46:46.988 +08:00] [INFO] [logutil/logutil.go:165] ["Log directory"] [configDir=]

[2024/08/29 09:46:46.990 +08:00] [INFO] [logutil/logutil.go:166] ["Set log file to "] [path=logs/backup.log]

[2024/08/29 09:46:46.991 +08:00] [INFO] [core/backup_context.go:96] ["{Base:0xc0001fdb80 MaxSegmentGroupSize:2147483648 BackupCollectionParallelism:4 BackupCopyDataParallelism:128 RestoreParallelism:2 KeepTempFiles:false GcPauseEnable:true GcPauseSeconds:7200 GcPauseAddress:http://192.168.10.2:9091}"]

[2024/08/29 09:46:46.991 +08:00] [INFO] [core/backup_context.go:97] ["{Base:0xc0001fdb80 Enabled:true DebugMode:false SimpleResponse:true}"]

启动之后,就可以使用Restful API方式进行备份与恢复了。

2种:通过Swagger UI帮助文档查看

Restful API启动之后,可以按照README.md帮助文档中的API server小节,浏览器地址栏输入:http://192.168.10.2:8080/api/v1/docs/index.html访问即可,该地址是指milvus-backup的Restful API启动所在的主机地址。

如下图所示:

大家想查看某一个接口内的详情信息的话,可以点击某一个接口查看即可,如想查看Backup中/create接口信息:

如果还想查看更详细的接口参数信息,可以在milvus-backup的Swagger UI页的“Models”小组内找到自己想要了解的信息,如想了解backuppb.BackupInfo的相关详细信息,直接点击“backuppb.BackupInfo”功能模块即可。如下图所示:

六、源码安装milvus-backup

因milvus-backup是使用go语言开发,因此源码安装milvus-backup时,需要先安装go环境。

6.1、go环境安装配置
6.1.1、go安装包下载

go下载地址:All releases - The Go Programming Language (google.cn)

下面给大家简单介绍一下go的安装过程,供大家学习。可以根据自已环境选择适合自己的版本即可。

此处我选择的是图中标红的版本,如下图所示:

6.1.2go安装

把下载好的的go安装包解压到自己规定好的目录,如下所示:

[iwen@jina-milvus 0.4.20]$ tar -xf -C go1.23.0.linux-amd64.tar.gz /iwen

6.1.3、配置环境变量

解压完成之后,需要配置好go环境变更,以便在任何地方都可以执行go的命令,如下所示:

[iwen@jina-milvus iwen]$ vi /etc/profile.d/go.sh

GO_HOME=/iwen/go

PATH=$PATH:$GO_HOME/bin

export PATH GO_HOME

[iwen@jina-milvus iwen]$ source /etc/profile.d/go.sh

6.1.4、验证go环境变量

[iwen@jina-milvus iwen]$ go version

go version go1.23.0 linux/amd64

到此为止go环境安装配置完成。

6.2、源码安装milvus-bakcup

大家可以参照4.1.1小节,下载自己milvus向量数据库版本对应的milvus-backup工具。

6.2.1、解压milvus-bakcup

[iwen@jina-milvus 0.4.20]$ unzip milvus-backup-0.4.20.zip

把milvus-backup-0.4.20移动到对应的安装目录下,并且重命名。

[iwen@jina-milvus 0.4.20]$ mv milvus-backup-0.4.20 /iwen

[iwen@jina-milvus 0.4.20]$ cd /iwen

[iwen@jina-milvus iwen]$ mv milvus-backup-0.4.20  iwen-backup

6.2.2、编译安装milvus-backup

[iwen@jina-milvus milvus-backup]$ go get

此过程有点慢,要耐心等待。等这一步完成之后,执行以下步骤。

[iwen@jina-milvus milvus-backup]$ go build

该过程完成后,会在/iwen/milvus-backup目录下生成milvus-backup命令。此时源代码安装milvus-backup工具就完成了。

注:如果使用go get进行依赖安装时比较慢,可以使用go代理加速来完成,如下操作:

临时生效:

[iwen@jina-milvus milvus-backup]$ export GOPROXY=https://goproxy.io,direct

长期生效:

[iwen@jina-milvus ~]$ vi .bash_profile

添加以下内容:

export GOPROXY=https://goproxy.io,direct

[iwen@jina-milvus ~]$ source .bash_profile

参考文档

Milvus官方手册:Back up and Restore Data Using Commands Milvus v2.3.x documentation

zilliztech/milvus-backup:https://github.com/zilliztech/milvus-backup/tree/main

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/413227.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【并集查找 图论】2421. 好路径的数目

本文涉及知识点 C图论 LeetCode2421. 好路径的数目 给你一棵 n 个节点的树(连通无向无环的图),节点编号从 0 到 n - 1 且恰好有 n - 1 条边。 给你一个长度为 n 下标从 0 开始的整数数组 vals ,分别表示每个节点的值。同时给你…

【C++11及其特性】函数返回值当引用

函数返回值当引用目录 一.若返回变量为栈变量1.例子2.不能成为其他引用的初始值3.不能作为左值 二.若返回变量为静态变量或全局变量1.列子2.即可左值也可右值 三.若返回变量为形参1.普通形参2.引用形参 四.结论 一.若返回变量为栈变量 1.例子 返回的是局部变量的引用,这里用的…

【Python系列】SQLAlchemy 基本介绍

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

5.3二叉树——二叉树链式结构实现

本篇博客梳理二叉树链式结构 明确:二叉树是递归定义的 递归的本质:当前问题子问题,返回条件是最小规模的子问题 一、二叉树的遍历 1.前序、中序与后序遍历 (1)前序:根->左子树->右子树…

书生大模型实战营(1)——InterStudio基础知识+Vscode SSH连接远程服务器+Linux基础指令

参加书生.浦江大模型实战训练营,学习大模型知识和微调技术,所有课程免费,通过闯关的形式学习,也比较有趣。一起来了解LLM的世界。邀请链接 产品简介 InternStudio 是大模型时代下的云端算力平台。基于 InternLM 组织下的诸多算法…

经典文献阅读之--ParkingE2E(基于摄像头的端到端停车网络:从图像到规划)

0. 简介 自动泊车是智能驾驶领域的一项关键任务。传统泊车算法通常采用基于规则的方案来实现。然而,由于算法设计的复杂性,这些方法在复杂的泊车场景中效果欠佳。相比之下,基于神经网络的方法往往比基于规则的方法更加直观且功能多样。通过收…

ORACLE 统计信息的备份与恢复

备份 --需要先创建统计信息基础表 exec dbms_stats.create_stat_table(USER1,STAT_TIMESTAMP); --导出某个用户的所有统计信息 exec dbms_stats.export_schema_stats(USER1,STAT_TIMESTAMP);--测试(插入100条,更新统计信息,略) select num_rows,last_ana…

基于STM32开发的简易自动驾驶系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化传感器数据采集与处理电机控制与转向OLED显示与状态提示Wi-Fi通信与远程监控应用场景 简易自动驾驶演示智能车模型开发与学习常见问题及解决方案 常见问题解决方案结论 1. 引言 随…

蜂鸣器奏乐

一、粗略了解简谱 拍号:如图,“2”表示一个小节有2拍,“4”表示4分音符为一拍 终止线表示歌曲结束 注意:以下音符都按以四分音符为一拍计算拍数 四分音符: 唱一拍 二分音符: 某一个音右边有一个小横线&…

中国招标投标平台JS逆向:DES加密与Python纯算还原

中国招标投标平台JS逆向:DES加密与Python纯算还原 目录 🔐 JS DES解密🧮 Python版本的纯算实现 🔐 JS DES解密 在中国招标投标公共服务平台的分析过程中,发现了数据加密采用了DES算法。DES(数据加密标准&…

github源码指引:C++嵌入式WEB服务器

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 相关专题: C嵌入式…

Broker服务器模块

一.Broker模块介绍 二.Broker模块具体实现 1. 类的成员变量与构造函数 成员变量 事件循环和TCP服务器: muduo::net::EventLoop _baseloop;muduo::net::TcpServer _server; 这些是muduo库提供的核心组件,负责处理网络事件和管理TCP连接。 消息分发和编码: muduo::…

Spring Security 认证源码超详细分析

Spring Security 认证源码超详细分析 认证(Authentication)是系统确认用户信息的重要途径,用户通过认证之后,系统才能明确用户的身份,进而才可以为该用户分配一定的权限,这个过程也叫授权(Auth…

项目实战--Sa-Token详细方案笔记

Sa-Token权限系统设计 一、前言二、认证授权的概念三、Sa-Token简介3.1 Sa-Token使用方式3.2 踢人下线3.3 全局异常处理3.4 二级认证3.5 同端互斥登录3.6 Http Basic/Digest 认证3.6.1 HttpBasic认证3.6.2 Http Digest 认证 四、Sa-Token授权(鉴权)4.1 权…

详说 类和对象

类怎么定义 类是什么呢?类就是我们上篇文说的命名空间,单独创建一个域,自己有自己的生命空间,那么类怎么定义呢?C规定,假设 stack就是他的类名,那么前面要加个class,换行之后就是他…

汽车乘客热舒适度大挑战,如何利用仿真技术提高汽车环境舒适度

舒适性在人们选择汽车的决定性方面占比越来越重,而汽车乘员舱环境的舒适性是指为乘员提供舒适愉快便利的乘坐环境与条件,包括良好的平顺性、车内的低噪声、适宜的空气环境以及良好的驾驶操作性能。 舒适性 经济性 安全性、动力性 典型的乘员舱热舒适性模…

laravel的队列的使用

laravel队列 laravel的特性:laravel队列可以基于不同的后台存储服务提供统一的api,后台存储服务包括 Redis MySQL等。队列实现了业务解耦,异步处理,错误重试的功能。比如调用第三方api,无法保证api的可靠性&#xff0…

Transformer 与传统模型Informer

Transformer 与传统模型:Informer 如何改变时间序列预测的规则 Transformers 是那些聪明的注意力构建者,它们在机器学习的各个领域掀起了波澜。但在时间序列预测领域,它们才真正大显身手。你可能会问,为什么?想象一下,有一个水晶球,它不仅能看到未来,还能理解导致未来的…

TCP协议 配合 Wireshark 分析数据

在TCP连接中,无论是客户端还是服务端,都有可能成为发送端或接收端,这是因为TCP是一个全双工协议,允许数据在同一连接中双向流动 客户端(Client):通常是指主动发起连接请求的一方。例如&#xf…

宠物空气净化器有用吗?为什么养宠家庭要买宠物空气净化器?

身为一个鼻炎患者,却喜欢猫咪,所以毅然决然的养了两只宠物,而且还是长毛猫,不要问为什么鼻炎还买两只猫咪,因为怕一只猫咪孤单,所以养了两只。对于很多人来说,猫咪就像焦虑不安时的精神搭子&…