es数据备份、 Elasticsearch数据备份、contos使用elasticdump备份es数据

es数据备份使用elasticdump

一、安装elasticdump

# elasticdump依赖node环境,先安装node
yum -y install nodejs npm
node -v
npm -v

# 使用npm安装elasticdump 
npm install elasticdump -g
find / -name elasticdump
# 进入软件目录
cd /usr/local/lib/node_modules/elasticdump/bin

 

二、备份数据

#导出数据
#说明: elasticdump --input=ES服务地址/索引名称  --output=导出地址及文件 --type=mapping或者data

elasticdump --input=http://192.168.0.18:9200/rtp_news --output=/opt/esbckup/backup/rtp_news_mapping.json --type=mapping
elasticdump --input=http://192.168.0.18:9200/rtp_news --output=/opt/esbckup/backup/rtp_news_data.json --type=data


#导入数据
#说明:elasticdump --input=文件地址 --output=ES服务地址/索引名称 --type=mapping或者data
elasticdump
--input=/opt/esbckup/backup/rtp_news_mapping.json --output=http://192.168.0.18:9200/rtp_news--type=mapping elasticdump --input=/opt/esbckup/backup/rtp_news_data.json --output=http://192.168.0.18:9200/rtp_news --type=data

 

 

三、定时备份脚本

结合crontab 实现每日指定时间备份,备份成功后删除前一日数据

#!/bin/bash

# 备份根目录
BACKUP_BASE="/opt/esbackup/backup"
# 今日日期(格式:YYYYMMDD)
TODAY=$(date +%Y%m%d)
# 昨日日期(格式:YYYYMMDD)
YESTERDAY=$(date -d "yesterday" +%Y%m%d)

# 定义需要备份的索引列表
INDEXES=(
  "rtp_news"
  "rtp_article"
  "rtp_article_extend"
  "rtp_terms"
)

# 创建今日备份目录
TODAY_DIR="${BACKUP_BASE}/${TODAY}"
mkdir -p "${TODAY_DIR}" || {
  echo "ERROR: 无法创建今日备份目录 ${TODAY_DIR}"
  exit 1
}


# 标记备份是否成功
BACKUP_SUCCESS=true

# 遍历索引进行备份
for index in "${INDEXES[@]}"; do
  echo "开始备份索引: ${index}"
  
  # 备份mapping
  /usr/bin/node /usr/local/lib/node_modules/elasticdump/bin/elasticdump \
    --input="http://192.168.0.18:9200/${index}" \
    --output="${TODAY_DIR}/${index}_mapping.json" \
    --type=mapping
  
  if [ $? -ne 0 ]; then
    echo "ERROR: ${index} mapping备份失败"
    BACKUP_SUCCESS=false
  fi
  
  # 备份data
  /usr/bin/node /usr/local/lib/node_modules/elasticdump/bin/elasticdump \
    --input="http://192.168.10.38:9200/${index}" \
    --output="${TODAY_DIR}/${index}_data.json" \
    --type=data
  
  if [ $? -ne 0 ]; then
    echo "ERROR: ${index} data备份失败"
    BACKUP_SUCCESS=false
  fi
done

# 根据备份结果处理
if [ "${BACKUP_SUCCESS}" = true ]; then
  echo "所有索引备份成功!"
  
  # 删除昨日备份(如果存在)
  YESTERDAY_DIR="${BACKUP_BASE}/${YESTERDAY}"
  if [ -d "${YESTERDAY_DIR}" ]; then
    echo "删除昨日备份: ${YESTERDAY_DIR}"
    rm -rf "${YESTERDAY_DIR}"
  fi
else
  echo "备份失败,保留今日不完整备份,不删除昨日备份"
  # 可选:如果需要清理失败的备份,可以取消下面一行的注释
  # rm -rf "${TODAY_DIR}"
fi

echo "备份流程结束"

 

 

 

 

 
posted @ 2025-11-13 15:29  一文搞懂  阅读(6)  评论(0)    收藏  举报