一、安装nodejs环境
1.下载安装包
[root@es ~]# cd /data/software/
[root@es software]# wget https://mirrors.tuna.tsinghua.edu.cn/nodejs-release/v18.18.2/node-v18.18.2-linux-arm64.tar.xz
2.解压安装
[root@es software]# cd /data/software
[root@es software]# tar xf node-v18.18.2-linux-arm64.tar.gz
[root@es software]# echo 'export PATH=/data/software/node-v18.18.2-linux-arm64/bin/:$PATH' >>/etc/profile
[root@es software]# source /etc/profile
[root@es software]# node -v
[root@es software]# npm -v
3.验证
二、elasticdump 安装
1.在线安装elasticdump
[root@es software]# npm install elasticdump -g
[root@es software]# elasticdump --help
2.打包elasticdump(可选)
如果需要离线环境安装可以执行以下打包操作。
#安装打包工具
[root@es software]# npm install -g npm-pack-all
/data/software/node-v10.24.1-linux-x64/bin/npm-pack-all -> /data/software/node-v10.24.1-linux-x64/lib/node_modules/npm-pack-all/index.js
+ npm-pack-all@1.12.7
added 19 packages from 14 contributors in 20.689s
#切换到到elasticdump安装目录
[root@es software]# cd node-v10.24.1-linux-x64/lib/node_modules/elasticdump
#执行打包指令
[root@es elasticdump]# npm-pack-all
npm notice === Tarball Details ===
npm notice name: elasticdump
npm notice version: 6.124.0
npm notice filename: elasticdump-6.124.0.tgz
npm notice package size: 13.3 MB
npm notice unpacked size: 98.4 MB
npm notice shasum: 53cc189f1a6a1abce2651fda2015061d79b19568
npm notice integrity: sha512-ud6U18MwrrvqK[...]8qvi4FpSY52Ww==
npm notice total files: 5075
npm notice
elasticdump-6.124.0.tgz
#当前目录生成 elasticdump-6.*.tgz
3.离线安装elasticdump(可选)
#将安装包上传到离线环境
[root@ansible-111 software]# npm install elasticdump-*.tgz
#建软链接
[root@ansible-111 software]# ln -s /data/software/node_modules/elasticdump/bin/elasticdump /usr/bin/elasticdump
#查看
[root@ansible-111 software]# ll /usr/bin/elasticdump
lrwxrwxrwx 1 root root 55 Jul 3 15:06 /usr/bin/elasticdump -> /data/software/node_modules/elasticdump/bin/elasticdump
# 验证
[root@ansible-111 software]# elasticdump --help
elasticdump: Import and export tools for elasticsearch
version: 6.120.2
三、elasticdump备份与恢复
1.备份脚本(每天凌晨1点)
[root@ansible-111 es_backup]# vim elasticdump_backup.sh
#!/bin/bash
ES_HOST="http://172.16.130.72:9200"
ES_USER="elastic"
ES_PASS="elastic"
BACKUP_DIR="./bakup" # 备份目录
# 创建备份目录(按日期)
TIMESTAMP=$(date +%Y%m%d)
TARGET_DIR="$BACKUP_DIR/$TIMESTAMP"
mkdir -p "$TARGET_DIR"
# 获取所有索引(排除系统索引)
INDICES=$(curl -s -u "$ES_USER:$ES_PASS" "$ES_HOST/_cat/indices?h=index" | grep -v '^\.')
# 循环备份每个索引
for INDEX in $INDICES; do
echo "Backing up index: $INDEX"
# 备份 mapping
elasticdump \
--input="http://${ES_USER}:${ES_PASS}@${ES_HOST#http://}/$INDEX" \
--output="$TARGET_DIR/${INDEX}_mapping.json" \
--type=mapping
# 备份数据
elasticdump \
--input="http://${ES_USER}:${ES_PASS}@${ES_HOST#http://}/$INDEX" \
--output="$TARGET_DIR/${INDEX}_data.json" \
--type=data \
--limit=1000
done
echo "Backup completed! Files saved to: $TARGET_DIR"
#数据量大需要压缩可以改为
--output=$|gzip > /data/linux.json.gz
# 添加执行权限
[root@ansible-111 es_backup]# chmod +x elasticdump_backup.sh
# 添加定时任务备份
[root@ansible-111 es_backup]# crontab -e
# 每天凌晨1点执行备份(注意使用脚本绝对路径)
#0 1 * * * /bin/bash /data/es_backup/elasticdump_backup.sh >> /data/es_backup/elasticdump_backup.log 2>&1
2.恢复语句
elasticdump \
--input=my_index_mapping.json \
--output=http://target:9200/my_index \
--type=mapping
elasticdump \
--input=my_index_data.json \
--output=http://target:9200/my_index \
--type=data