一、下载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是备份文件的具体目录和名称