
elasticdump/elasticsearch-dumpElasticdump 是一款用于迁移和保存 Elasticsearch 及 OpenSearch 索引的工具。它支持在不同 Elasticsearch/OpenSearch 实例之间传输数据,或备份索引至文件、对象存储(如 AWS S3、MinIO)等目标位置。该工具可灵活处理索引的映射(mapping)、分析器(analyzer)、数据(data)等多种类型,并提供数据过滤、分片、加密等高级功能,适用于数据备份、跨环境迁移、数据导出等场景。
--searchBody 指定查询条件,仅导出符合条件的数据;支持搜索模板(Search Template)。multielasticdump 工具批量迁移多个索引。需先安装 Node.js(v10.0.0+),通过 npm 安装:
bash# 本地安装 npm install elasticdump ./bin/elasticdump # 全局安装 npm install -g elasticdump elasticdump
bashdocker pull elasticdump/elasticsearch-dump
bashdocker run --rm -ti elasticdump/elasticsearch-dump [OPTIONS]
--rm:退出后删除容器。-ti:交互式终端,便于查看日志。-v /本地目录:/容器内目录)。迁移索引的映射、分析器和数据:
bash# 迁移分析器 docker run --rm -ti elasticdump/elasticsearch-dump \ --input=[***] \ --output=[***] \ --type=analyzer # 迁移映射 docker run --rm -ti elasticdump/elasticsearch-dump \ --input=[***] \ --output=[***] \ --type=mapping # 迁移数据 docker run --rm -ti elasticdump/elasticsearch-dump \ --input=[***] \ --output=[***] \ --type=data
将索引映射和数据备份至宿主机 /data 目录(需挂载卷):
bash# 备份映射 docker run --rm -ti -v /data:/tmp elasticdump/elasticsearch-dump \ --input=[***] \ --output=/tmp/my_index_mapping.json \ --type=mapping # 备份数据(启用 GZIP 压缩) docker run --rm -ti -v /data:/tmp elasticdump/elasticsearch-dump \ --input=[***] \ --output=/tmp/my_index_data.json.gz \ --type=data \ --fsCompress
导出 username: admin 的记录至文件:
bashdocker run --rm -ti -v /data:/tmp elasticdump/elasticsearch-dump \ --input=[***] \ --output=/tmp/admin_data.json \ --type=data \ --searchBody='{"query":{"term":{"username":"admin"}}}'
若查询条件复杂,可将 JSON 保存至文件(如
/data/search.json),通过--searchBody=@/tmp/search.json引用。
bashdocker run --rm -ti elasticdump/elasticsearch-dump \ --s3AccessKeyId "AKIAXXX" \ --s3SecretAccessKey "secret" \ --input "s3://my-bucket/backup/my_index_data.json" \ --output=[***] \ --type=data
导入 CSV 文件(跳过首行标题,使用分号分隔):
bashdocker run --rm -ti -v /data:/tmp elasticdump/elasticsearch-dump \ --input "csv:///tmp/data.csv" \ --output=[***] \ --csvSkipRows 1 \ --csvDelimiter ";"
若 Elasticsearch 未部署在根路径(如 [***]),需显式指定索引名:
bashdocker run --rm -ti elasticdump/elasticsearch-dump \ --input=[***] \ --input-index=my_index \ --output=[***] \ --output-index=my_index_backup \ --type=data
若需访问宿主机上的 Elasticsearch(localhost:9200),需使用主机网络:
bashdocker run --rm -ti --net=host elasticdump/elasticsearch-dump \ --input=[***] \ --output=http://localhost:9200/my_index \ --type=data
Elasticdump 生成的文件为行分隔 JSON(Line-Delimited JSON),即每行是一个独立的 JSON 对象,而非整体 JSON 数组。此格式支持流式处理,避免内存溢出。示例:
json{"_index":"my_index","_type":"_doc","_id":"1","_source":{"name":"test1"}} {"_index":"my_index","_type":"_doc","_id":"2","_source":{"name":"test2"}}
可通过以下命令解析:
bashwhile read LINE; do jq . <<< "${LINE}"; done < dump.json
| 参数 | 默认值 | 描述 |
|---|---|---|
--input | 无(必填) | 输入源(ES 地址、文件路径、S3 URL 等,如 [***])。 |
--output | 无(必填) | 输出目标(格式同 --input)。 |
--input-index | all | 输入索引名(含类型,如 my_index/_doc)。 |
--output-index | all | 输出索引名。 |
--type | data | 迁移数据类型:settings/analyzer/mapping/data/alias/template 等。 |
| 参数 | 默认值 | 描述 |
|---|---|---|
--limit | 100 | 批量操作的对象数量(近似值)。 |
--size | -1 | 最大迁移对象数(-1 表示无限制)。 |
--searchBody | 匹配所有文档 | 过滤查询 JSON(如 {"query":{"match_all":{}}}),支持 @file 引用文件。 |
--searchWithTemplate | false | 启用搜索模板(需 --searchBody 包含 id 和 params)。 |
--sourceOnly | false | 仅输出 _source 字段内容(默认包含 _index/_id 等元数据)。 |
--delete | false | 迁移后删除输入源文档(不删除索引)。 |
| 参数 | 默认值 | 描述 |
|---|---|---|
--concurrency | 1 | 并发请求数上限。 |
--scrollTime | 10m | 滚动查询(scroll)结果在节点保留时间(如 5m、1h)。 |
--timeout | 无 | 请求超时时间(毫秒)。 |
--retryAttempts | 0 | 网络错误重试次数(支持 ECONNRESET/ETIMEDOUT 等错误)。 |
--retryDelay | 5000 | 重试间隔(毫秒)。 |
| 参数 | 默认值 | 描述 |
|---|---|---|
--fileSize | 无 | 文件分割大小(如 10mb、1gb)。 |
--maxRows | 无 | 文件分割行数。 |
--fsCompress | false | 启用文件 GZIP 压缩/解压。 |
--csvDelimiter | , | CSV 文件分隔符(如 ;、\t)。 |
--csvSkipRows | 0 | CSV 跳过行数(不含标题行)。 |
| 参数 | 默认值 | 描述 |
|---|---|---|
--s3AccessKeyId | 无 | AWS/S3 访问密钥 ID。 |
--s3SecretAccessKey | 无 | AWS/S3 密钥。 |
--s3Region | 自动推断 | S3 区域(如 us-east-1)。 |
--s3Endpoint | 无 | S3 兼容服务端点(如 MinIO:[***])。 |
--s3ForcePathStyle | false | 强制使用路径风格 URL(如 s3.amazonaws.com/bucket/key)。 |
--s3ServerSideEncryption | false | 启用 S3 服务端加密。 |
| 参数 | 默认值 | 描述 |
|---|---|---|
--tlsAuth | false | 启用 TLS 客户端认证。 |
--cert | 无 | TLS 客户端证书文件路径。 |
--key | 无 | TLS 客户端密钥文件路径。 |
--headers | {"User-Agent": "elasticdump"} | 自定义 HTTP 头(如代理认证)。 |
bulk 选项,多索引迁移需使用 multielasticdump。s3Bucket/s3RecordKey,需使用 S3 URL(如 s3://bucket/key)。升级版本前建议参考 官方 release 说明,避免数据格式或功能兼容性问题。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务