离线安装elasticdump并导入和导出数据
离线安装elasticdump
在 CentOS 或 RHEL 系统上安装 elasticdump,你可以使用 npm(Node.js 的包管理器)来安装,因为 elasticdump 是一个基于 Node.js 的工具。以下是步骤
先在外网环境下安装
- 下载nodejs和npm(注意x86和aarch64的包不同)
wget https://nodejs.org/dist/v12.22.11/node-v12.22.11-linux-arm64.tar.gz
我下这个版本才能用npm install elasticdump -g下载
2. 解压
tar -zxvf node-v12.22.11-linux-arm64.tar.gz -C /usr/lib/
- 创建软链接
mv /usr/lib/node-v12.22.11-linux-arm64 /usr/lib/nodejs
ln -s /usr/lib/nodejs/bin/npm /usr/bin
ln -s /usr/lib/nodejs/bin/node /usr/bin
- 验证能否正常使用
node -v
npm -v
- 安装elasticdump
npm install elasticdump -g
- 创建elasticdump软链接
ln -s /usr/lib/nodejs/lib/node_modules/elasticdump/bin/elasticdump /usr/local/bin/elasticdump
- 验证安装
elasticdump --version
- 导出缓存包
查看npm缓存路径
npm config get cache
我的是/root/.npm,把elasticdump安装后的缓存目录打包
cd /root
tar -zcf npm-cahce.tgz .npm
- 把导出的npm-cache.tgz 保存下来
拷贝安装包到内网环境
- 参见外网步骤安装nodejs和创建软链接
- 拷贝npm-cache.tar到/root,并解压缩
mv npm-cache.tar /root
cd /root
tar -zxf npm-cahce.tgz
--cache-min
这个参数是指超过多少分钟,才去网络下载,设置足够大就会从缓存安装
npm install --cache /root/.npm --optional --cache-min 9999999 -shrinkwarp false elasticdump
- 创建软链接
ln -s /usr/lib/nodejs/lib/node_modules/elasticdump/bin/elasticdump /usr/local/bin/elasticdump
- 检测环境,安装成功,会看到elasticdump帮助信息,导出数据时需要查看这些帮助参数的用法:
elasticdump --help
导入和导出数据
导出索引数据
- 将源 ES 实例中的索引数据导出为 JSON 文件:
elasticdump \--input=http://localhost:9200/your_index_name \--output=your_index_data.json \--type=data
- 导出索引映射,将索引的映射(mapping)导出为 JSON 文件,以确保导入时保持相同的结构:
如果有认证,则下方input输入账户密码username:password
elasticdump \--input=http://username:password@source_elasticsearch:9200/your_index_name \--output=your_index_mapping.json \--type=mapping
- 导出索引的settings(即索引的配置如:分片数、副本数等)
elasticdump \--input=http://localhost:9200/my_index \--output=my_index_settings.json \--type=settings
导入数据
- 导入索引映射:(已经有索引结构了可不导入)当索引模板有变动时建议导入
elasticdump \--input=your_index_mapping.json \--output=http://localhost:9200/your_index_name \--type=mapping
- 导入索引数据,设置limit一次性导入多少条(默认100条):
当索引不存在时会自动创建
elasticdump \--input=your_index_data.json \--output=http://localhost:9200/your_index_name \--type=data \--limit=10000
--ignore-errors
参数可以忽略导入过程中出现的错误,例如 _id 冲突的错误。这样,当导入数据时,如果目标索引中已经存在 _id 相同的文档,导入操作不会覆盖原有数据,而是跳过这些冲突的文档
elasticdump \--input=my_index_dump.json \--output=http://localhost:9200/my_index \--type=data \--ignore-errors
- 验证数据导入
在目标 ES 实例中验证数据是否成功导入:
curl -X GET "http://target_elasticsearch:9200/your_index_name/_search?pretty"
如果返回的结果与原始索引中的数据一致,说明数据迁移成功