首页IT科技es数据导入导出(es数据导入导出)

es数据导入导出(es数据导入导出)

时间2025-08-04 21:06:13分类IT科技浏览7262
导读:使用elasticdump导入导出数据...

使用elasticdump导入导出数据

一                、安装elasticdump

终端中输入

1 npm install elasticdump -g

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

1

2 C:\Users\T470s>elasticdump --version

6.3.3

二                        、常用的导入导出方法

 1        、将索引中的数据导出到本地

1 elasticdump --input=http://localhost:9200/demo --output=D:/ES/date/demo.json

 其中            ,demo是索引                。

 2            、将本地数据导入es中

1 elasticdump --input=D:/ES/date/demo.json --output=http://localhost:9200/demo1

 3                        、将es导入另一个es

1 elasticdump --input=http://ip:9200/demo --output=http://127.0.0.1:9200/demo

 4            、含有分词的导入

前文:公司正在运行的项目需要搭一个测试环境                        ,需要将正式环境的ES里面存储的数据导入到该测试环境的ES服务器里面                        。使用本地的windows系统来实现        。

1            ,环境准备

因为elaticdump 依赖于nodejs的环境        ,需要下载nodejs的相关依赖环境                        ,去nodejs官网直接安装包                ,我下载的是msi安装程序    ,安装好之后会直接配置好环境变量                        ,在cmd或者Powershell直接下载elaticdump 即可:

1 npm install elasticdump

2                    ,生产环境导出到测试环境

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这个顺序来                        ,防止出现分词失效的结果            。

顺序导入按照:analyzer                    ,mapping,data

es数据的导出

//索引的导出

// 导出 index 的 mapping 到 .json 文件

elasticdump \ --input=http://production.es.com:9200/demo \ --output=/data/demo.json \ --type=mapping

//导出全部索引

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

//数据的导出

// 导出 index 的所有数据到 .json 文件

elasticdump \ --input=http://production.es.com:9200/demo \ --output=/data/demo.json \ --type=data

//导出全部数据

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

//分词器导出

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

//改为按索引分别导入: 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

es数据的导入

从本地文件导入数据

elasticdump --input=/data/demo.json --output=http://localhost:9200/demo1

将es导入另一个es

elasticdump --input=http://ip:9200/demo --output=http://127.0.0.1:9200/demo

#!/usr/bin/env bash

array=(“full_vehicle_portrait    ” “latest_car_history_trail_dt                        ” “vehicle_abnormal_monitor                    ” “gantry_transaction-20200914” “vehicle_abnormal_summary                    ”)

