Mongodb通过shell脚本增量备份到HDFS
2017-07-10 15:59
676 查看
用Mongodb自带的Mongoexport,通过shell脚本的方式进行增量备份到HDFS上
1.思路介绍:
Mongodb安装目录下bin目录里有两个工具:mongoexport和mongodump这两个工具可以实现备份mongodb的数据。用法也类似,区别这里不做说明,自行搜索。mongoexport可以导出数据到外部文件中,mongoexport通过指定参数的方式来索要备份的mongodb数据库、集合、以及备份的条件、和导出到外部文件的路径。如:
mongoexport -o /home/result.csv
就是通过-o指定导出的路径。
其中有一个参数:-q 它的作用是指定备份的条
4000
件,通过这个参数,就可以对mongodb里的数据做一个筛选,通过筛选出增量数据,然后把它们备份导出。从而实现增量数据备份。
2.需求:
我的需求如下:网页产生的数据一直在往Mongodb里存储,我需要每小时从Mongodb里拉取一次数据,存储到hdfs上。
其中:hdfs的三个节点:node1,node2,node3
Mongodb在另一台机器上。不在集群节点上。
Mongodb存储的数据是Bson类型如下:
{ "_id" : "ad22be19473548248c84feceaf8334f0"
"_class" : "com.cdv.nsite.authc.model.Session"
"userId" : "admin"
"userName" : "admin"
"logonTime" : ISODate("2017-05-10T09:44:34.881Z")
"logonHost" : "11.9.234.85"
"logonIp" : "11.9.234.85"
"lastBang" : NumberLong("1494409485264")
"extraData" : { }
"appName" : "web console"
"userState" : "On"
"state" : "Off"
"sessionGroup" : "default"
"stationId" : "cdv.com"
"inner" : false
"logoffTime" : ISODate("2017-05-10T09:56:08.189Z") }
最终存储在hdfs上的形式如下,通过竖线分隔。
00482b6e238940f9845693dbd0d7b0a1|lf|吕峰|2017-07-07T08:39:06.850Z|22.72.19.2|bs unknown|web console|editsphere_v1|CV|Off|2017-07-07T08:39:28.955Z
3.实现:
☆只要在任意一台node1-3节点上存在mongoexport工具就能备份远程mongodb数据库的数据到本地。
pullMongoData.sh:
#!/bin/bash
mypath=/home/MongoBackup/`date +%Y%m`
if [ ! -d "$mypath" ]; then
mkdir -p $mypath
fi
#得到前一个小时的时间精确到小时,格式为:2017071013
start=`date +%Y%m%d%H -d '-1 hours'`
year=`echo ${start:0:4}`
month=`echo ${start:4:2}`
day=`echo ${start:6:2}`
hour=`echo ${start:8:2}`
#拉取数据的起始时间确定为:2017-07-10 13:00:00
#Mongoexport的条件备份:-q 特定的格式的时间格式,才能进行时间的大小判断。时间要进行如下转换:
#2017-07-10 13:00:00 --> 1499662800 --> 1499662800000 --> 1499691600000 其中最后一步转换是因为Mongodb的时间和标准时间差8小时。
#然后进行时间范围限定的时候采用固定格式:logonTime:{\$gte:Date($timestamp)
startTime=$year-$month-$day' '$hour':'00':'00
timestamp=`date -d "$startTime" +%s`000
timestamp=`expr $timestamp + 28800000`
end=`expr $timestamp + 3600000`
#-h是mongodb的ip --port是端口 -d是数据库 -c是集合 -q是条件 --type=csv是指定输出文件类型 -o是指定输出路径
#具体参数的意义可以自行搜索。
/home/mongodb/bin/mongoexport -h 114.115.147.192 --port 30000 -d nsitedb -c nSite.authc.sessions -q "{logonTime:{\$gte:Date($timestamp),\$lte:Date($end)}}" -f _id,userId,userName,logonTime,logonIp,logonHost,appName,"editsphere_v1","CDV",state,logoffTime --type=csv
-o $mypath/$year$month$day$hour.csv
sed -i s/","/"|"/g "$mypath/$year$month$day$hour.csv"
sed -i '1d' "$mypath/$year$month$day$hour.csv"
if [ -s "$mypath/$year$month$day$hour.csv" ]; then
hdfs dfs -put $mypath/$year$month$day$hour.csv /data/mongo/
fi
写一个定时任务:
crontab -e
* */1 * * * sh /home/shell/pullMongoData.sh
每一个小时执行一次pullMongoData.sh脚本即可。
相关文章推荐
- percona xtrabackupd定期做全备,增量备份shell脚本
- Git学习-->如何通过Shell脚本实现 监控Gitlab备份整个过程并且通过邮件通知得到备份结果?
- 如何通过shell脚本操作MongoDB
- Nocatalog 下的RMAN 增量备份 shell脚本
- mongodb增量/全量备份脚本的实现详解
- Linux 平台下 RMAN 全备 和 增量备份 shell 脚本
- Nocatalog 下的RMAN 增量备份 shell脚本
- 部署xtrabckup备份_附带shell增量脚本
- Linux 平台下 RMAN 全备 和 增量备份 shell 脚本
- svn服务器端的增量备份脚本(shell)
- Linux 平台下 RMAN 全备 和 增量备份 shell 脚本
- Linux 怎么通过shell脚本定时备份mysql数据库
- mysql增量备份二进制日志shell脚本
- Linux 平台下 RMAN 全备 和 增量备份 shell 脚本
- Linux 平台下 RMAN 全备 和 增量备份 shell 脚本
- Centos上通过shell脚本实现数据库备份和还原
- mongodb增量备份脚本的实现和原理详解
- Mysql日常备份和增量备份SHELL脚本
- Linux 平台下 RMAN 全备 和 增量备份 shell 脚本
- Linux 平台下 RMAN 全备 和 增量备份 shell 脚本