Mongodb通过shell脚本增量备份到HDFS
来源:互联网 发布:怎样分享淘宝宝贝 编辑:程序博客网 时间:2024/05/29 02:59
用Mongodb自带的Mongoexport,通过shell脚本的方式进行增量备份到HDFS上
1.思路介绍:
Mongodb安装目录下bin目录里有两个工具:mongoexport和mongodump这两个工具可以实现备份mongodb的数据。用法也类似,区别这里不做说明,自行搜索。mongoexport可以导出数据到外部文件中,mongoexport通过指定参数的方式来索要备份的mongodb数据库、集合、以及备份的条件、和导出到外部文件的路径。如:
mongoexport -o /home/result.csv
就是通过-o指定导出的路径。
其中有一个参数:-q 它的作用是指定备份的条件,通过这个参数,就可以对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脚本即可。
阅读全文
0 0
- Mongodb通过shell脚本增量备份到HDFS
- shell脚本实现mysql数据增量备份
- mysql增量备份二进制日志shell脚本
- MySQL增量备份脚本和异地备份脚本【Shell】
- MongoDB 增量备份方案
- mongodb集群增量备份
- Nocatalog 下的RMAN 增量备份 shell脚本
- Nocatalog 下的RMAN 增量备份 shell脚本
- Nocatalog 下的RMAN 增量备份 shell脚本
- Nocatalog 下的RMAN 增量备份 shell脚本
- Nocatalog 下的RMAN 增量备份 shell脚本
- Nocatalog 下的RMAN 增量备份 shell脚本
- 部署xtrabckup备份_附带shell增量脚本
- percona xtrabackupd定期做全备,增量备份shell脚本
- oracle 增量备份脚本
- oracle 增量备份脚本
- rman增量备份脚本
- 如何通过shell脚本操作MongoDB
- shu415 A序列 lis
- Java String/StringBuffer 和 StringBuild
- 生成元 ,紫书P52UVa1583
- Oracle.DataBase.Server.11g.R2.For.CentOS.7.1.INSTALL
- mxArray数据类型
- Mongodb通过shell脚本增量备份到HDFS
- OpenCV3.1.0安装配置与OpenCV_contrib库配置
- 分析APK包大小的方法
- 获取验证码按钮的计时
- [LeetCode
- 爬虫总结
- 最长回文串 Manacher
- 一个分布式服务器集群架构方案
- ADXL345中断的初始化设置