Mongodb之备份恢复脚本

本分脚本:

!/bin/bash
#备份文件执行路径 which mongodump
DUMP=
#临时备份目录
OUT_DIR=
#本分存放目录
TAR_DIR=
#获取当前系统时间==> 2016_04_11 
DATE=`date +%Y_%m_%d`
#数据库账号
DB_USER=
#数据库密码
DB_PASS=
#保留最近N天的备份
DAYS=
#最后保存的数据库备份名称
TAR_BAK=“mongod_bak_$DATE.tar.gz”

#进入临时备份目录
cd $OUT_DIR
#删除临时备份目录中的文件 #rm -rf $OUT_DIR/*
mv $OUT_DIR/* /tmp/ 
#本次临时备份目录
mkdir -p $OUT_DIR/$DATE
#备份全部数据库
#mongoexport -d foobar -c persons -o D:/persons.json
#mongodump --host 127.0.0.1:27017 -d foobar -o d:/foobar

$DUMP -u $DB_USER -p $DB_PASS -o $OUT_DIR/$DATE
#压缩
tar -zcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE
#删除N天前的备份文件
find $TAR_DIR/ -mtime +$DAYS -delete

 

 

 

恢复脚本:

#!/bin/bash
###########################
#恢复mongodb 数据库
#author:similarface
#date:2016-04-26
#email:similarface@outlook.com
###########################
#恢复数据库的名称 如果不书写恢复的数据库名称 会删除数据库的所有dbs然后恢复,给了就会重新生成加dateflag的库
RECONVERDBNAME=cube_test_
#恢复命令
RECONVERYBIN=/usr/local/mongodb/bin/mongorestore
#备份目录
BACKUPBASEDIR=/BAK/mongodbak/current
#存放的老数据
BACKUPBASEOLDDIR=/BAK/mongodbak/olddata/
#解压所文件的目录
BACKUPBASEEXTRACT=/BAK/mongodbak/extract/

for file in $BACKUPBASEDIR/*
do
        if test -f $file 
        then
                #压缩文件的文件名 去除了绝对路径
                tarfilename=${file##*/}
                #获取时间标签 mongod_bak_DATE.tar.gz 就是这儿的DATE的值
                dateflag=${tarfilename:11:10}
                #解压文件到指定的目录
                tar -xf $file -C ${BACKUPBASEEXTRACT}
                if [[ $? -eq 0 ]];then
                        echo "解压缩成功,备份文件有效!"
                else
                        echo "解压缩失败,备份文件有可能无效,请检查!"
                        exit 0
                fi
                #获取解压缩的绝对路径
                gunzipdir=${BACKUPBASEEXTRACT}/home/davy/mongoBak/${dateflag}/
                #进行数据库的恢复
                if [ -z "$RECONVERDBNAME" ];then
                        ${RECONVERYBIN} --drop ${gunzipdir} 2> /tmp/mongoright${dateflag}.log >>/tmp/mongoerr${dateflag}.err
                else
                        ${RECONVERYBIN} --db ${RECONVERDBNAME}${dateflag} ${gunzipdir}/cube_test 2> /tmp/mongoright${dateflag}.log >>/tmp/mongoerr${dateflag}.err
                fi
                if [[ $? -eq 0 ]];then
                        echo "数据库恢复成功,查看恢复日志/tmp/mongoright${dateflag}.log."
                else
                        echo "数据库恢复失败,查看错误日志/tmp/mongoerr${dateflag}.err."
                fi
                rm -rf ${BACKUPBASEEXTRACT}/*
                if [[ $? -eq 0 ]];then
                        echo "清除压缩文件成功."
                else
                        echo "清除压缩文件失败\n."
                fi
                #将恢复后的文件放在olddata下去
                mv ${BACKUPBASEDIR}/* ${BACKUPBASEOLDDIR}
        fi
done

 

posted @ 2016-04-26 15:43  similarface  阅读(604)  评论(0编辑  收藏  举报