转储Elasticsearch的所有文档

时间:2013-10-08 08:47:23

标签: elasticsearch

有没有办法创建一个转储文件,其中包含索引的所有数据及其设置和映射?

与mongoDB类似的方式mongodump 或者在Solr its data folder is copied中到备份位置。

干杯!

8 个答案:

答案 0 :(得分:36)

这是我们为此目的而努力的新工具https://github.com/taskrabbit/elasticsearch-dump。您可以将索引导出/导出JSON文件,或从一个群集导出到另一个群集。

答案 1 :(得分:34)

答案 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>

  • 第二条命令将settingsmappingstemplatedata本身作为JSON文件备份。

  • --limit不能超过10000,否则会产生异常。

  • 获取更多详细信息here

答案 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文件。导出历史快照时非常方便。要导出热索引数据,您可能需要先制作快照(请参见上面的答案)。