#!/bin/bash #created by qiqi 2018-5-4 #创建备份用户 #use admin; #db.createUser( # { # user: "myuser", # pwd: "xxxxxxx", # roles: [ { role: "backup", db: "admin" } ] # } #) #db.auth("myuser","xxxxxxx") #验证用户是否创建成功 USERNAME=myuser #备份的用户名 PASSWORD=xxxxxxx #备份的密码 HOST=1.1.1.1 #备份主机 PORT=3717 DATE=`date +%Y-%m-%d` #用来做备份文件名字的一部分 OLDDATE=`date +%Y-%m-%d -d '-7 days'` #本地保存天数 #指定命令所用的全路径 MONGODUMP=/data/mongo_slave/bin/mongodump MONGO=/data/mongo_slave/bin/mongo #创建备份的目录和文件 BACKDIR=/data/backup/mongodb [ -d ${BACKDIR} ] || mkdir -p ${BACKDIR} [ -d ${BACKDIR}/${DATE} ] || mkdir ${BACKDIR}/${DATE} [ ! -d ${BACKDIR}/${OLDDATE} ] || rm -rf ${BACKDIR}/${OLDDATE} #保存5天 多余的删除最前边的 #开始备份 for循环想要备份的数据库 #MONGODBLIST=(admin blockchain copyright_filing copyright_monitor test) #MONGODBLIST=$(/data/mongo_slave/bin/mongo 1.1.1.1:3717/admin -u'admin' -p'banquanjia2017!' --eval "printjson(db.getMongo().getDBNames())" | grep -iv "\[\|\]\|MongoDB\|connecting\|local" | sed 's/"//' | sed 's/",//' | sed 's/"//')
#以下这条命令要先在命令行 试试 在用到脚本里 MONGODBLIST=`${MONGO} ${HOST}:${PORT}/admin -u$USERNAME -p$PASSWORD --eval "printjson(db.getMongo().getDBNames())" | grep -iv "\[\|\]\|MongoDB\|connecting\|local" | sed 's/"//' | sed 's/",//' | sed 's/"//'` for db in ${MONGODBLIST[*]} do ${MONGODUMP} --host ${HOST}:${PORT} -u ${USERNAME} -p ${PASSWORD} -d ${db} -o ${BACKDIR}/${DATE}/ --authenticationDatabase=admin done ##恢复的方法如下 #/mongorestore --port 端口 -d 数据库 -o 备份的路径 #/mongorestore --port 27017 -d admin --drop backup/admin/ #mongoimport 是导入数据 同样的覆盖 不同的新增 #mongorestore 会覆盖所有 mongorestore --host 127.0.0.1:27017 -u admin -p root123 -d copyright_filing --authenticationDatabase=admin #mongoimport 相同的覆盖 不同的导入
核心点
/data/mongodb-3.2.16/bin/mongo 1.1.1.1:3717/admin -u'xxx' -p'xxxx' --eval "printjson(db.getMongo().getDBNames())" | grep -iv "\[\|\]\|MongoDB\|connecting\|local" | sed 's/"//' | sed 's/",//' | sed 's/"//'
# --eval 可以不进入数据库 就执行一些命令 对于写脚本 十分的方便
#show dbs; 在这种格式里不能用 db.getMongo().getDBNames() 这是查看数据库的另一种方式