使用elasticdump高效备份与恢复Elasticsearch数据

发布于:2025-07-09 ⋅ 阅读:(17) ⋅ 点赞:(0)

一、安装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


网站公告

今日签到

点亮在社区的每一天
去签到