Elasticsearch的数据导入导出

场景:

将一台elasticsearch服务器(A)上的索引导出,然后在再另一台elasticsearch服务器上(B)中导入;也适用于单机的备份与还原操作。


准备工作:

1、服务两台:linux(本人使用centos6.5) --  A和B(数据A->B)

2、操作电脑window一台    --  W

  3、在A、Bl两台服务器上分别安装好elasticsearch(本人使用的2.3.3)与head插件;具体如何安装这里不过多介绍,百度教程很多。


流程开始:

1、在A服务器上建立一个数据仓库:在elasticsearch.yml中添加:path.repo: ["/elasticsearch/back_up"](仓库路径自定义)配置;

2、假设我将要建立的仓库路径为:/elasticsearch/back_up,然后创建此路径文件夹,赋予文件写入权限(一定要有);

3、执行下面命令创建一个仓库:

curl -XPUT 'http://localhost:9200/_snapshot/test(仓库名称)' -d '{
    "type": "fs",      //是使用共享的文件系统去存储快照
    "settings": {
        "location": "/elasticsearch/back_up",
        "compress": true
    }
}'

创建仓库成功后(执行创建命令后返回true),执行  curl -XGET 'http://localhost:9200/_snapshot/_all' 查看所有仓库信息;若要查看指定仓库执行 curl -XGET 'http://localhost:9200/_snapshot/test'  (test为我测试仓库名称,可根据自己命名情况)。

4、创建一个快照执行如下命令:

curl -XPUT "localhost:9200/_snapshot/test/snapshot_1" -d '{
    "indices": "index_1,index_2",      //索引名称,多个用逗号隔开
    "ignore_unavailable": "true",       //忽略不存在的索引(不设置会快照请求会失败)
    "include_global_state": false,      //防止集群的全局状态被作为快照的一部分储存起来
    "partial": "false"                           //默认情况下,如果快照红的1个或多个索引不是全部分片都可用会导致整个请求过程失败,将其设置为  true 可以改变此行为

还可以使用 curl -XPUT "localhost:9200/_snapshot/test/snapshot_1?wait_for_completion=true"  命令创建es全部索引快照;

执行 curl -XGET "localhost:9200/_snapshot/test/_all" 列出仓库所有快照信息;将 _all 换成指定快照名称列出指定快照信息

5、到此为止A服务器上的索引已经备份好(若索引很大需要较长时间耐心等待即可),可进入/elasticsearch/back_up(根据自己定义的仓库路径)查看文件

如下图(我创建的是一个名为 sdk_android 的快照,此为我实际项目命名,若为上文快照名此文件名应为 snapshot_1):

Elasticsearch的数据导入导出_第1张图片

6、在B服务器上也创建一个仓库步骤回看 1->2->3 ;创建完成后将A服务器上的快照文件拷贝到B服务器的仓库文件夹下(A->B);此过程若是索引很大需要较长时间(我当时索引文件15G拷贝了整整1天!服务器下载上传速度也比较有限);

7、执行以下命令还原快照:

curl -XPOST "localhost:9200/_snapshot/test/snapshot_1/_restore" -d '{
    "indices": "index_1,index_2",     //根据自己快照情况指定要还原的索引
    "ignore_unavailable": "true",
    "include_global_state": false,
    "rename_pattern": "index_(.+)",
    "rename_replacement": "restored_index_$1"
}'


也可通过执行 curl -XPOST "localhost:9200/_snapshot/test/snapshot_1/_restore"  命令全部还原;

8、若索引文件较大,还原需要一定时间,可执行 curl -XGET "localhost:9200/_snapshot/test/snapshot_1" 查看还原进度

9、删除快照执行如下命令: 

curl -XDELETE "localhost:9200/_snapshot/test/snapshot_1"

10、若是单机备份还原,可直接执行还原命令。


以上便是我查看N各文档整理的一个可用的es数据备份与还原的操作,我当时也是被搞的一个头两个大,用惯了mysql,以为备份还原直接鼠标导出导入即可。所幸最后还是有找到办法解决,再次感谢百度给想学习的人一个强大的搜索机制。最后也希望同为es数据备份还原苦恼的小伙伴们多一份参考!
















你可能感兴趣的:(elasticsearch)