官方地址:

https://github.com/elasticsearch-dump/elasticsearch-dump

https://www.npmjs.com/package/elasticdump

安装

通过npm安装

# 安装
npm install elasticdump
# 全局安装
npm install elasticdump -g
# 运行
./elasticdump 

通过docker安装

docker pull elasticdump/elasticsearch-dump
docker run --rm elasticdump/elasticsearch-dump

使用

elasticdump工作原理是将input发送到outputinputoutput都可以是文件或者elasticsearch的URL
elasticdump --help
elasticdump: Import and export tools for elasticsearch
version: 6.65.3

Usage: elasticdump --input SOURCE --output DESTINATION [OPTIONS]

--input                # 源(必须的参数)
--input-index        # 源索引和类型
--output            # 目标(必须的参数)
--output-index        # 目标索引和类型
--overwrite            # 如果文件存在时则覆盖它
--limit                # 限流,对于文件流,限制每个操作移动多少个对象,限制是近似的值(默认:100)
--size                # 需要检索多少个对象(默认: -1 -> no limit)
--type                # 导出的类型(默认:data,选项:[settings, analyzer, data, mapping, alias, template, component_template,                             index_template])
--filterSystemTemplates    # 是否删除metrics-*-*和logs-*-*系统模板
--templateRegex        # 正则表达式用于在传输到output之前的过滤模板
--maxSockets        # 可以处理的http并发请求,默认5 [node <= v0.10.x] / Infinity [node >= v0.11.x]
--offset            # 偏移量,值为整数。表示希望从--input中要跳过的行数
--httpAuthFile        # 使用http认证时,需要指定以ini文件格式的凭据,文件格式为:
                    user=<username>
                    password=<password>
--support-big-int    # 支持大整数
--maxRows            # 按指定行数进行分割
--fileSize            # 按指定文件大小分割。通过文件大小分割,有助于缓解内存溢出,分割成多个小文件,在有需要时再进去合并
--s3ForcePathStyle    # 强制使用s3风格的URL路径样式

Elasticsearch

格式:{protocol}://{host}:{port}/{index}

例如:http://127.0.0.1:9200/my_Index

文件

格式:{FilePath}

例如:/tmp/dump.json

标准输入输出

格式:stdin/stdout

格式:$

使用示例

将elasticsearch数据导出到文件

# 导出mapping到文件
elasticdump \
  --input=http://192.168.8.1:9200/my_index \
  --output=/data/my_index_mapping.json \
  --type=mapping

# 导出analyzer到文件
elasticdump \
  --input=http://192.168.8.1:9200/my_index \
  --output=/data/my_index_analyzer.json \
  --type=analyzer

# 导出数据文件
elasticdump \
  --input=http://192.168.8.1:9200/my_index \
  --output=/data/my_index.json \
  --type=data

将elasticsearch导出到stdout并进行gzip压缩

# 导出mapping
elasticdump \
  --input=http://192.168.8.1:9200/my_index \
  --output=$ \
  --type=mapping \
  | gzip > my_index.mapping.json.gz
  
# 导出数据
elasticdump \
  --input=http://192.168.8.1:9200/my_index \
  --output=$ \
  --type=data \
  | gzip > my_index.mapping.json.gz

将elasticsearch导出到s3存储

# 导出数据
elasticdump \
  --s3AccessKeyId "${access_key_id}" \
  --s3SecretAccessKey "${access_key_secret}" \
  --input=http://192.168.8.1:9200/my_index \
  --output="s3://${bucket_name}/my_index.json" \
  --type=data
  
# 将数据从MINIO(兼容S3)导入到ES(使用S3 URL)
elasticdump \
  --s3AccessKeyId "${access_key_id}" \
  --s3SecretAccessKey "${access_key_secret}" \
  --s3ForcePathStyle true \
  --s3Endpoint https://production.minio.co \
  --input "s3://${bucket_name}/${file_name}.json" \
  --output=http://192.168.8.2:9200/my_index

MultiElasticDump

这个包还附带了一个multielasticdump的二进制文件,它是elasctidump的二次封装,它提供了有限的一些选项,它可以大多个索引之前同时运行elasticdump。它运行一个进程,然后fork出n个运行elasticdump的子进程(默认是CPU的数量)

使用

# multielasticdump选项
--parallel        # 线程数,默认为CPU核数
--direction        # 方向,这里指是要备份还是还原到服务器,参数可以是dump、load,默认值为dump
--match            # 用于过滤匹配需要备份的索引正则表达式,示例:匹配所有:^.*$ 匹配以huis-开头的: ^huis-.*$
--input            # 源,如果--direction是dump,则该参数必须是elasticsearch的url(例如:http://192.168.8.1:9200),并且--output必须为目录。如果                  # --direction是load,则该参数必须是multielasticdump指令备份的文件目录,--output则必须为elasticsearch的url
--output        # 目录,该参数应该配合--input使用,根据--direction的不同做相应改变
--ignoreType    # 忽略的备份类型,支持6个选项(data,mapping,analyzer,alias,settings,template),多个类型使用逗号隔开,默认忽略analyzer、alias
--includeType    # 允许备份的类型,支持6个选项(data,mapping,analyzer,alias,settings,template),多个类型使用逗号隔开

示例

# 导出所有elasticsearch索引及其它所有类型数据到/data/elasticsearch_bak目录
multielasticdump \
  --direction=dump \
  --parallel=10 \
  --match='^.*$' \
  --input=http://192.168.8.1:9200 \
  --output=/data/elasticsearch_bak


# 导出以huis-开头的索引数据,仅导出数据,忽略掉mapping,analyzer,alias,settings,template
multielasticdump \
  --direction=dump \
  --match='^huis-.*$' \
  --limit=10000 \
  --input=http://192.168.8.1:9200 \
  --ignoreType='mapping,analyzer,alias,settings,template' \
  --output=/data/elasticsearch_bak

# 
multielasticdump \
  --direction=dump \
  --parallel=10 \
  --limit=10000 \
  --match='^live_tms_order_info-(2020-1[1-2]|2021-0[1-3]).*$' \
  --input=http://10.65.10.72:9200 \
  --ignoreType='mapping,analyzer,alias,settings,template' \
  --output=/data/elastic_back/live_tms_order_info
  
# 导入备份文件到es
multielasticdump \
  --direction=load \
  --parallel=30 \
  --limit=10000 \
  --input=/usr/local/src/migration_es/gc-ga-user-minute-detail  \
  --output=http://es-cn-6ja20m9xh000alsb2.public.elasticsearch.aliyuncs.com:9200 \
  --ignoreType='mapping,analyzer,alias,settings,template' \
  --httpAuthFile=/usr/local/src/migration_es/sov.ini