mongodb 数据库备份脚本
写了小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=15 #最终保存的数据库备份文件 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 0] set username [index $argv 1] set passwd [index $argv 2] 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
00 00 * * 7 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:27017 -d test /opt/wenbronk_soft /mongo/mongodb-3.4v/datas/iwhere/project/bak/mongdb_136/mongodb_bak_now/2017_05_03/test/
参数解释:
-h 指定要同步的服务器 -d 指定要同步后的数据库名, 可不同名 然后是本地保存的数据存放路径 –drop:恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用.