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

前言

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

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

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

一、Mi lvus-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 、Restfu l API 方式

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

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

备份(b ackup ):

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 、M ilvus - 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 、解压m ilvus-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。 ****bucketName**** ****和**** ****rootPath**** ****:****要根据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**** ****、ch**** ****eck**** ****配置初检查****** \[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为中的集合,此时会报出如下错误: ![](https://i-blog.csdnimg.cn/direct/8df3633f10f248b78a1d61c049ce3ab5.png) 图中标红部分就是我要备份iwen这个集合,但它属于另一个库(test),没有指定库名,备份报错。如果指明哪个库,会备份成功,如下所示: ![](https://i-blog.csdnimg.cn/direct/27af9330b386423481d0f96714067335.png) 备份完成之后,一定要查看一下图中标蓝部份,看看没有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 ![](https://i-blog.csdnimg.cn/direct/68cf702e18f5451690b3abc521af0370.png) 图中标红部分就是查看备份文件命令和生成的备份文件。 ****第**** ****2**** ****种方法:使用m**** ****inio 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。如下图所示: ![](https://i-blog.csdnimg.cn/direct/19886b0bca3048f19a319c476f6b9aa2.png) 登录进去之后,默认会打开备份文件浏览页,找到backup.yaml中backupBucketName对应的值。 ![](https://i-blog.csdnimg.cn/direct/819a7454f0134d17ab2c67d56828d338.png) 点击milvus-hello可以查看备份信息,找到backup.yaml中backupRootPath对应的值。 ![](https://i-blog.csdnimg.cn/direct/67d72e3b5e1d49259d4e905dafc16a2a.png) 点击mybackup可以查看该备份目录下所有的备份,找到自己备份时对备份文件命名的名称,点击进入。 ![](https://i-blog.csdnimg.cn/direct/905dbec6a0914698b251a3b5142ef87d.png) 图中标红部分,就是我刚才的备份文件,点击进去可以查看。 ![](https://i-blog.csdnimg.cn/direct/74cd090c7e2f4db6a22458af65ed2ebe.png) binlogs目录下存放的是备份数据,这里的数据文件是data类型。 meta目录下存放的是meta元数据,可以查看备份的信息,这里都是json格式的文件,大家可以下载下来进行查看。 ![](https://i-blog.csdnimg.cn/direct/d7584b21415147c9a48625473f17da72.png) 到此为止,备份数据和查看备份数据的方法已全部完成,接下来就是要对备份的数据进行恢复了。 ##### ******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进行删除或是重命名。大家可以根据自身的实际使用情况进行方法的选择。 如下图所示,是恢复数据的结果: ![](https://i-blog.csdnimg.cn/direct/4a76cfb971d64c7ba0e7033f6870046b.png) 一定要关注最后的结果是否是success和图中标蓝部分,有没有ERROR错误信息。恢复日志同样存在/iwen/milvus-backup/logs目录下。 这里为了看的方便直接,我这里使用的Attu图形工具查看的恢复情况。 大家也可以用自己写的Python程序进行新旧数据的对比,如果不想自己写,可以使用milvus-backup源码example中的verify_data.py进行数据对比。 但是要注意,如果想用milvus-backup源码example中的verify_data.py进行数据对比的话,一定要先看一下该程序内容,如:字段、库、collection、索引等相关信息是否和自己创建的一样。 Attu图形工具查看: ****原:**** ![](https://i-blog.csdnimg.cn/direct/297cf80714774e88ab67aa1b2fe1a262.png)![](https://i-blog.csdnimg.cn/direct/6d4495d98746453eb292c851825e118b.png) ****恢复后:**** ![](https://i-blog.csdnimg.cn/direct/191c3667cda9421aaf1e808793d27f21.png)![](https://i-blog.csdnimg.cn/direct/6cb74e8aceef474082b0b975176089a3.png) 从恢复的情况来看,字段、索引和数据量个数一样。但为什么状态不一样呢,原数据是"已加载",恢复的是"未加载",这是因为数据目前还在存在内存中,还没有落盘,落盘后,状态就变为"已加载"了,此时需要利用python代码把该数据从内存中进行落盘,也可以利用Attu这个图形工具,点击"未加载"进行数据落盘,在日常的工作中要使用python代码进行落盘操作,就是数据恢复完之后,要进行一次python代码落盘的操作。 ##### ******4.1.5**** ****、m**** ****ilvus-backup 0.4.21**** ****版本问题****** 如果大家使用的是milvus-backup 0.4.21版本,这个版本经过自己测试使用,在进行数据恢复时,无法正常进行数据恢复,如下图标红部分: ![](https://i-blog.csdnimg.cn/direct/25d9acb216e4480f8d21e87041bf22c6.png) 在进行数据恢复时,报出了ERROR的错误,从日志中发现,根据备份的binlogs中的文件进行数据插入时,无法找到对应的目录,经过分析查看,恢复把文件所在的目录ID合并成了一个,找不到文件造成。 真实文件目录结构,如下图所示: ![](https://i-blog.csdnimg.cn/direct/0dc1b84b4ef743bcad171afe24797268.png) 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、备份相关: ![](https://i-blog.csdnimg.cn/direct/a2032a4e100b4b7fb4f3bc7c6249b456.png) create:数据备份 list:查看所有备份文件 get_bakcup:按名称检索备份文件 delete:按名称删除备份文件 2、恢复相关: ![](https://i-blog.csdnimg.cn/direct/2016cfc936c84c429a214e94a1bfe532.png) restore:按备份文件名称进行数据恢复 get_restore:获取数据恢复状态信息 注:接口的"--data-raw"这个参数目前在curl的版本中已经没有该参数了,可以使用"-d"参数来代替。 如果要使用Restful API方式进行数据的备份与恢复,需要把milvus-backup以服务的方式进行启动才能使用,启动方法也在README.md帮助文档中。 启动方法如下: \[iwen@jina-milvus milvus-backup\]$ vi README.md 找到API server小节,如下图所示: ![](https://i-blog.csdnimg.cn/direct/ee4358fb688543098d7b9c45a8160a16.png) 如下所示启动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启动所在的主机地址。 如下图所示: ![](https://i-blog.csdnimg.cn/direct/4475e166d472414fb14c98220423c9c3.png) 大家想查看某一个接口内的详情信息的话,可以点击某一个接口查看即可,如想查看Backup中/create接口信息: ![](https://i-blog.csdnimg.cn/direct/dfcfb3ef37414499b9ba16791d382941.png) 如果还想查看更详细的接口参数信息,可以在milvus-backup的Swagger UI页的"Models"小组内找到自己想要了解的信息,如想了解backuppb.BackupInfo的相关详细信息,直接点击"backuppb.BackupInfo"功能模块即可。如下图所示: ### ![](https://i-blog.csdnimg.cn/direct/93991e9f2d2f41b8be3ddc6332bd526f.png)******六、源码安装m**** ****ilvus-backup****** 因milvus-backup是使用go语言开发,因此源码安装milvus-backup时,需要先安装go环境。 ##### ******6.1**** ****、g**** ****o**** ****环境安装配置****** ###### ******6.1.1**** ****、g**** ****o**** ****安装包下载****** go下载地址:[All releases - The Go Programming Language (google.cn)](https://golang.google.cn/dl/ "All releases - The Go Programming Language (google.cn)") 下面给大家简单介绍一下go的安装过程,供大家学习。可以根据自已环境选择适合自己的版本即可。 此处我选择的是图中标红的版本,如下图所示: ![](https://i-blog.csdnimg.cn/direct/e141979951a14ea78e5f73077bf0b6ec.png) ###### ******6.1.2**** ****、**** ****go**** ****安装****** 把下载好的的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**** ****、验证g**** ****o**** ****环境变量****** \[iwen@jina-milvus iwen\]$ go version go version go1.23.0 linux/amd64 到此为止go环境安装配置完成。 #### ******6.2**** ****、源码安装m**** ****ilvus-bakcup****** 大家可以参照4.1.1小节,下载自己milvus向量数据库版本对应的milvus-backup工具。 ##### ******6.2.1**** ****、解压**** ****m**** ****ilvus-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**** ****、编译安装m**** ****ilvus-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](https://milvus.io/docs/v2.3.x/milvus_backup_cli.md "Back up and Restore Data Using Commands Milvus v2.3.x documentation") zilliztech/milvus-backup:[https://github.com/zilliztech/milvus-backup/tree/main](https://github.com/zilliztech/milvus-backup/tree/main "https://github.com/zilliztech/milvus-backup/tree/main")

相关推荐
远方16092 小时前
33-Oracle Parallel 并行处理的选择和实践
数据库·oracle
Dnui_King2 小时前
OceanBase (DBA)一面面经
数据库·oceanbase·dba
kaixiang3002 小时前
sqli-labs靶场46-53关(综合)
数据库
陪我一起学编程3 小时前
关于ORM增删改查的总结——跨表
数据库·后端·python·django·restful
天空之城夢主3 小时前
PostgreSQL 初体验
数据库·postgresql
数据知道4 小时前
【系统分析师】2009年真题:综合知识-答案及详解
数据库·系统分析师·综合知识
Samesky0015 小时前
Oracle数据库学习笔记 - 创建、备份和恢复
数据库·学习·oracle
大千AI助手5 小时前
Python3安装MySQL-python踩坑实录:从报错到完美解决的实战指南
数据库·python·mysql·mysqlclient·mysql-python
无色海5 小时前
mysql 通用响应数据包详解
数据库
AA-代码批发V哥5 小时前
MySQL-DML语句深度解析与实战指南
数据库·mysql