
Elasticdump 是一款用于迁移和保存 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 /本地目录:/容器内目录)。1.1 迁移索引(生产环境到 Staging)
迁移索引的映射、分析器和数据:
bash# 迁移分析器 docker run --rm -ti elasticdump/elasticsearch-dump \ --input=http://production.es:9200/my_index \ --output=http://staging.es:9200/my_index \ --type=analyzer # 迁移映射 docker run --rm -ti elasticdump/elasticsearch-dump \ --input=http://production.es:9200/my_index \ --output=http://staging.es:9200/my_index \ --type=mapping # 迁移数据 docker run --rm -ti elasticdump/elasticsearch-dump \ --input=http://production.es:9200/my_index \ --output=http://staging.es:9200/my_index \ --type=data
1.2 备份索引到本地文件
将索引映射和数据备份至宿主机 /data 目录(需挂载卷):
bash# 备份映射 docker run --rm -ti -v /data:/tmp elasticdump/elasticsearch-dump \ --input=http://production.es:9200/my_index \ --output=/tmp/my_index_mapping.json \ --type=mapping # 备份数据(启用 GZIP 压缩) docker run --rm -ti -v /data:/tmp elasticdump/elasticsearch-dump \ --input=http://production.es:9200/my_index \ --output=/tmp/my_index_data.json.gz \ --type=data \ --fsCompress
1.3 基于查询导出数据
导出 username: admin 的记录至文件:
bashdocker run --rm -ti -v /data:/tmp elasticdump/elasticsearch-dump \ --input=http://production.es:9200/my_index \ --output=/tmp/admin_data.json \ --type=data \ --searchBody='{"query":{"term":{"username":"admin"}}}'
若查询条件复杂,可将 JSON 保存至文件(如
/data/search.json),通过--searchBody=@/tmp/search.json引用。
1.4 从 S3 导入数据至 Elasticsearch
bashdocker run --rm -ti elasticdump/elasticsearch-dump \ --s3AccessKeyId "AKIAXXX" \ --s3SecretAccessKey "secret" \ --input "s3://my-bucket/backup/my_index_data.json" \ --output=http://production.es:9200/my_index \ --type=data
1.5 CSV 文件导入 Elasticsearch
导入 CSV 文件(跳过首行标题,使用分号分隔):
bashdocker run --rm -ti -v /data:/tmp elasticdump/elasticsearch-dump \ --input "csv:///tmp/data.csv" \ --output=http://production.es:9200/my_index \ --csvSkipRows 1 \ --csvDelimiter ";"
若 Elasticsearch 未部署在根路径(如 http://es:9200/api/search),需显式指定索引名:
bashdocker run --rm -ti elasticdump/elasticsearch-dump \ --input=http://es:9200/api/search \ --input-index=my_index \ --output=http://es:9200/api/search \ --output-index=my_index_backup \ --type=data
若需访问宿主机上的 Elasticsearch(localhost:9200),需使用主机网络:
bashdocker run --rm -ti --net=host elasticdump/elasticsearch-dump \ --input=http://staging.es:9200/my_index \ --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 等,如 http://es:9200/index)。 |
--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:https://minio.example.com)。 |
--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)。升级版本前建议参考 https://github.com/elasticsearch-dump/elasticsearch-dump/releases%EF%BC%8C%E9%81%BF%E5%85%8D%E6%95%B0%E6%8D%AE%E6%A0%BC%E5%BC%8F%E6%88%96%E5%8A%9F%E8%83%BD%E5%85%BC%E5%AE%B9%E6%80%A7%E9%97%AE%E9%A2%98%E3%80%82
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务