写了小shell bash, 用于给mongodb数据进行备份
#!/bin/bash
#backup MongoDB #文件目录
#backup MongoDB
#!/bin/bash
#backup MongoDB
#文件目录
MONGO_HOME=/usr/work/mongoDB
#mongodump命令路径 DUMP=$MONGO_HOME/mongo/bin/mongodump
#临时备份目录
if [ ! -d "$MONGO_HOME/mongodb_bak_now" ]; then
mkdir $MONGO_HOME/mongodb_bak_now
fi
OUT_DIR=$MONGO_HOME/mongodb_bak_now
#备份存放路径
if [ ! -d "$MONGO_HOME/mongodb_bak_list" ]; then
mkdir $MONGO_HOME/mongodb_bak_list
fi
TAR_DIR=/usr/work/mongoDB/mongodb_bak_list
#获取当前系统时间
DATE=`date +%Y_%m_%d`
#DAYS=15代表删除15天前的备份,即只保留近15天的备份
DAYS=
#最终保存的数据库备份文件
TAR_BAK="mongodb_bak_$DATE.tar.gz" cd $OUT_DIR
rm -rf $OUT_DIR/*
mkdir -p $OUT_DIR/$DATE
#备份全部数据库
$DUMP -h dev.iwhere.com:27017 -o $OUT_DIR/$DATE # 带密码链接方式
mongodump -h 172.27.137.26:36137 -d ssdb -o f:\data\ssdb170505 -u=administrator -p=qqddd.222
#压缩为.tar.gz格式
tar -zcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE
#删除15天前的备份文件
find $TAR_DIR/ -mtime +$DAYS -delete exit
写了个远程的, 不太管用
#!/usr/bin/expect
set host_ip [index $argv ]
set username [index $argv ]
set passwd [index $argv ] spawn scp -r $TAR_DIR/$TAR_BAK $username@$host_ip:/opt/mongodb_bak/
expect {
"(yes/no)?"
{
send "yes\n"
expect "*assword:" {send "$password\n"}
}
"*assword:"
{
send "$password\n"
}
}
expect "100%"
expect eof
可加入到linux执行计划里面, 就会实现自动备份了
vim /etc/crontab
* * root /usr/work/mongoDB_back.sh
#秒, 分 时, 日 周, 用户 执行脚本
ps: 当带有密码的备份报错时, 需要添加:
当备份时报错:
Failed: error connecting to db server: server returned error on SASL authentication step: Authentication failed. 需要添加--authenticationDatabase admin
然后, 数据恢复( 使用mongorestore)
./mongorestore -h www.wenbronk: -d test /opt/wenbronk_soft
/mongo/mongodb-.4v/datas/iwhere/project/bak/mongdb_136/mongodb_bak_now/2017_05_03/test/
参数解释:
-h 指定要同步的服务器
-d 指定要同步后的数据库名, 可不同名
然后是本地保存的数据存放路径
–drop:恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用.