for(( i=0;i<KaTeX parse error: Expected }, got # at position 2: {#̲array[@]};i++))…

{array[i]}

#创建索引

curl -X PUT ‘http://cdh173:9200/$VAR1?pretty’

elasticdump

–input=http://33.69.6.95:9200/

a

r

r

a

y

[

i

]

o

u

t

p

u

t

=

h

t

t

p

:

/

/

c

d

h

219

:

9200

/

{array[i]} \ --output=http://cdh219:9200/

array[i]output=http://cdh219:9200/

{array[i]}

–type=analyzer

elasticdump

–input=http://33.69.6.95:9200/

a

r

r

a

y

[

i

]

o

u

t

p

u

t

=

h

t

t

p

:

/

/

c

d

h

219

:

9200

/

{array[i]} \ --output=http://cdh219:9200/

array[i]output=http://cdh219:9200/

{array[i]}

–type=settings

elasticdump

–input=http://33.69.6.95:9200/

a

r

r

a

y

[

i

]

o

u

t

p

u

t

=

h

t

t

p

:

/

/

c

d

h

219

:

9200

/

{array[i]} \ --output=http://cdh219:9200/

array[i]output=http://cdh219:9200/

{array[i]}

–type=mappingcc

elasticdump --size=200

–input=http://33.69.6.95:9200/

a

r

r

a

y

[

i

]

o

u

t

p

u

t

=

h

t

t

p

:

/

/

c

d

h

219

:

9200

/

{array[i]} \ --output=http://cdh219:9200/

array[i]output=http://cdh219:9200/

{array[i]}

–type=data

done

如果我es里索引非常多                        ,这样一个一个去执行依然会耗时        ,怎么做?当然想到了shell脚本        。

脚本名字为:esExportOrInput.sh

#!/bin/sh

index_name=$1

index_data=$1"_data"

index_settings=$1"_settings"

echo “开始执行                        ”

导出索引Mapping数据

./elasticdump --input=http://source:9200/

i

n

d

e

x

n

a

m

e

/

o

u

t

p

u

t

=

.

/

index_name/ --output=./

indexname/output=./

index_name.json --type=mapping

./elasticdump --input=http://source:9200/

i

n

d

e

x

n

a

m

e

/

o

u

t

p

u

t

=

.

/

index_name/ --output=./

indexname/output=./
index_settings.json --type=settings

导出索引数据

./elasticdump --input=http://source:9200/

i

n

d

e

x

n

a

m

e

/

o

u

t

p

u

t

=

.

/

index_name/ --output=./

indexname/output=./index_data.json --type=data --limit=1000

#导入索引Mapping数据

echo "执行删除目标服务的索引start:"

i

n

d

e

x

n

a

m

e

c

u

r

l

X

D

E

L

E

T

E

h

t

t

p

:

/

/

t

a

r

g

e

t

:

9200

/

index_name curl -XDELETE http://target:9200/

indexnamecurlXDELETEhttp://target:9200/

index_name

echo "执行删除目标服务的索引end:“

i

n

d

e

x

n

a

m

e

s

l

e

e

p

3

e

c

h

o

"

等待三秒                        。                。    。

"

.

/

e

l

a

s

t

i

c

d

u

m

p

i

n

p

u

t

=

.

/

index_name sleep 3 echo "等待三秒                        。                    。。" ./elasticdump --input=./

indexnamesleep3echo"等待三秒                    。                        。    。"./elasticdumpinput=./
index_settings.json --output=http://target:9200/

i

n

d

e

x

n

a

m

e

/

t

y

p

e

=

s

e

t

t

i

n

g

s

.

/

e

l

a

s

t

i

c

d

u

m

p

i

n

p

u

t

=

.

/

index_name/ --type=settings ./elasticdump --input=./

indexname/type=settings./elasticdumpinput=./
index_name.json --output=http://target:9200/

i

n

d

e

x

n

a

m

e

/

t

y

p

e

=

m

a

p

p

i

n

g

.

/

e

l

a

s

t

i

c

d

u

m

p

i

n

p

u

t

=

.

/

index_name/ --type=mapping ./elasticdump --input=./

indexname/type=mapping./elasticdumpinput=./
index_data.json --output=http://target:9200/KaTeX parse error: Expected EOF, got # at position 39: …a --limit=1000 #̲清除生成的文件 rm -f .…

index_name.json

rm -f ./

i

n

d

e

x

s

e

t

t

i

n

g

s

.

j

s

o

n

r

m

f

.

/

index_settings.json rm -f ./

indexsettings.jsonrmf./

index_data.json

#清除生成的文件

echo “索引    ”$index_name"执行完毕                ”

执行时候需要传递1个变量            ,就是索引名字index_name

温馨提示:

1        、这个脚本仅仅只能在安装了elasticdump服务器上使用                        ,脚本目录在/root/node_modules/elasticdump/bin

2                        、导出导入默认100条一批            ,可以添加–limit 每页条数 来自定义每页数量                。

3                、导入的时候一定要限制性settings的文件导入        ,在执行mapping的导入                        ,不然会冲突                ,因为settings上带了uuid的唯一标识                        。

样例:如果我要对bum_user这个索引的数据从测试环境迁移到压测服务器target上    ,就这样执行命令

./esExportOrInput.sh bum_user

留个作业                        ,可以对源服务器和目标服务器进行动态参数传递                    ,就可以做到万能适配了,有兴趣就重写

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
教你用css实现表单部件的方法(教你用CSS实现表单部件) 全面开展数据分类分级梳理(数据安全-数据分类分级方案设计)