ElasticSearch 数据迁移工具elasticdump

news2025/1/18 17:16:32

ElasticSearch 数据迁移工具elasticdump

Elasticdump 是一个用于导入和导出 Elasticsearch 数据的命令行工具。它提供了一种方便的方式来在不同的 Elasticsearch 实例之间传输数据,或者进行数据备份和恢复。

使用 Elasticdump,你可以将 Elasticsearch 索引中的数据导出为 JSON 文件,或者将 JSON 文件中的数据导入到 Elasticsearch 索引中。它支持各种选项和过滤器,用于指定源和目标,包括索引模式、文档类型、查询过滤器等等。

主要特征包括

  • 支持在Elasticsearch实例或者集群之间传输和备份数据。可以将数据从一个集群复制到另一个集群。
  • 支持不同格式的数据传输,包括JSON、NDJSON、CSV、备份文件等。
  • 可以通过命令行或者程序化的方式使用。命令行方式提供了便捷的操作接口。
  • 支持增量式同步,只复制目标集群中不存在的文档。
  • 支持各种认证方式连接Elasticsearch,如basic auth、Amazon IAM等。
  • 支持多线程操作,可以加快数据迁移的速度。
  • 开源免费,代码托管在GitHub上。

一、安装node

首先获取安装包

wget https://nodejs.org/dist/v16.14.0/node-v16.14.0-linux-x64.tar.xz
tar axf node-v16.14.0-linux-x64.tar.xz -C /usr/local/
mv /usr/local/node-v16.14.0-linux-x64  /usr/local/node

然后配置环境变量

vim /etc/profile
export NODE_HOME=/usr/local/node
export PATH=$NODE_HOME/bin:$PATH

接下来刷新环境变量,然后测试一下安装是否完成

 source /etc/profile
 node -v
 npm -v

如果是mac 的话可以使用brew 安装

brew install node@16

二、在线安装elasticdump

执行下面的命令安装

npm install elasticdump -g

使用下面的命令查看安装目录

npm root -g

我的位置在这里/opt/homebrew/lib/node_modules

image-20230712113531952

三、离装elasticdump

这里的原理是将node安装包和elasticdump安装报复制到需要离线安装的服务器。

  1. 获取node 的离线安装包进行安装即可,参考第一步
  2. 获取elasticdump的安装包安装,所以我们首选需要一个打包工具
npm install -g npm-pack-all

然后我们切换到上面elasticdump的安装路,打包elasticdump,会在当前目录生成elasticdump-6.103.0.tgz 这样一个压缩包,这就是我们离线安装需要的包

cd /opt/homebrew/lib/node_modules/elasticdump/
npm-pack-all

image-20230712113727581

到这里我们看到离线包已经生成好了,接下来我们复制到我们之前已经安装好node 的机器上,执行下面的命令

npm install elasticdump-6.103.0.tgz

后面为了方便使用,我们可以配置一下elasticdump的环境变量

vim ~/.bashrc
# 追加以下内容
#node 
export DUMP_HOME=/opt/homebrew/lib/node_modules/elasticdump/
export PATH=$DUMP_HOME/bin:$PATH
# 刷新
source ~/.bashrc

四、使用elasticdump

这里的使用主要分为两种,一种是数据备份,一种是数据迁移

  1. 备份主要指的是生成备份的数据文件,在需要的时候进行还原
  2. 数据迁移是指将原来索引里的数据迁移到新的索引

其实数据备份也能达到数据迁移的目的,但是在两个环境的网络不通的时候我们只能使用数据备份

我们安装成功后,在elasticdump的bin目录下其实有两个工具,一个是elasticdump 另外一个是multielasticdump

image-20230714090711434

数据迁移

迁移索引

elasticdump \
  --input=http://192.168.1.140:9200/source_index \
  --output=http://192.168.1.141:9200/target_index \
  --type=mapping

迁移数据

elasticdump \
  --input=http://192.168.1.140:9200/source_index \
  --output=http://192.168.1.141:9200/target_index \
  --type=data \
  --limit=2000  # 每次操作的objects数量,默认100,数据量大的话,可以调大加快迁移速度

这个命令会将源 Elasticsearch 实例中的 “my_index” 索引的所有数据导出,并保存到 “/path/to/output.json” 的 JSON 文件中。

  • --input:指定输入的 Elasticsearch 实例和索引。可以是一个 URL,也可以是本地 Elasticsearch 实例的路径。
  • --output:指定输出的文件路径,数据将保存为一个 JSON 文件。
  • --type:指定要导出的数据类型,通常为 “data” 表示文档数据。

