Windows下ElasticSearch 6.2.2备份无法在Linux 6.2.3恢复问题排查
Elasticsearch跨Windows/Linux恢复快照提示“snapshot does not exist”的解决方案
我之前处理过类似的跨系统Elasticsearch快照恢复问题,你的情况主要是几个容易被忽略的细节没处理到位,下面一步步帮你排查解决:
1. 核心问题:波浪号(~)无法被Elasticsearch解析
你在Linux端注册快照仓库时用了~/elasticsearch-6.2.3/backup这个路径,但Elasticsearch的运行进程不会识别shell的波浪号简写,必须使用绝对路径(比如/home/your_username/elasticsearch-6.2.3/backup,把your_username替换成你的实际用户名)。
2. 必须配置允许的仓库路径
默认情况下,Elasticsearch会限制可作为快照仓库的路径,你需要先修改elasticsearch.yml配置文件:
# 添加允许的快照仓库路径,用绝对路径 path.repo: ["/home/your_username/elasticsearch-6.2.3/backup"]
修改完成后,重启Elasticsearch服务让配置生效。
3. 修复目录权限问题
从Windows复制到Linux的备份文件,权限可能不符合Elasticsearch进程的要求(通常ES用elasticsearch用户运行),执行以下命令修正权限:
# 替换为你的实际备份绝对路径 chown -R elasticsearch:elasticsearch /home/your_username/elasticsearch-6.2.3/backup chmod -R 755 /home/your_username/elasticsearch-6.2.3/backup
4. 重新注册仓库并验证
现在用绝对路径重新注册快照仓库:
curl -X PUT "localhost:9200/_snapshot/my_backup" -H 'Content-Type: application/json' -d'{ "type": "fs", "settings": { "location": "/home/your_username/elasticsearch-6.2.3/backup", "compress": true } }'
注册完成后,检查是否能识别快照:
curl -X GET "localhost:9200/_snapshot/my_backup/_all"
这时候你应该能看到名为bcp的快照信息了。
5. 执行恢复命令
最后执行恢复操作:
curl -X POST "localhost:9200/_snapshot/my_backup/bcp/_restore?pretty"
额外验证点
- 确认备份目录结构完整:Linux端的backup目录下应该包含
index-0文件夹、metadata-xxxx.dat、snapshot-xxxx.dat等文件,和Windows端的备份目录内容完全一致; - 版本兼容性:6.2.2到6.2.3属于小版本升级,确实兼容,这部分你没问题。
内容的提问来源于stack exchange,提问作者Vaasha
相关产品推荐
相关产品推荐

