使用elasticsearch进行开发,生产环境不能改动,可能需要将数据从生产环境复制到测试环境。

elasticdump是实现这一功能的理想工具,可通过简单几行命令,即完成数据的复制迁移。

这里尝试基于docker版本的elasticsearch,验证elasticdump迁移复制数据的功能。

1 安装elasticdump

这里假设使用conda环境,先安装npm工具nodejs,然后安装elasticdump

conda install conda-forge::nodejs

npm install -g elasticdump

2 测试elasticdump

2.1 elasticsearch创建

采用docker创建elasticsearch,版本为8.11.3,启动命令如下所示。

为简化操作关闭安全验证,具体为xpack.security.enabled=false 。

这种操作通常应用于内部系统或开发测试环境。

docker run --name es01 -p 9200:9200 -p 8300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms1G -Xmx1G" \
-e xpack.security.enabled=false \
-d docker.elastic.co/elasticsearch/elasticsearch:8.11.3

es启动完成后,可通过以下命令直接验证。

curl http://localhost:9200/

2.2 创建索引

创建index,名称为index_name

curl -XPUT "http://localhost:9200/index_name"

2.3 导出数据

从现有源es dump索引数据,包括mapping数据和data数据。

假设现有es未设置ca证书、用户名、密码。

elasticdump \
  --input='http://es_host:es_port/index_name' \
  --output=/path/to/index_mapping.json \
  --type=mapping

elasticdump \
  --input='http://es_host:es_port/index_name \
  --output= /path/to/index_data.json  \
  --type=data

2.4 导入数据

将之前导出的源es索引数据,导入本地创建的es。

命令如下

elasticdump \
  --input=/path/to/index_mapping.json \
  --output=http://localhost:9200/index_name \
  --type=mapping


elasticdump \
  --input=/path/to/index_data.json  \
  --output=http://localhost:9200/index_name \
  --type=data

输出示例如下

Tue, 04 Nov 2025 10:09:00 GMT | starting dump
Tue, 04 Nov 2025 10:09:00 GMT | got 100 objects from source file (offset: 0)
Tue, 04 Nov 2025 10:09:00 GMT | got 100 objects from source file (offset: 100)
......
Tue, 04 Nov 2025 10:09:03 GMT | Total Writes: xxxx
Tue, 04 Nov 2025 10:09:03 GMT | dump complete

3 docker elasticdump

由于glibc_2.18依赖异常关系,系统很有可能不能正常安装elasticdump

node: /lib64/libc.so.6: version `GLIBC_2.18' not found (required by /lib64/libstdc++.so.6)

这时可以选择docker版本的elasticdump。

3.1 安装

安装docker版本的elasticdump

docker pull elasticdump/elasticsearch-dump

3.2 运行

直接通过镜像运行数据导入。

1)-v /path/to/es_dump_dir/:/es_dump

/path/to/es_dump_dir表示在宿主机待导入es index数据的目录

es_dump表示elasticsearch-dump容器中对应的es index数据的目录

2)--input=/es_dump/index_mapping.json,

/es_dump/index_mapping.json表示容器中对应导入数据的路径。

docker run --rm -ti -v /path/to/es_dump_dir/:/es_dump  elasticdump/elasticsearch-dump \
--input=/es_dump/index_mapping.json  \
--output=http://host_ip:9200/index_name \
--type=mapping

docker run --rm -ti -v /path/to/es_dump_dir/:/es_dump  elasticdump/elasticsearch-dump   
--input='/es_dump/index_data.json'    
--output='http://host_ip:9200/index_name'   
--type=data

reference

---

elasticsearch-dump

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

【ElasticSearch】elasticdump 导入/导出数据及常见报错

https://blog.csdn.net/zzddada/article/details/121744016

Mac本地docker安装Kibana+ElasticSearch

https://blog.csdn.net/liliang199/article/details/151581138

python访问基于docker搭建的elasticsearch

https://blog.csdn.net/liliang199/article/details/151586083

Elasticsearch备份与还原:使用elasticdump

https://cloud.tencent.com/developer/article/2360111

Elasticsearch8关闭安全认证功能

https://juejin.cn/post/7203637198120878137

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