你还可以使用其他选项来进一步控制导出过程,如 --query, --size, --limit, --filter 等,具体取决于你的需求。可以通过运行 elasticdump --help 命令来

数据备份

导出索引和数据

elasticdump \
  --input=http://192.168.1.140:9200/source_index \
  --output=/data/source_index_mapping.json \
  --type=mapping
elasticdump \
  --input=http://192.168.1.140:9200/source_index \
  --output=/data/source_index.json \
  --type=data \
  --limit=2000

导入索引和数据

elasticdump \
  --input=/data/source_index_mapping.json \
  --output=http://192.168.1.141:9200/source_index \
  --type=mapping
elasticdump \
  --input=/data/source_index.json \
  --output=http://192.168.1.141:9200/source_index \
  --type=data \
  --limit=2000

其他用法

还有其他使用的细节,例如压缩,指定query 什么的,我们可以参考下面的例子

# Copy an index from production to staging with analyzer and mapping:
elasticdump \
  --input=http://production.es.com:9200/my_index \
  --output=http://staging.es.com:9200/my_index \
  --type=analyzer
elasticdump \
  --input=http://production.es.com:9200/my_index \
  --output=http://staging.es.com:9200/my_index \
  --type=mapping
elasticdump \
  --input=http://production.es.com:9200/my_index \
  --output=http://staging.es.com:9200/my_index \
  --type=data

# Backup index data to a file:
elasticdump \
  --input=http://production.es.com:9200/my_index \
  --output=/data/my_index_mapping.json \
  --type=mapping
elasticdump \
  --input=http://production.es.com:9200/my_index \
  --output=/data/my_index.json \
  --type=data

# Backup and index to a gzip using stdout:
elasticdump \
  --input=http://production.es.com:9200/my_index \
  --output=$ \
  | gzip > /data/my_index.json.gz

# Backup the results of a query to a file
elasticdump \
  --input=http://production.es.com:9200/my_index \
  --output=query.json \
  --searchBody="{\"query\":{\"term\":{\"username\": \"admin\"}}}"
  
# Specify searchBody from a file
elasticdump \
  --input=http://production.es.com:9200/my_index \
  --output=query.json \
  --searchBody=@/data/searchbody.json  

# Copy a single shard data:
elasticdump \
  --input=http://es.com:9200/api \
  --output=http://es.com:9200/api2 \
  --input-params="{\"preference\":\"_shards:0\"}"

# Backup aliases to a file
elasticdump \
  --input=http://es.com:9200/index-name/alias-filter \
  --output=alias.json \
  --type=alias

# Import aliases into ES
elasticdump \
  --input=./alias.json \
  --output=http://es.com:9200 \
  --type=alias

# Backup templates to a file
elasticdump \
  --input=http://es.com:9200/template-filter \
  --output=templates.json \
  --type=template

# Import templates into ES
elasticdump \
  --input=./templates.json \
  --output=http://es.com:9200 \
  --type=template

# Split files into multiple parts
elasticdump \
  --input=http://production.es.com:9200/my_index \
  --output=/data/my_index.json \
  --fileSize=10mb

# Import data from S3 into ES (using s3urls)
elasticdump \
  --s3AccessKeyId "${access_key_id}" \
  --s3SecretAccessKey "${access_key_secret}" \
  --input "s3://${bucket_name}/${file_name}.json" \
  --output=http://production.es.com:9200/my_index

# Export ES data to S3 (using s3urls)
elasticdump \
  --s3AccessKeyId "${access_key_id}" \
  --s3SecretAccessKey "${access_key_secret}" \
  --input=http://production.es.com:9200/my_index \
  --output "s3://${bucket_name}/${file_name}.json"

# Import data from MINIO (s3 compatible) into ES (using s3urls)
elasticdump \
  --s3AccessKeyId "${access_key_id}" \
  --s3SecretAccessKey "${access_key_secret}" \
  --input "s3://${bucket_name}/${file_name}.json" \
  --output=http://production.es.com:9200/my_index
  --s3ForcePathStyle true
  --s3Endpoint https://production.minio.co

# Export ES data to MINIO (s3 compatible) (using s3urls)
elasticdump \
  --s3AccessKeyId "${access_key_id}" \
  --s3SecretAccessKey "${access_key_secret}" \
  --input=http://production.es.com:9200/my_index \
  --output "s3://${bucket_name}/${file_name}.json"
  --s3ForcePathStyle true
  --s3Endpoint https://production.minio.co

