备份工具
在Mongodb中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。
mongodump命令可以通过参数指定导出的数据量级转存的服务器。
语法
mongodump命令脚本语法如下:
>mongodump -h dbhost -d dbname -o dbdirectory
- -h:
MongoDB 所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
- -d:
需要备份的数据库实例,例如:test
- -o:
备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。
恢复工具
mongodb使用 mongorestore 命令来恢复备份的数据。
语法
mongorestore命令脚本语法如下:
>mongorestore -h <hostname><:port> -d dbname<path>
- --host <:port>, -h <:port>:
MongoDB所在服务器地址,默认为: localhost:27017
- --db , -d :
需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
- --drop:
恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!
- <path>:
mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:\data\dump\test。
你不能同时指定 <path> 和 --dir 选项,--dir也可以设置备份目录。
- --dir:
指定备份的目录
你不能同时指定 <path> 和 --dir 选项。
数据库备份与恢复
数据库备份
bin/mongodump -h 127.0.0.1 -d test -o /app/mongodb/backup
数据库恢复
bin/mongorestore -d test_new /app/mongodb/backup/test/
集合备份与恢复
集合备份
bin/mongodump -h 127.0.0.1 -d test --collection mycol -o /app/mongodb/backup/collection
集合恢复
bin/mongorestore -d test -c mycol /app/mongodb/backup/collection/test/mycol.bson
脚本
全库备份脚本
#!/bin/bash
sourcepath='/app/mongodb/bin'
targetpath='/app/mongodb/backup'
nowtime=$(date "+%Y%m%d")
start()
{
${sourcepath}/mongodump --host 127.0.0.1 --port 27017 --oplog --gzip --out ${targetpath}/${nowtime}
}
execute()
{
echo "================================ $(date) bak 127.0.0.1 27017 mongodb back start ${nowtime}========="
start
if [ $? -eq 0 ]
then
echo "The MongoDB BackUp Successfully!"
else "The MongoDB BackUp Failure"
fi
}
if [ ! -d "${targetpath}/${nowtime}/" ]
then
mkdir ${targetpath}/${nowtime}
fi
execute
baktime=$(date -d '-3 days' "+%Y%m%d")
if [ -d "${targetpath}/${baktime}/" ]
then
rm -rf "${targetpath}/${baktime}/"
echo "=======${targetpath}/${baktime}/===删除完毕=="
fi
echo "================================ $(date) 127.0.0.1 27017 mongodb back end ${nowtime}========="
全库还原脚本
#!/bin/bash
echo -e "[ Mongodb ] 全库恢复脚本"
host=127.0.0.1
mongo_bin=/app/mongodb/bin/
backpath='/app/mongodb/backup'
echo -e "\033[32;1m[ 选择要恢复全库的日期 ] \033[0m"
for backfile in `ls $backpath`; 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 $backpath/$date_bak ];then
read -p "请确认是否恢复全库备份[y/n]:" choice
if [ "$choice" == "y" ];then
echo -e "\033[32;1m正在恢复全库备份,请稍后...\033[0m"
$mongo_bin/mongorestore --host $host --port 27017 --oplogReplay --gzip $backpath/$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