--- title: "恢复快照" date: 2026-01-19 lastmod: 2026-01-19 description: "介绍如何在 Easysearch 中从快照恢复数据到集群。" tags: ["快照", "恢复", "数据恢复"] summary: "此 API 用于从快照恢复数据到集群。 API # POST /_snapshot/{repository}/{snapshot}/_restore API 的作用 # 从指定的快照中恢复数据到集群。恢复操作可以: 恢复全部索引:恢复快照中的所有索引 恢复部分索引:只恢复指定的索引 重命名索引:恢复时重命名索引 修改设置:恢复时修改索引设置 全局状态:恢复全局集群状态 API 的参数 # 路由参数 # 参数 类型 是否必需 描述 repository string 必需 快照仓库名称 snapshot string 必需 快照名称 查询字符串参数 # 参数 类型 是否必需 默认值 描述 master_timeout time 可选 30s 等待主节点响应的超时时间 wait_for_completion boolean 可选 false 是否等待恢复操作完成 请求体参数 # 参数 类型 是否必需 默认值 描述 indices array 可选 [] 要恢复的索引列表" --- 此 API 用于从快照恢复数据到集群。 ## API ``` POST /_snapshot/{repository}/{snapshot}/_restore ``` ## API 的作用 从指定的快照中恢复数据到集群。恢复操作可以: - **恢复全部索引**:恢复快照中的所有索引 - **恢复部分索引**:只恢复指定的索引 - **重命名索引**:恢复时重命名索引 - **修改设置**:恢复时修改索引设置 - **全局状态**:恢复全局集群状态 ## API 的参数 ### 路由参数 | 参数 | 类型 | 是否必需 | 描述 | |------|------|----------|------| | `repository` | string | 必需 | 快照仓库名称 | | `snapshot` | string | 必需 | 快照名称 | ### 查询字符串参数 | 参数 | 类型 | 是否必需 | 默认值 | 描述 | |------|------|----------|--------|------| | `master_timeout` | time | 可选 | 30s | 等待主节点响应的超时时间 | | `wait_for_completion` | boolean | 可选 | false | 是否等待恢复操作完成 | ### 请求体参数 | 参数 | 类型 | 是否必需 | 默认值 | 描述 | |------|------|----------|--------|------| | `indices` | array | 可选 | [] | 要恢复的索引列表
支持多索引语法
`+test*`:包含匹配的索引
`-test42`:排除指定索引 | | `partial` | boolean | 可选 | false | 是否允许部分恢复
即使某些分片失败也继续 | | `include_global_state` | boolean | 可选 | false | 是否恢复全局集群状态
包括模板、持久化设置等 | | `include_aliases` | boolean | 可选 | true | 是否恢复索引别名 | | `rename_pattern` | string | 可选 | null | 恢复时的重命名模式
正则表达式模式 | | `rename_replacement` | string | 可选 | null | 重命名替换模式 | | `index_settings` | object | 可选 | {} | 所有被恢复索引的设置 | | `ignore_index_settings` | array | 可选 | [] | 恢复时要忽略的索引设置 | | `storage_type` | string | 可选 | local | 存储类型
可选值:`local`, `remote_snapshot` | ## 请求示例 ### 恢复所有索引 ```bash POST /_snapshot/my-repo/snapshot1/_restore ``` ### 恢复指定索引 ```json POST /_snapshot/my-repo/snapshot1/_restore { "indices": ["index1", "index2", "index3"] } ``` ### 使用通配符恢复索引 ```json POST /_snapshot/my-repo/snapshot1/_restore { "indices": "logs-*", "ignore_unavailable": true } ``` ### 恢复时重命名索引 ```json POST /_snapshot/my-repo/snapshot1/_restore { "indices": "old_index_*", "rename_pattern": "old_index_(.+)", "rename_replacement": "restored_index_$1" } ``` ### 恢复并包含全局状态 ```json POST /_snapshot/my-repo/snapshot1/_restore { "indices": "*", "include_global_state": true } ``` ### 恢复并修改索引设置 ```json POST /_snapshot/my-repo/snapshot1/_restore { "indices": ["index1", "index2"], "index_settings": { "index.number_of_replicas": 2, "index.refresh_interval": "5s" } } ``` ### 忽略某些索引设置 ```json POST /_snapshot/my-repo/snapshot1/_restore { "indices": ["index1"], "ignore_index_settings": ["index.lifecycle.name", "index.routing.allocation.include._tier_preference"] } ``` ### 等待恢复完成 ```bash POST /_snapshot/my-repo/snapshot1/_restore?wait_for_completion=true ``` ## 响应示例 ### 成功响应 ```json { "accepted": true } ``` ### 等待完成的响应 ```json { "snapshot": { "snapshot": "snapshot1", "repository": "my-repo", "indices": ["index1", "index2", "index3"] }, "shards": { "total": 9, "successful": 9, "failed": 0 } } ``` ### 错误响应 - 索引已存在 ```json { "error": { "root_cause": [ { "type": "snapshot_restore_exception", "reason": "[my-repo:snapshot1] cannot restore index [index1] because it's open" } ], "type": "snapshot_restore_exception", "reason": "[my-repo:snapshot1] cannot restore index [index1] because it's open" }, "status": 500 } ``` ## 索引重命名说明 使用 `rename_pattern` 和 `rename_replacement` 可以在恢复时重命名索引: ```json { "rename_pattern": "old_(.+)", "rename_replacement": "new_$1" } ``` **示例**: - `old_index1` → `new_index1` - `old_index2` → `new_index2` ## 恢复冲突处理 如果索引已存在,恢复会失败。可以: 1. **删除现有索引**:先删除现有索引再恢复 2. **使用不同名称**:通过重命名使用新名称 3. **部分恢复**:使用 `partial=true` 允许部分失败 ## 使用场景 1. **灾难恢复**:从备份中恢复整个集群 2. **数据迁移**:将数据从一个集群迁移到另一个 3. **环境复制**:复制生产数据到测试环境 4. **版本回滚**:将索引回滚到之前的状态 ## 注意事项 1. 此 API 只支持 POST 方法 2. 恢复的索引不能已存在(除非关闭) 3. 恢复全局状态可能覆盖现有配置 4. 大索引恢复可能需要较长时间 5. 恢复操作会占用网络和磁盘资源 ## 最佳实践 1. **先测试**:在测试环境先验证恢复流程 2. **监控进度**:使用恢复状态 API 监控进度 3. **分批恢复**:大量索引可以分批恢复 4. **带宽管理**:设置合理的带宽限制 5. **验证数据**:恢复后验证数据完整性 ## 相关文档 - [创建快照](./create-snapshot.md) - [删除快照](./delete-snapshot.md) - [查询快照信息](./get-snapshot-info.md)