本分脚本:
!/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 "清除压缩文件失败 ." fi #将恢复后的文件放在olddata下去 mv ${BACKUPBASEDIR}/* ${BACKUPBASEOLDDIR} fi done