有没有办法创建一个转储文件,其中包含索引的所有数据及其设置和映射?
与mongoDB类似的方式mongodump 或者在Solr its data folder is copied中到备份位置。
干杯!
答案 0 :(得分:36)
这是我们为此目的而努力的新工具https://github.com/taskrabbit/elasticsearch-dump。您可以将索引导出/导出JSON文件,或从一个群集导出到另一个群集。
答案 1 :(得分:34)
Elasticsearch现在开箱即用:
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-snapshots.html
答案 2 :(得分:10)
ElasticSearch本身提供了一种创建数据备份和恢复的方法。执行此操作的简单命令是:
CURL -XPUT 'localhost:9200/_snapshot/<backup_folder name>/<backupname>' -d '{
"indices": "<index_name>",
"ignore_unavailable": true,
"include_global_state": false
}'
现在,如何创建这个文件夹,如何在ElasticSearch配置中包含这个文件夹路径,以便它可用于ElasticSearch,恢复方法,可以很好地解释here。要查看其实用的模拟冲浪here。
答案 3 :(得分:6)
我们可以使用elasticdump进行备份并还原它,我们可以将数据从一个服务器/群集移动到另一服务器/群集。
1。使用elasticdump
将一个索引数据从一个服务器/群集移动到另一个服务器/群集的命令。
# Copy an index from production to staging with analyzer and mapping:
elasticdump \
--input=http://production.es.com:9200/my_index \
--output=http://staging.es.com:9200/my_index \
--type=analyzer
elasticdump \
--input=http://production.es.com:9200/my_index \
--output=http://staging.es.com:9200/my_index \
--type=mapping
elasticdump \
--input=http://production.es.com:9200/my_index \
--output=http://staging.es.com:9200/my_index \
--type=data
2。使用multielasticdump
将所有索引数据从一个服务器/群集移动到另一个服务器/群集的命令。
备份
multielasticdump \
--direction=dump \
--match='^.*$' \
--limit=10000 \
--input=http://production.es.com:9200 \
--output=/tmp
还原
multielasticdump \
--direction=load \
--match='^.*$' \
--limit=10000 \
--input=/tmp \
--output=http://staging.es.com:9200
注意:
如果--direction是转储(默认设置),则–input必须是ElasticSearch服务器基本位置的URL(即http://localhost:9200),而--output必须是目录。每个匹配的索引都会创建一个数据,映射和分析器文件。
要加载从multi-elasticsearch转储的文件,应将--direction设置为load,--input必须是multielasticsearch转储的目录,而--output必须是Elasticsearch服务器URL。< / p>
第二条命令将settings
,mappings
,template
和data
本身作为JSON文件备份。
--limit
不能超过10000
,否则会产生异常。
答案 4 :(得分:2)
数据本身是一个或多个lucene索引,因为您可以有多个分片。您还需要备份的是群集状态,其中包含有关群集的所有类型的信息,可用的索引,它们的映射,它们由它们组成的碎片等。
虽然它都在data
目录中,但您可以复制它。它的结构非常直观。在复制之前,最好禁用自动刷新(为了备份索引的一致视图并避免在复制文件时对其进行写入),请发出手动刷新,禁用分配。请记住从所有节点复制目录。
此外,下一个主要版本的elasticsearch将提供一个新的快照/恢复API,允许您执行增量快照并通过api恢复它们。以下是相关的github问题:https://github.com/elasticsearch/elasticsearch/issues/3826。
答案 5 :(得分:1)
对于您的情况,弹性转储是完美的答案。
首先,您需要下载映射,然后下载索引
# Install the elasticdump
npm install elasticdump -g
# Dump the mapping
elasticdump --input=http://<your_es_server_ip>:9200/index --output=es_mapping.json --type=mapping
# Dump the data
elasticdump --input=http://<your_es_server_ip>:9200/index --output=es_index.json --type=data
如果要将数据转储到任何服务器上,建议您通过docker安装esdump。您可以从该网站Blog Link
获取更多信息答案 6 :(得分:0)
您还可以通过http请求以JSON格式转储elasticsearch数据:
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html
CURL -XPOST 'https://ES/INDEX/_search?scroll=10m'
CURL -XPOST 'https://ES/_search/scroll' -d '{"scroll": "10m", "scroll_id": "ID"}'
答案 7 :(得分:0)
要将所有文档从ElasticSearch导出到JSON,可以使用esbackupexporter工具。它适用于索引快照。它以带有快照(S3,Azure blob或文件目录)的容器作为输入,每天每个索引输出一个或几个压缩的JSON文件。导出历史快照时非常方便。要导出热索引数据,您可能需要先制作快照(请参见上面的答案)。