崔少飞
发布于 2026-01-26 / 8 阅读
0
0

知识库备份

三个库

Mysql: 备份Minio 与 ES 的映射 、 知识库的配置信息

Minio: 备份用户上传的元文件

ES: 备份切片信息、提取的关键字、提取的提问等

数据库的备份

数据库中的对应关系

file

文件管理的层级树

document

document 与 知识库相关

file2document

file和知识库相关

knowledgebase

知识库配置信息

创建知识库现有knowledgebase,再上传文件

备份步骤:

  1. knowlwdgebase表中的 id 在document表中获取document的id,

  2. 使用document的id,在file2document中获取fileid

  3. 使用fileId获取这一个知识库的parent_id

  4. 持续使用parent_id 构建这个知识库的file层级数

还原的时候,就在数据库中插入上方的数据即可

Minio的备份

知识库的文件存储在minio中,可以使用mc命令进行备份

这个东西备份在本地的就是bucket里面的文件

步骤:

1.映射docker目录

2.使用mc起别名建立连接

mc alias set myminio http://localhost:9001 rag_flow infini_rag_flow

3.备份目标bucket

mc mirror myminio/0bc6e0c8fa6011f0af1e9a5ea770a6d5 /backup_minio/0bc6e0c8fa6011f0af1e9a5ea770a6d5

递归删除bucket中的文件

mc rm --recursive --force myminio/0bc6e0c8fa6011f0af1e9a5ea770a6d5/

删除bucket

mc rb --force myminio/0bc6e0c8fa6011f0af1e9a5ea770a6d5

4.恢复目标bucket

mc mirror /backup_minio/0bc6e0c8fa6011f0af1e9a5ea770a6d5 myminio/0bc6e0c8fa6011f0af1e9a5ea770a6d5

如果目标的bucket不存在,创建之后再进行恢复

创建bucket

mc mb myminio/0bc6e0c8fa6011f0af1e9a5ea770a6d5

切片的备份

知识库的分块及配置信息存储在es中,可以使用请求的方式进行备份

这个东西备份在本地备份的是es文件

步骤:

1.映射docker目录

这里将请求认证关闭了,后期任务中,这里要打开!并研究怎么做

2.注册一个本地的es仓库存储备份记录

PUT /_snapshot/my_local_backup

{
    "type": "fs",
    "settings": {
        "location": "/usr/share/elasticsearch/snapshots",
        "compress": true
    }
}

3.在主索引中创建子集索引

POST /_reindex

{
    "source": {
        "index": "ragflow_3a59ff0dfa5b11f0b85ad6461fecc38d",
        "_source": [
            "doc_id",
            "kb_id",
            "title_tks",
            "title_sm_tks",
            "content_ltks",
            "content_sm_ltks",
            "content_with_weight",
            "docnm_kwd",
            "create_time",
            "create_timestamp_flt",
            "page_num_int",
            "position_int",
            "top_int",
            "q_1024_vec",
            "question_kwd",
            "question_tks"
        ],
        "query": {
            "term": {
                "kb_id": "0bc6e0c8fa6011f0af1e9a5ea770a6d5"
            }
        }
    },
    "dest": {
        "index": "subset_index"
    }
}

4.将子索引备份到仓库

PUT /_snapshot/my_local_backup/snapshot_1

{
    "indices": "subset_index",
    "ignore_unavailable": true,
    "include_global_state": false
}

此时本地会有文件出现

其他命令:

删除主索引中对应的子索引

POST /ragflow_3a59ff0dfa5b11f0b85ad6461fecc38d/_delete_by_query

{
    "query": {
        "term": {
            "kb_id": "0bc6e0c8fa6011f0af1e9a5ea770a6d5"
        }
    }
}

删除索引

DELETE /索引名称

查看备份仓库中存在的索引

GET /_snapshot/my_local_backup/snapshot_1

5.从仓库中恢复子索引

POST /_snapshot/my_local_backup/snapshot_1/_restore

{
    "indices": "subset_index", // 索引名称
    "rename_pattern": "(.+)"
}

6.将子索引合并到主索引

POST /_reindex

{
    "source": {
        "index": "subset_index"
    },
    "dest": {
        "index": "ragflow_3a59ff0dfa5b11f0b85ad6461fecc38d",
        "op_type": "create"
    }
}

7.删除备份仓库中的索引

DELETE /_snapshot/my_local_backup/snapshot_1

遇到的问题

1.备份的时候,关于es认证的请求要怎么发送?

2.备份的进度要怎么获取?

3.备份的进度怎么推送?


评论