📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

为什么这个错误发生 #

snapshot_missing_exception 表示请求的快照在仓库中不存在。

这个错误可能由以下原因引起:

  1. 快照名称拼写错误:请求中的快照名称输入错误
  2. 快照被删除:快照已被删除
  3. 仓库名称错误:快照存在于其他仓库中
  4. 快照未完成:快照创建还在进行中
  5. 大小写不匹配:快照名称区分大小写
  6. 仓库位置变更:仓库位置变更后快照不可用

如何修复这个错误 #

1. 列出所有快照 #

# 查看仓库中的所有快照
GET /_snapshot/<repository>/_all

# 使用通配符查询
GET /_snapshot/<repository>/snap-*?verbose

2. 验证快照名称 #

# 检查快照是否存在
GET /_snapshot/<repository>/<snapshot-name>

# 列出所有仓库和快照
GET /_cat/snapshots?v

3. 查看快照状态 #

# 查看正在进行的快照
GET /_snapshot/<repository>/_status

# 检查快照是否完成
GET /_snapshot/<repository>/<snapshot-name>?verbose

4. 使用正确的仓库名称 #

# 列出所有仓库
GET /_snapshot?verbose

# 在正确的仓库中查找快照
GET /_snapshot/<correct_repository>/_all

5. 等待快照完成 #

# 如果快照正在进行,等待完成
GET /_snapshot/<repository>/<snapshot-name>?wait_for_completion=true

6. 创建新快照 #

# 创建新的快照
PUT /_snapshot/<repository>/<new-snapshot-name>
{
  "indices": "<index>",
  "wait_for_completion": true
}

7. 从其他快照恢复 #

# 如果原快照不存在,使用其他可用的快照
POST /_snapshot/<repository>/<available-snapshot>/_restore
{
  "indices": "<index>"
}

8. 检查快照历史 #

# 查看已删除的快照信息
# 需要检查日志或其他记录
grep "snapshot" /path/to/easysearch/logs/easysearch.log | grep -i "delete"

9. 检查 SLM 策略 #

# 查看快照生命周期策略
GET /_slm/policy/*?verbose

# 查看最近的快照
GET /_slm/status

10. 验证仓库完整性 #

# 验证仓库
POST /_snapshot/<repository>/_verify

# 检查仓库文件列表
GET /_snapshot/<repository>/_all?verbose

预防措施 #

  • 使用有意义的快照命名规范
  • 在删除快照前确认不再需要
  • 记录重要快照的名称和日期
  • 使用 SLM 自动化快照管理
  • 定期验证快照完整性
  • 保留多个版本的快照
  • 记录快照对应的索引状态
  • 在删除快照前进行验证