elasticsearch导出、导入工具-elasticdump

elasticsearch导出、导入工具-elasticdump

elasticsearch 数据导入到本地,或本地数据导入到elasticsearch中,或集群间的数据迁移,可以用elasticsearch的工具—elasticdump

elasticdump github 地址: https://github.com/taskrabbit/elasticsearch-dump?utm_source=dbweekly&utm_medium=email

elasticdump 可以用用npm安装本地运行,也可以用docker容器运行。在这里我说一下npm安装本地运行、docker运行可以参考github文章。

npm 安装 elasticdump

先下载安装npm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 以下我尽量都用绝对路径吧。 发现好多文章里的路径写的不清晰......
cd /home/shining
wget https://nodejs.org/dist/v8.11.2/node-v8.11.2-linux-x64.tar.xz
tar -xf node-v8.11.2-linux-x64.tar.xz
cd /home/shining/node-v8.11.2-linux-x64/bin
ln -s /home/shining/node-v8.11.2-linux-x64/bin/npm /usr/local/bin/npm
ln -s /home/shining/node-v8.11.2-linux-x64/bin/node /usr/local/bin/node

# 安装 elasticdump
./npm init -f

./npm install elasticdump
# 如果你需要全局安装的话就添加 -g 参数, 我这里没有配置全局。

cd /home/shining/node-v8.11.2-linux-x64/bin/node_modules/elasticdump/bin

./elasticdump --help

# 这样 elasticdump 就安装好了

导出数据, 他在他的官网中已经介绍的很详细了, es导出到es,es导出到文件,导出数据直接压缩等方式。

主要记住的是, 导出的时候不仅仅的data,还需要导出mapping信息。

导出数据到文件:

1
2
3
4
5
6
7
8
elasticdump \
--input=http://172.16.3.5:9200/shining_index \
--output=/data/shining_index_mapping.json \
--type=mapping
elasticdump \
--input=http://172.16.3.5:9200/shining_index \
--output=/data/shining_index.json \
--type=data

这样的话数据和mapping信息就都导出来了。

For Example:

1
2
3
4
5
6
7
8
9
10
11
12
13
导出Mapping信息  
elasticdump --ignore-errors=true --scrollTime=120m --bulk=true --input=http://10.10.20.164:9200/xmonitor-2015.04.29 --output=http://192.168.100.72:9200/xmonitor-prd-2015.04.29 --type=mapping

导出数据
elasticdump --ignore-errors=true --scrollTime=120m --bulk=true --input=http://10.10.20.164:9200/xmonitor-2015.04.28 --output=/usr/local/esdump/node-v0.12.2-linux-x64/data/xmonitor-prd-2015.04.28.json --type=data

导出数据到本地集群
elasticdump --ignore-errors=true --scrollTime=120m --bulk=true --input=http://10.10.20.164:9200/xmonitor-2015.04.29 --output=http://192.168.100.72:9200/xmonitor-prd-2015.04.29 --type=data

迁移mapping
./elasticdump --input=http://10.214.228.44:9200/ehruserindex --output=http://10.214.226.64:9200/ehruserindex --type=mapping
迁移数据
./elasticdump --input=http://10.214.228.44:9200/ehruserindex --output=http://10.214.226.64:9200/ehruserindex --limit=10000 --type=data

导入数据

正常导入数据是:

1
elasticdump --input /data/shining_index.json --output http://172.16.3.5:9200/shining_index

如果你得ES集群配置用有配置: action.auto_create_index 参数为 false 或 为 +aaa,-bbb,’+’号意味着允许创建aaa开头的索引,’-‘号意味着不允许创建bbb开头的索引 有规则的话(详细可以查看这个参数的说明和配置), 会导致导入失败。

这时候需要先创建索引和mappping之后再导入数据。

先编辑一下我们导出来的mapping.json文件

1
2
3
4
5
6
7
8
9
vim /data/shining_index_mapping.json
数据类似于:
{"shining_index":{"mappings":{"logs".............}}}}}

需要保留 mappings 之后的信息
类似于:
{"mappings":{"logs".............}}}}

删除 {"shining_index": 和 最后一个 }

创建索引

1
curl -X PUT 'http://172.16.3.5:9200/shining_index' -d@/data/shining_index_mapping.json

创建成功之后再导入数据就可以了。就不会报错了。

感谢您的支持!