集合备份输出开始"
/QQMSG/mongo_db/mongobin404/bin/mongoexport --port 端口号 -u $username -p $password -d NeedArchiveDBColName --authenticationDatabase NeedArchiveDBColName -c NeedArchiveColName -q ' { NeedArchiveByField: { $gte:new Date('$ParamBakStartTimeMS'),$lt:new Date('$ParamBakEndTimeMS') } } ' -o ${targetpath}/${bakcollectionname}
echo "NeedArchiveDBColName库NeedArchiveColName集合备份输出完毕"
}
start
execute()
{
if [ $? -eq 0 ]
then
echo "The MongoDB 集合 NeedArchiveColName 文档mongoexport完成!"
else
echo "The MongoDB 集合 NeedArchiveColName 文档mongoexport失败"
exit
fi
}
###### end ######
###### Start mongomongoimport 将导出的备份集合导入到指定的BKDB 指定的集合中#####
echo "备份输入开始"
/QQMSG/mongo_db/mongobin404/bin/mongoimport -h 归档实例IP --port 归档实例端口 -u $username -p $password -d 归档数据库Name --authenticationDatabase 归档数据库Name -c NeedArchiveColName --file ${targetpath}/${bakcollectionname}
echo "备份输入完毕"
##### End #######
######## start 连接目标Server DB ,检查target DB 上是否已经存在此时间内的文档
export docQtyT2=$(/bin/echo 'db.NeedArchiveColName.find({NeedArchiveByField:{$gte:new Date('\"$ParamBakStartDate\"'),$lt:new Date('\"$ParamBakEndDate\"')}}).count()' | $command_lineT --quiet)
echo "备份目标BKDB集合NeedArchiveColName备份归档后的文档数据为:" $docQtyT2
echo "比较docQty 和 docQtyT2 的大小"
if [ $docQty == $docQtyT2 ]; then
echo "正常:时间段内源数据库集合中的文档数 和 目标数据库集合中还原后的文档数据 相等";
elif [ $docQty -gt $docQtyT2 ]; then
echo "MongoDB-Archive-Exception:时间段内源数据库集合中的文档数 大于 目标数据库集合中还原后的文档数据";
exit
else
echo "MongoDB-Archive-Exception:时间段内源数据库集合中的文档数 小于 目标数据库集合中还原后的文档数据";
exit
fi
########### End #####
########### Start Remove 源数据库源集合指定时间内的记录 ########
docQtyR=$(/bin/echo 'db.NeedArchiveColName.remove({NeedArchiveByField:{$gte:new Date('$ParamBakStartTimeMS'),$lt:new Date('$ParamBakEndTimeMS')}}).nRemoved' | $command_line --quiet)
echo "本次操作Remove集合NeedArchiveColName的文档数据为:" $docQtyR
########## End #########
###### 检查 Remove 后集合的文档数 ###
docQty=$(/bin/echo 'db.NeedArchiveColName.find({NeedArchiveByField:{$gte:new Date('\"$ParamBakStartDate\"'),$lt:new Date('\"$ParamBakEndDate\"')}}).count()' | $command_line --quiet)
echo "NeedArchiveDBColName库NeedArchiveColName集合 此次 Remove 后指定时间剩余的文档数据为:" $docQty
###### End ###
#########删除导出的文件#######
rm -rf ${targetpath}/${bakcollectionname}
if [ $? -eq 0 ]
then
echo "正常:NeedArchiveDBColName库NeedArchiveColName集合导出的文件被删除:" ${targetpath}/${bakcollectionname}
else
echo "MongoDB-Archive-Exception:NeedArchiveDBColName库NeedArchiveColName集合导出的文件未被正常删除" ${targetpath}/${bakcollectionname}
fi
######## End #####
4. 代码说明
4.1 配置基本信息
主要包括:mongo bin 可执行文件所在路径;导出过渡文件的定义;归档账号和密码;集合数据保留天数。
4.2 代码中关键词
明白关键字的含义,可在部署运行前,批量替换
代码中关键词 |
关键词意义 |
NeedArchiveDBColName |
需要归档的集合所在数据库; |
NeedArchiveColName |
需要归档的集合名字; |
归档数据库Name |
归档数据库Name |
NeedArchiveByField |
归档依据的字段;此例中是Date类型的字段,其他类型还要调试。 |
/QQMSG/mongo_db/mongobin404/bin |
Mongo 可执行文件所在路径 |
2000000 |
归档的最大阈值 |
ArchiveDB_端口号 |
过渡文件所放的位置,一个数据库一个文档。不用细化到集合 |
端口号 |
端口号 |
|