# Import data from CSV file into ES (using csvurls)
elasticdump \
  # csv:// prefix must be included to allow parsing of csv files
  # --input "csv://${file_path}.csv" \
  --input "csv:///data/cars.csv"
  --output=http://production.es.com:9200/my_index \
  --csvSkipRows 1    # used to skip parsed rows (this does not include the headers row)
  --csvDelimiter ";" # default csvDelimiter is ','

常用参数

--direction  dump/load 导出/导入
--ignoreType  被忽略的类型,data,mapping,analyzer,alias,settings,template
--includeType  包含的类型,data,mapping,analyzer,alias,settings,template
--suffix  加前缀,es6-${index}
--prefix  加后缀,${index}-backup-2018-03-13

总结

elasticdump是ElasticSearch提供的一个工具,我们主要可以用来完成

  1. 数据备份
  2. 数据迁移

这一节我们主要介绍了elasticdump的安装和使用,还有就是,Elasticdump 是一个第三方工具,不是官方的 Elasticsearch 产品。虽然它对某些用例很有帮助,但在使用之前,确保与你的 Elasticsearch 版本兼容,并查阅工具的文档以了解任何特定的注意事项或限制。

总体来说,elasticdump是一个非常实用的数据迁移和备份工具。它可以帮助我们轻松地在不同Elasticsearch集群之间进行数据迁移,实现集群之间的无缝数据同步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/755102.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

继承【C++】

