一、环境准备

1、安装elasticdump

root权限下,终端中输入 

1

#  npm install elasticdump -g

-g表示全局可用,直接在终端输入 elasticdump --version,出现版本信息即表示安装成功,如下

1

2

#  elasticdump --version

7.1.1

二、常用的导入导出方法

导出索引的格式

#格式:elasticdump --input {protocol}://{account}:{password}@{host}:{port}/{index}  --output ./test_index.json

方法一:索引数据导出为文件

# 导出当前索引的Mapping结构
elasticdump \
  --input=http://es实例IP:9200/index_name/index_type \
  --output=/data/my_index_mapping.json \    # 存放目录
  --type=mapping 

# 导出当前索引下的所有真实数据
elasticdump \
  --input=http://es实例IP:9200/index_name/index_type \
  --output=/data/my_index.json \
  --type=data

 修改对应的模板信息,执行脚本,就可以将数据导出至output指定的文件目录内。

方法二:索引数据文件导入至索引

# 创建索引
$ curl -XPUT http:192.168.56.104:9200/index_name001

# Mapping 数据导入至索引
./bin/elasticdump \
  --input=/home/indexdata/roll_vote_mapping.json \ # 导入数据目录
  --output=http://es实例IP:9200/index_name001 \
  --type=mapping

# ES文档数据(真实数据)导入至索引
./bin/elasticdump \
  --input=/home/indexdata/roll_vote.json \ 
  --output=http://es实例IP:9200/index_name001 \
  --type=data

# ES到ES的导入
elasticdump \
--input=http://ip:9200/demo \
--output=http://127.0.0.1:9200/demo

修改对应的模板信息,执行脚本,就可以将索引数据文件导入至output指定的ES内。 

elaelasticdump拓展

官网地址:elasticdump 官网
elaelasticdump 同时具有从一个索引导出至另一个索引,通过Query DSL(ES查询语法)导出数据(不支持折叠)等一些强大的功能特性,官网上对各种功能特性都有进行详细介绍,在此就不在赘述。

 

【报错 1】:

4、含有分词的导入导出

参考:https://blog.csdn.net/Wang_Ocean/article/details/90267797

1)导出分词器,导出分词器的时候要特别注意,我们只能根据索引单个导入,不能全部导出,全部导出会出现索引不存在的错误:

1

elasticdump --input=http://ip:9200 --output=http://127.0.0.1:9200/ --type=analyzer --all=true  

【报错】该全部导出导入的命令会如下错误:

1

Error Emitted => {"root_cause":[{"type":"action_request_validation_exception","reason":"Validation Failed: 1: index is missing;"}],"type":"action_request_validation_exception","reason":"Validation Failed: 1: index is missing;"}

【解决】所以后面改为按索引分别导入则可以:

1

2

3

elasticdump --input=http://ip:9200/applog --output=http://127.0.0.1:9200/applog --type=analyzer

elasticdump --input=http://ip:9200/cms_article --output=http://127.0.0.1:9200/cms_article --type=analyzer

elasticdump --input=http://ip:9200/followup --output=http://127.0.0.1:9200/followup --type=analyzer

【坑】:再倒入的时候我并不知道到底有多少个索引,如何确定索引的名称?
这里我是直接先导出所有映射mapping到本地,然后找到索引的名称再到各导入分词:

1

elasticdump --input=D:/mapping.json --output=http://127.0.0.1:9200/ --all=true --type=mapping

疑惑:我这里的索引目前只有三个,如果是多个怎么处理?超过100?

2)导出映射mapping
映射mapping可以直接全部导入导出,直接命令:

1

elasticdump --input=http://ip:9200/ --output=http://127.0.0.1:9200/ --all=true --type=mapping

3)导出全部数据data
每个索引下的数据可以全部一次性导入:

1

elasticdump --input=http://ip:9200/ --output=http://127.0.0.1:9200/ --all=true --type=data

3,总结
1)如果不导入analyzer会怎么样?
我试过如果只导入data和mapping,则数据会导入,mapping会发生变化,最终的结果没有分词的效果。
2)如果不导入mapping也不会有分词的效果。
3)顺序导入最好按照:analyzer,mapping和data这个顺序来,防止出现分词失效的结果。

【报错 2】:

 dump ended with error (get phase) => UNAUTHORIZED: {"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401}

[root@risen-un01 bin]#  ./elasticdump --input=http://192.168.5.249:9200/sentiment_latest  --output=http://192.168.5.31:9200/ads_yq_sentiment_app --type=data
Wed, 04 Aug 2021 03:03:29 GMT | starting dump
Wed, 04 Aug 2021 03:03:30 GMT | Error Emitted => {"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401}
Wed, 04 Aug 2021 03:03:30 GMT | Error Emitted => {"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401}
Wed, 04 Aug 2021 03:03:30 GMT | Total Writes: 0
Wed, 04 Aug 2021 03:03:30 GMT | dump ended with error (get phase) => UNAUTHORIZED: {"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401}

【解决】:是因为ES有账号密码设置,在命令中加上账号密码即可

[root@risen-un01 bin]# ./elasticdump --input=http://elastic:fToC@192.168.5.249:9200/sentiment_latest   --output=http://192.168.5.31:9200/ads_yq_sentiment_app --type=data
Wed, 04 Aug 2021 03:08:13 GMT | starting dump
Wed, 04 Aug 2021 03:08:14 GMT | got 100 objects from source elasticsearch (offset: 0)
Wed, 04 Aug 2021 03:08:26 GMT | sent 100 objects to destination elasticsearch, wrote 100
Wed, 04 Aug 2021 03:08:26 GMT | got 100 objects from source elasticsearch (offset: 100)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