基于docker的mongodump / mongorestore 备份恢复

一、下载mongo镜像

docker pull  mongo:latest

二、备份mongodb所有的数据

#!/bin/bash
source /etc/profile

#定义脚本变量
mongo_user=root
mongo_password=xxxxxxxx
mongo_host=192.168.11.210:27017
backup_path=/data/mongo_backup/data
backup_time=`date +%Y%m%d_%H%M%S`

#改变备份目录的权限(写入)
chmod 777 $backup_path

#执行备份
docker run --rm -i \
--network host \
-v $backup_path:$backup_path \
--name mongodump  mongo:latest \
mongodump --uri mongodb://$mongo_user:$mongo_password@$mongo_host -o $backup_path/$backup_time

三、恢复mongodb数据

#!/bin/bash
#定义脚本变量
mongo_user=root
mongo_password=xxxxxxxx
mongo_host=192.168.11.210:27017
backup_path=/data/mongo_backup/data
#恢复的目录
#使用方法:  bash -x restore_mongo.sh 20201027_172549
backup_time=$1

#恢复dbs,除了admin
dbs=`ls -1 $backup_path/$1|grep -v admin`

for dbname in $dbs
do
   docker run --rm -i \
   --network host \
   -v $backup_path:$backup_path \
   --name mongorestore  mongo:latest \
   mongorestore -d $dbname  $backup_path/$1/$dbname  --uri mongodb://$mongo_user:$mongo_password@$mongo_host \
   --authenticationDatabase admin --drop
done

四、crontab自动备份(每天0:30分进行备份)

#mongodb自动备份
30 0  * * *  /bin/bash  /data/mongo_backup/backup_mongo.sh


####mongodb的mongodump和mongorestore必须提前安装,并可直接使用命令(位于/usr/bin下),安装如下

wget https://repo.mongodb.org/yum/redhat/7Server/mongodb-org/3.2/x86_64/RPMS/mongodb-org-tools-3.2.11-1.el7.x86_64.rpm
yum install -y mongodb-org-tools-3.2.11-1.el7.x86_64.rpm
#!/bin/bash
source /etc/profile

#定义脚本变量
mongo_user=paasonly
mongo_password=mongopassword
mongo_host=192.168.11.210
mongo_port=27017
backup_path=/data/mongo_backup/data
backup_time=`date +%Y%m%d_%H%M%S`

#改变备份目录的权限(写入)
chmod 777 $backup_path

#执行备份
./mongodump --host $mongo_host --port $mongo_port -u "$mongo_user" -p "$mongo_password" --authenticationDatabase "paas" -d paas -o $backup_path/$backup_time

备份:
[root@VM_0_8_centos ~]# cat /tmp/backup.sh
#!/bin/bash
sourcepath='/usr/bin/mongodump'     #mongodb文件路径
targetpath='/data/mongo/backup'     #备份的路径
nowtime=$(date +%Y-%m-%d-%H)
replicationname=KFPT                #副本集名
port='27017'                        #端口
ip1='172.17.0.8'
ip2='172.17.0.12'
ip3='172.17.0.13'
admin_read=root
password='xxxxxxxxx'
echo "============== start backup ${nowtime} =============="
start()
{
$sourcepath -h "$replicationname/$ip1:$port,$ip2:$port,$ip3:$port" -u $admin_read -p $password --oplog --gzip -o $targetpath/$nowtime --authenticationDatabase admin
}
 
execute()
{
  start
  if [ $? -eq 0 ]
  then
    echo "back successfully!"
  else
    echo "back failure!"
  fi
}
 
if [ ! -d "${targetpath}/${nowtime}/" ]
then
 mkdir ${targetpath}/${nowtime}
fi
execute
echo "============== back end ${nowtime} =============="
 
echo "============== start zip ${nowtime} =============="
zip -r ${targetpath}/${nowtime}.zip ${targetpath}/${nowtime}
rm -rf  ${targetpath}/${nowtime}
echo "============== zip end ${nowtime} =============="
 
echo "============== start delete seven days ago back ${nowtime} =============="
find ${targetpath} -type f -mtime +7 -name "*.zip" -exec rm -rf {} \;  
echo "============== delete end ${nowtime} =============="
 
恢复:
[root@VM_0_8_centos ~]# cat /tmp/restore.sh
#!/bin/bash
sourcepath='/usr/bin/mongorestore'     #mongodb文件路径
targetpath='/data/mongo/backup'      #备份的路径
nowtime=$(date +%Y-%m-%d-%H)
replicationname=KFPT                 #副本集名
port='27017'                          #端口
ip1='172.17.0.8'
ip2='172.17.0.12'
ip3='172.17.0.13'
admin_read=root
password='xxxxxxxx'
$sourcepath -h "$replicationname/$ip1:$port,$ip2:$port,$ip3:$port" -u $admin_read -p $password --authenticationDatabase=admin --oplogReplay --gzip $targetpath/$nowtime        ##$targetpath/$nowtime是备份文件的具体目录和名称
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值