1、备份-脚本 mongodb_backup_all.sh

!/bin/bashi
#### 请在此处输入关键参数,例如程序路径,账号,密码,实例端口###
command_linebin=”/mongodb/mongodb-4.1.10/bin”
username=”xxx”
password=”xxx”
port=”37017”
####
####comments0 start 第一次运行此脚本时,自动检查创建备份路径 ####
if [ ! -d “/mongodb/backup/all/mongo-$port” ]; then
mkdir -p /mongodb/backup/all/mongo-$port
fi
if [ ! -d “/mongodb/backup/all/log-$port” ]; then
mkdir -p /mongodb/backup/all/log-$port
fi
bkdatapath=/mongodb/backup/all/mongo-$port
bklogpath=/mongodb/backup/all/log-$port
nowtime=$(date “+%Y%m%d”)
bkfilename=$nowtime
logfilename=$nowtime
####comments0 end ##
start()
{
${command_linebin}/mongodump -h localhost —port $port -u$username -p$password —authenticationDatabase “admin” —oplog —gzip -o $bkdatapath/$bkfilename >> $bklogpath/$logfilename.log 2>&1
}
execute()
{
echo “===Message —MongoDB端口为”$port”的全量备份开始,开始时间为:”$(date -d today +”%Y%m%d%H%M%S”) >> $bklogpath/$logfilename.log
start
if [ $? -eq 0 ]; then
echo “The MongoDB BackUp Successfully!” >> $bklogpath/$logfilename.log
else
echo “The MongoDB BackUp Failure!” >> $bklogpath/$logfilename.log
fi
baktime=$(date -d ‘-7 days’ “+%Y%m%d”)
if [ -d “${bkdatapath}/${baktime}/“ ]; then
rm -rf “${bkdatapath}/${baktime}/“
echo “Message —${bkdatapath}/${baktime}/—删除完毕” >> $bklogpath/$logfilename.log
fi
echo “===Message —MongoDB端口为”$port”的全量备份结束,结束时间为:”$(date -d today +”%Y%m%d%H%M%S”) >> $bklogpath/$logfilename.log
}
execute

===========================================================================================================

2、恢复-脚本 mongodb_restore_all.sh

!/bin/bash
echo -e “\033[31;1m*[ Mongodb ] 全库恢复脚本*\033[0m”
#### 请在此处输入关键参数,例如程序路径,账号,密码,实例端口###
command_linebin=”/mongodb/mongodb-4.1.10/bin”
username=”xxx”
password=”xxx”
port=”37017”
bkdatapath=/mongodb/backup/all/mongo-$port
####
echo -e “\033[32;1m[ 选择要恢复全库的日期 ] \033[0m”
for backfile in ls $bkdatapath; do
echo $backfile
done

read -p “>>>” date_bak
if [[ $date_bak == “” ]] || [[ $date_bak == ‘.’ ]] || [[ $date_bak == ‘..’ ]]; then
echo -e “\033[31;1m输入不能为特殊字符.\033[0m”
exit 1
fi


if [ -d $bkdatapath/$date_bak ]; then
read -p “请确认是否恢复全库备份[y/n]:” choice
if [ “$choice” == “y” ]; then
echo -e “\033[32;1m正在恢复全库备份,请稍后…\033[0m”
$command_linebin/mongorestore -h localhost —port $port -u$username -p$password —authenticationDatabase “admin” —oplogReplay —gzip $bkdatapath/$date_bak
if [ $? -eq 0 ]; then
echo -e “\033[32;1m————全库恢复成功.————\033[0m”
else
echo -e “\033[31;1m恢复失败,请手动检查!\033[0m”
exit 3
fi
else
exit 2
fi
else
echo “\033[31;1m输入信息错误.\033[0m”
exit 1
fi**