MongoDB备份脚本

MongoDB备份脚本

#!/bin/bash

#########################################################以下参数需要填写#########################################################

#设置mongo路径,不要以斜杠结尾
MONGO_PATH=/opt/mongodb
#设置mongo管理用户名
MONGO_USER=root
#设置mongo管理用户密码
MONGO_PWD=123456
#设置mongo备份路径,需要存在,不要以斜杠结尾
MONGO_BACKDIR=/opt/bak
#设置备份天数
MONGO_DAYS=4
#设置备份模式:
#######模式1:数据库是免认证模式用,导出所有库;
#######模式2:数据库是认证模式用,指定数据库名分别导出数据库文件,需要填写具有指定数据库读写或备份权限的账号密码,多个数据库格式按MONGO_DBNAME示范填写;
#######模式3:数据库是认证模式用,导出所有库,需要填写admin数据库下具有所有数据库读写或备份权限的全局账号密码,比如root、readWriteAnyDatabase、readAnyDatabase、backup等角色
############  注意userAdminAnyDatabase角色不具备全局读写,不可用于备份,admin数据库下仅有此角色账户时请选择模式2或创建全局读写账户
MONGO_TYPE=3
#设置指定数据库名,账户,密码,多个数据库信息之间以空格隔开,仅选择模式2时填写
MONGO_DBNAME='ucpplus,ucp,ucp#124' 

################################使用方法 计划任务 例:0 0 * * * /opt/shell/mongobackup.sh################################
##################################################################################################################################
pgrep mongod &>/dev/null || exit
BAK_DIR=$MONGO_BACKDIR/MONGObackup
if [ ! -d "$BAK_DIR" ]; then
  mkdir "$BAK_DIR"
fi

DATE=`date +'%Y-%m-%d-%H%M%S'`
mkdir $BAK_DIR/$DATE
if [ $MONGO_TYPE == 1 ]; then        
    $MONGO_PATH/bin/mongodump -o $BAK_DIR/$DATE && cd $BAK_DIR/$DATE && tar --remove-files -zcvf $BAK_DIR/$DATE/all_$DATE.tar.gz -C $BAK_DIR/$DATE ./* 
elif [ $MONGO_TYPE == 2 ]; then
  for j in $MONGO_DBNAME
  do
    MONGO_DBNAME_SINGLE=`echo $j | awk -F',' '{print $1}'`
    MONGO_USER_SINGLE=`echo $j | awk -F',' '{print $2}'`
    MONGO_PWD_SINGLE=`echo $j | awk -F',' '{print $3}'`   
    $MONGO_PATH/bin/mongodump -u$MONGO_USER_SINGLE -p$MONGO_PWD_SINGLE -d $MONGO_DBNAME_SINGLE -o $BAK_DIR/$DATE && cd $BAK_DIR/$DATE && tar --remove-files -zcvf $BAK_DIR/$DATE/$MONGO_DBNAME_SINGLE.tar.gz -C $BAK_DIR/$DATE $MONGO_DBNAME_SINGLE 
  done 
elif [ $MONGO_TYPE == 3 ]; then
   $MONGO_PATH/bin/mongodump -u$MONGO_USER -p$MONGO_PWD -o $BAK_DIR/$DATE  && cd $BAK_DIR/$DATE  && tar --remove-files -zcvf $BAK_DIR/$DATE/all_$DATE.tar.gz -C $BAK_DIR/$DATE ./*
fi

#delete expire file leave lastest  files
num=`ls -1 $BAK_DIR 2>/dev/null | wc -l`
if [ $num -gt $MONGO_DAYS ]
  then
  echo "delete old files "
  DEL_DAYS=`expr $num - $MONGO_DAYS`
  for i in `ls -1t $BAK_DIR| tail -$DEL_DAYS`
  do
    echo "rm -rf $BAK_DIR/$i"
    rm -rf $BAK_DIR/$i
  done
fi
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值