首页/数据/NoSQL 速查/从快照恢复 _restore
Elasticsearch89 条

从快照恢复 _restore

恢复快照时可指定索引与重命名规则,恢复到新名字避免覆盖线上数据;目标索引必须不存在或处于关闭状态,升级前可先恢复到临时索引验证。

NoSQL 速查数据更新于 2026-10-13

恢复快照要注意什么

恢复是把仓库里的快照写回成索引:可以挑选索引、重命名到新名字、只恢复部分分片。恢复的目标索引必须不存在,或者处于关闭状态,否则请求会被直接拒绝,所以「先恢复到临时索引验证、再用别名切换」在生产上更稳妥。

基本信息

接口POST /_snapshot/<repo>/<snapshot>/_restore
重命名rename_pattern 正则加 rename_replacement 分组引用,如 logs-(.+) 对应 restored-logs-$1
前置检查GET /_snapshot/<repo>/<snapshot> 看包含哪些索引、版本与分片数
异步执行加 wait_for_completion=false 立即返回,用 recovery 接口看进度
常用参数indices、include_aliases、ignore_unavailable、partial

典型使用场景

  • 误删数据后的定点恢复:只恢复某几个索引,不影响其他数据
  • 升级前验证:先恢复到临时索引,确认查询与聚合行为正常
  • 跨集群迁移:目标集群注册同一仓库后从快照恢复
  • 排查数据问题:恢复到临时索引后按条件检索原始记录
  • 恢复演练:测量恢复耗时,验证备份真的可用

恢复流程

恢复流程
# 1. 先看快照里有什么:索引、版本、分片数
GET /_snapshot/my_backup/snapshot_2024-07-01

# 2. 恢复并重命名,避免覆盖线上索引;异步执行立即返回
POST /_snapshot/my_backup/snapshot_2024-07-01/_restore?wait_for_completion=false
{
  "indices": "logs-2024.06",
  "ignore_unavailable": true,
  "include_aliases": false,
  "rename_pattern": "logs-(.+)",
  "rename_replacement": "restored-logs-$1"
}

# 3. 观察恢复进度
GET /_cat/recovery?v&active_only=true

# 4. 确认新索引可用后再切别名或删除旧索引
GET /_cat/indices/restored-logs-*?v

恢复参数与取舍

参数作用注意
indices限定要恢复的索引,支持通配名字写错且未开容错会直接失败
include_aliases是否一并恢复别名误恢复别名可能把流量引到临时索引
ignore_unavailable索引不存在时跳过而不报错批量恢复与演练时常用
rename_pattern 与 rename_replacement把快照里的索引恢复成新名字目标名已存在时同样会失败
partial允许恢复部分分片只在集群健康前提下使用,慎用
恢复到已存在的索引会直接失败;若必须覆盖原索引,可先关闭目标索引再执行同名恢复,但更安全的做法是恢复成新名字后用别名切换流量。

易错点

  • 跨大版本恢复存在限制,直接从旧快照恢复前应先落到临时索引验证搜索与聚合行为,避免影响线上服务
  • 恢复会触发大量分片分配与数据传输,与业务写入叠加时先临时降低恢复限速,防止节点 IO 被打满
  • 恢复时打开 include_aliases,别名可能被指到临时索引上,线上流量走向被意外改变
  • 为省事直接对线上索引名做覆盖式恢复,目标已存在会失败,先删旧索引再恢复又会造成数据空窗,风险都高于重命名恢复

数据来源与参考

  • Elasticsearch Guide: Restore snapshot API
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