转载请附原文链接:http://www.cnblogs.com/wingsless/p/5672057.html

mongodb现在为止还是没有像XtraBackup这样好用的备份工具,因此一般来说会有两种备份办法:拷贝文件和mongodump。拷贝文件这招在MySQL里经常用,但是必须要停掉写入服务,这种办法一般只会用于要进行机器迁移之类的情景,或者停机维护声明发表以后。那么mongodump算是一种比较推荐的办法。

《mongodb权威指南》这本书上指出,mongodump这种办法比较慢,它会把数据dump成BSON文件存储起来。备份一般分为全备和增备两种办法,下面分别说明。

全量备份

全量备份只需要指定--out(-o)参数,即指定备份存储路径即可。基本上这个没什么可说的,《mongodb权威指南》指出,这个工具不是一个快照备份,如果备份过程中仍然有服务对数据进行了更新操作,比如delete,那么可能备份出来的数据中会有根本不应该存在的数据,恢复的时候也会出现莫名其妙的一条数据。其实这个,并不是一个问题。请看下面的增量备份。

增量备份

mongodb自己并没有提供增量备份工具,但是没有问题,mongodb自己有个oplog的东西,这个东西很像MySQL的binlog,记录了所有的操作,而且这个oplog有个特点,叫做幂等性,简单地说就是这个oplog回放多少次效果都是一样的,不会出现数据重复等问题。

{
"ts": Timestamp(1468323972, 37),
"t": NumberLong(1),
"h": NumberLong("-9013437047635619317"),
"v": 2,
"op": "i",
"ns": "test1.testone",
"o": {
"_id": ObjectId("5784d8849fea750f2cce73c7"),
"name": 35
}
}

上面就是oplog的内容,其中"o"中的内容就是document本身了。可以看到我是在test1数据库的testone集合中插入了该document。

根据oplog的特点,就可以利用这个东西来做增量备份了。

首先在全量备份之前,我们需要得到现在的oplog的ts。Timestamp里分别是unix时间戳和序列号。记录下这个ts之后,就可以进行全量备份了。下面还是利用mongodump,只不过这次需要加上两个参数"-d local"和"-c oplog.rs",分别是数据库和collection。另外还有一个很重要的参数,就是"--query",加上一个查询条件即可,下面是一个例子:

mongodump -d local -c oplog.rs --query "{"ts":{$gte:Timestamp(1468323972, 18)}}" -o F:\data\test

1468323972, 18就是我们上面全备之前记录的时间戳和位置。这个命令会将该时间戳之后的所有数据导出来:

增备应该是每天进行的,因此每天都需要将该命令执行一遍,基于第一次的全备即可。

闲话

最近玩了一个工具,叫做mongo-oplog-backup的,是一个用ruby写的工具,在github上开源了,支持全备和增备,也是基于mongodump的,只是在恢复的时候,这个工具还能完成增量备份的bson文件和全量备份的bson的合并。但是ruby是我不会的语言,因此最近也在借鉴人家的思想用python写一个自己的工具,希望能成功吧。

这里附上这个工具的地址,还挺好用的:https://github.com/journeyapps/mongo-oplog-backup

转载请附原文链接:http://www.cnblogs.com/wingsless/p/5672057.html

最新文章

  1. 关于一个sql的优化分析
  2. Java开发环境搭建——Maven配置
  3. Windows中一个22年的漏洞
  4. 完全变味的Windows Azure Marketplace中国版
  5. 【11-23】window常用知识
  6. HDU 1087 简单dp,求递增子序列使和最大
  7. 【BZOJ】2330: [SCOI2011]糖果(差分约束+spfa)
  8. win7下vs2010编译生成sqlite3.dll库
  9. $watch 和 $apply
  10. UVALive 4287 Proving Equivalences(缩点)
  11. Cts框架解析(12)-ITargetPreparer
  12. 校园网之MentoHUST安装与使用
  13. 二、T4模板
  14. puppet证书重申
  15. mysql的面试试题
  16. java的String类型为什么是final
  17. DOM【介绍、HTML中的DOM、XML中的DOM】
  18. SQL 百万级数据提高查询速度的方法
  19. 高并发下的Id生成器
  20. springmvc的简单使用以及ssm框架的整合

热门文章

  1. 【Linux_Fedora_应用系列】_4_安装chrome浏览器
  2. 第 30 章 使用 Emmet 插件
  3. nginx的pass_proxy遇到的坑
  4. CentOS 6.5下Redis安装详细步骤
  5. Nginx负载均衡配置实例详解
  6. python日志模块---logging
  7. 学习 Mobile App 网站制作的11个优秀案例
  8. Sass的使用和基础语法
  9. CORS(跨域资源共享)
  10. SharePoint基于windows验证的如何通过组策略实现IE自动以当前域账号登录SP站点