继承 继承解决了什么问题?继承的应用场景是什么?简单举例继承的关系语法 继承解决了什么问题? C代码的 可重用性 通过继承实现。 新类从已有类获得已有的特性。 继承的应用场景是什么? 继承是一种设计的结果。(举例…

Linux线程的生产者消费者模型 --- 阻塞队列(blockqueue)

文章目录 线程同步条件变量条件变量的接口 生产者消费者场景消费者和消费者的关系生产者和生产者的关系生产者和消费者的关系从何体现出效率的提高 Blockqueueblockqueue.hpp为什么条件变量的接口有锁作为参数 CP.cc生产者 -> queue -> 消费者兼生产者 -> queue ->…

javaweb使用Thymeleaf 最凝练的CRUD项目-中

javaweb使用Thymeleaf 最凝练的CRUD项目-中 6、显示首页 ①目标 浏览器访问index.html&#xff0c;通过首页Servlet&#xff0c;渲染视图&#xff0c;显示首页。 ②思路 ③代码 [1]创建PortalServlet <servlet><servlet-name>PortalServlet</servlet-name…

复习第一课 C语言-ubuntu下的命令

目录 linux命令 【1】打开关闭终端 【2】终端 【3】ls命令 【4】cd 切换路径 【5】新建 【6】删除 【7】复制 【8】移动 【9】常用快捷键 【10】vi编辑器 【11】简单编程步骤 任务&#xff1a; linux命令 【1】打开关闭终端 打开终端&#xff1a; 1. 直接点击 …

【优选算法题练习】day6

文章目录 一、76. 最小覆盖子串1.题目简介2.解题思路3.代码4.运行结果 二、704. 二分查找1.题目简介2.解题思路3.代码4.运行结果 三、34. 在排序数组中查找元素的第一个和最后一个位置1.题目简介2.解题思路3.代码4.运行结果 总结 一、76. 最小覆盖子串 1.题目简介 76. 最小覆…

IDE /字符串 /字符编码与文本文件(如cpp源代码文件)

文章目录 概述文本编辑器如何识别文件的编码格式优先推测使用了UTF-8编码&#xff1f;字符编码的BOM字节序标记重分析各文本编辑器下的测试效果Qt Creator的文本编辑器系统记事本VS的文本编辑器Notepad 编译器与代码文件的字符编码ANSI编码其他 概述 前期在整理 《IDE/VS项目属…

Unity VR 开发教程 OpenXR+XR Interaction Toolkit(九)根据不同物体匹配对应的抓取手势

文章目录 &#x1f4d5;教程说明&#x1f4d5;前置准备&#x1f4d5;HandData 脚本存储手部数据&#x1f4d5;制作预设手势&#x1f4d5;手势匹配脚本 GrabHandPose⭐完整代码⭐需要保存的数据⭐得知什么时候开始抓取和取消抓取⭐将手势数据赋予手部模型⭐平滑变化手势⭐开始抓…

Linux重定向符怎么用/Centos和Ubuntu怎么安装软件?Vim编辑器是啥、又怎么用/Linux权限怎么修改设置

前情提要&#xff1a;经过一段时间的沉淀&#xff0c;因为要用到Linux&#xff0c;索性就梳理总结一下Linux的基本知识&#xff01; 紧接着前文&#xff0c;有需要点击这里查看哦&#xff01;(╹▽╹) 3.10 echo命令 作用&#xff1a;在命令行内输出指定内容语法&#xff1a;…

Windows多网卡通过跃点数设置网络优先级失败解决办法

在有多个网卡的情况下&#xff0c;网络优先级往往不是自己所需的&#xff0c;默认情况Windows会自动决策出应该优先使用的最佳网络连接顺序&#xff0c;但用户也有可能需要访问某一网卡所在内网等情况&#xff0c;此时可能就无法正常访问。网上查找可以通过修改跃点数的方式手动…

XUbuntu22.04之解决蓝牙鼠标不停掉线问题(追凶过程)(一百八十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

python_day8_bar

初识柱状图 导包 from pyecharts.charts import Bar from pyecharts.options import *创建柱状图对象 bar Bar()添加x轴数据,注意数据格式为列表 bar.add_xaxis([中国, USA, 不列颠])添加y轴数据,注意格式&#xff1a;图例&#xff0c;列表数据&#xff0c;设置 bar.add_…

Stable Diffusion Webui 之 ControlNet使用

一、安装 1.1、插件安装 1.2、模型安装 模型安装分为预处理模型和 controlnet所需要的模型。 先安装预处理模型&#xff0c;打开AI所在的安装目录\extensions\sd-webui-controlnet\annotator,将对应的预处理模型放进对应的文件夹中即可&#xff0c; 而controlnet所需模型则…

wordpress主题zibll子比主题v7.2.2绕授权+教程

1、先说一下要准备的东西 一份子比7.1正式包&#xff0c;一台服务器&#xff0c;wp6.2.2正式包&#xff08;wordpress&#xff09;&#xff0c;一个域名 2、首先把wp上传服务器的域名根目录下&#xff0c;然后打开前台按要求填写数据库和管理员邮箱账号密码&#xff0c;php版本…

0129 进程与线程3

目录 2.进程与线程 2.4死锁 2.4部分习题 2.进程与线程 2.4死锁 2.4部分习题 1.死锁的避免是根据&#xff08;&#xff09;采取措施实现的 A.配置足够多的系统资源 B.使进程推进顺序合理 C.破坏死锁的四个必要条件之一 D.防止系统进入不安全状态 2.死锁…

HTML5和CSS3新特性

文章目录 1.HTML5新特性1.1 概述1.2 语义化标签1.3 多媒体标签1.3.1 视频标签- video1.3.2 音频标签- audio 1.4 新增的表单元素1.5 新增表单属性 2.CSS3新特性2.1新增选择器2.1.1 属性选择器2.1.2 结构伪类选择器E:first-childE:nth-child(n)E:nth-child 与 E:nth-of-type 的区…

7个有用的Prompt参数

ChatGPT和Midjournal使得生成式人工智能的应用程序激增。当涉及到生成式AI时&#xff0c;"prompt"通常指的是作为输入给模型的初始提示或指示。它是一个短语、问题、句子或段落&#xff0c;用来引导模型生成相关的响应或文本。 在使用生成式AI模型时&#xff0c;提供…

form 校验多个表单

有的时候&#xff0c;表单需要拆开多个&#xff0c;这时候就需要校验多个表单 <template><div><div>表单1</div><div class"top"><el-form :model"form" ref"form1" :rules"rules" label-width&quo…

ylb-接口9登录短信发送

总览&#xff1a;&#xff08;总体功能与注册发送短信功能相似&#xff09; 在web模块service.impl包下&#xff0c;创建SmsCodeLoginImpl&#xff0c;实现的还是SmsService接口 package com.bjpowernode.front.service.impl;import com.alibaba.fastjson.JSONObject; impor…

2023机器人操作系统(ROS)暑期学校报名通道开启-转发-

来源请查看&#xff1a; https://mp.weixin.qq.com/s/gVr4pUG2TGT6sCcGKvVnYw 报名等请使用上面给出地址。 面向对象&#xff1a;机器人/人工智能相关专业教师/学生/工程师 要求&#xff1a;ROS零基础/中高级 费用&#xff1a;免费&#xff0c;食宿自理 时间&#xff1a;2023…

3.2 多路复用和多路分用

3.2 多路复用和多路分用 多路复用/分用分用如何工作&#xff1f;无连接分用面向连接的分用面向连接的分用&#xff1a;多线程Web服务器 多路复用/分用 分用如何工作&#xff1f; 主机接收到IP数据报(datagram) 每个数据报携带源IP地址、目的IP地址。每个数据报携带一个传输层的…