首先需要介绍一下mongodb local库的作用
local库是MongoDB的系统库,记录着时间戳和索引和复制集等信息

test:PRIMARY> use local
switched to db local

test:PRIMARY> show tables;
system.replset
me
startup_log
replset.minvalid
oplog.rs
replset.election
test:PRIMARY>

local库下的每个集合分别记录的内容

local库下面的me集合保存了服务器名称

local库下面的replset.minvalid集合保存了数据库最新操作的时间戳

local库下面的startup_log集合记录这mongod每一次的启动信息

local库下面的system.indexes集合记录当前库的所有索引信息

local库下面的system.replset记录着复制集的成员配置信息rs.conf()读取这个集合

local库下面的oplog.rs集合记录着所有操作,MongoDB就是通过oplog.rs来实现数据同步的。当Primary节点插入一条数据后,oplog.rs集合中就会多一条记录

op:操作类型,插入对应i;更新对应u;删除对应d;但有一种情况是n,它表示无操作(no-op),紧紧代表一个消息信息。
例如:
查询oplog里的insert记录,对应op为i的记录:
test:PRIMARY> db.oplog.rs.find({"op" : "i"}).pretty().limit(3)

查update操作命令:
test:PRIMARY> db.oplog.rs.find({"op" : "u"}).pretty().limit(3)
test:PRIMARY>
查delete操作命令:
test:PRIMARY> db.oplog.rs.find({"op" : "d"}).pretty().limit(3)

根据时间范围查操作:
例如:
查找2017年9月1日之后的操作记录:
test:PRIMARY> db.oplog.rs.find({"o.createTime": {$gte:new Date(2017,9,1)}}).limit(3)

查2017年9月1日到10月31日之间的操作记录:
test:PRIMARY> db.oplog.rs.find({"o.createTime": {$gte:new Date(2017,9,1),$lte:new Date(2017,10,31)}}).limit(3)

我们查查对chenfeng表进行操作的所有的 oplog 记录
test:PRIMARY> db.oplog.rs.find({ns : "testdb.chenfeng"})

查操作的时间戳:
 db.oplog.rs.find({"op" : "i","ns" : "testdb.chenfeng",},{ts:1}).pretty()
{ "ts" : Timestamp(1509246747, 1) }
{ "ts" : Timestamp(1509246747, 2) }
{ "ts" : Timestamp(1509246747, 3) }
{ "ts" : Timestamp(1509246747, 4) }
{ "ts" : Timestamp(1509246747, 5) }

当前操作时间点的时间戳:
test:PRIMARY> rs.status().members[0].optime.ts
Timestamp(1509247609, 3001)

如何备份oplog集合:
[root@192 new]# mongodump --host localhost --port 9336 -uadmin -padmin
 --authenticationDatabase=admin  -d local -c oplog.rs -o /root/new
2017-10-29T12:36:45.605+0800    writing local.oplog.rs to local/oplog.rs.bson
2017-10-29T12:36:48.606+0800    [#.......................]  local.oplog.rs  398917/4937240  (8.1%)
2017-10-29T12:36:51.610+0800    [###.....................]  local.oplog.rs  812569/4937240  (16.5%)
2017-10-29T12:36:54.611+0800    [#####...................]  local.oplog.rs  1208741/4937240  (24.5%)
2017-10-29T12:36:57.607+0800    [#######.................]  local.oplog.rs  1570342/4937240  (31.8%)
2017-10-29T12:37:00.617+0800    [#########...............]  local.oplog.rs  1948323/4937240  (39.5%)
2017-10-29T12:37:03.606+0800    [###########.............]  local.oplog.rs  2346269/4937240  (47.5%)
2017-10-29T12:37:06.606+0800    [#############...........]  local.oplog.rs  2741569/4937240  (55.5%)
2017-10-29T12:37:09.609+0800    [###############.........]  local.oplog.rs  3137392/4937240  (63.5%)
2017-10-29T12:37:12.606+0800    [#################.......]  local.oplog.rs  3533685/4937240  (71.6%)
2017-10-29T12:37:15.610+0800    [##################......]  local.oplog.rs  3897290/4937240  (78.9%)
2017-10-29T12:37:19.672+0800    [###################.....]  local.oplog.rs  3947430/4937240  (80.0%)
2017-10-29T12:37:21.609+0800    [####################....]  local.oplog.rs  4147978/4937240  (84.0%)
2017-10-29T12:37:24.607+0800    [#####################...]  local.oplog.rs  4518546/4937240  (91.5%)
2017-10-29T12:37:27.606+0800    [#######################.]  local.oplog.rs  4910376/4937240  (99.5%)
2017-10-29T12:37:27.758+0800    writing local.oplog.rs metadata to local/oplog.rs.metadata.json
2017-10-29T12:37:27.770+0800    done dumping local.oplog.rs (4937240 documents)

用bsondump查操作记录:
查插入操作:
# bsondump oplog.rs.bson | grep "\"op\":\"i\"" | head

查删除操作:
# bsondump oplog.rs.bson | grep "\"op\":\"d\"" | head

查更新操作:
[root@192 local]# bsondump oplog.rs.bson | grep "\"op\":\"u\"" | head

恢复oplog集合命令:
mongorestore --host localhost --port 9336 -uadmin -padmin
 --authenticationDatabase=admin  -d local -c oplog.rs
/root/new/local/oplog.rs.bson

mongo oplog 整理的更多相关文章

  1. mongo学习整理

    mongo做为NOSQL家族中一员,被广泛使用以及应用到生产环境中,有其出色的性能.关系型数据库(RDBMS )在互联网中依然是不可替代的一部分,mongo基于NOSQL的特性,在程序中RDBMS不适 ...

  2. Mongodb基于oplog恢复至任意时间

    背景: 最近后端基于mongo的项目越来越多,MySQL基于冷备份+binlog可以恢复至任意时间点,那么mongo是否有同样的功能呢?经过调研发现可以通过dump+oplog可以实现粒度更细致的恢复 ...

  3. [Solr] (源) Solr与MongoDB集成,实时增量索引

    一. 概述 大量的数据存储在MongoDB上,需要快速搜索出目标内容,于是搭建Solr服务. 另外一点,用Solr索引数据后,可以把数据用在不同的项目当中,直接向Solr服务发送请求,返回xml.js ...

  4. Solr与MongoDB集成,实时增量索引

    Solr与MongoDB集成,实时增量索引 一. 概述 大量的数据存储在MongoDB上,需要快速搜索出目标内容,于是搭建Solr服务. 另外一点,用Solr索引数据后,可以把数据用在不同的项目当中, ...

  5. 基于netcore实现mongodb和ElasticSearch之间的数据实时同步的工具(Mongo2Es)

    基于netcore实现mongodb和ElasticSearch之间的数据实时同步的工具 支持一对一,一对多,多对一和多对多的数据传输方式. 一对一 - 一个mongodb的collection对应一 ...

  6. MongoDB-Elasticsearch 实时数据导入

    时间  2017-09-18 栏目 MongoDB 原文   http://blog.csdn.net/liangxw1/article/details/78019356 5 ways to sync ...

  7. TiDB 在摩拜单车的深度实践及应用

    一.业务场景 摩拜单车 2017 年开始将 TiDB 尝试应用到实际业务当中,根据业务的不断发展,TiDB 版本快速迭代,我们将 TiDB 在摩拜单车的使用场景逐渐分为了三个等级: P0 级核心业务: ...

  8. mongo 原理 Replica Set Oplog

    [客户的写请求全部发送至主节点] Primary. The primary receives all write operations. Secondaries. Secondaries replic ...

  9. mongo安装、备份与常见命令整理

    http://zlboy888.blog.163.com/blog/static/315357072012919241104/ 1 下载安装包  官方下载地址:http://www.mongodb.o ...

随机推荐

  1. linux命令总结dd命令详解

    一:dd命令 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512:c=1:k=1024:w=2 参数注释: if=文件 ...

  2. django中模板变量与内置标签以及过滤器

    本文参考 官方文档 . 一  模板变量 格式: {{ variable_name }} variable_name   命名规则与变量命名规则类似,允许字符数字下划线,不允许标点. variable_ ...

  3. java基础-迭代器(Iterator)与增强for循环

    java基础-迭代器(Iterator)与增强for循环 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Iterator迭代器概述 Java中提供了很多个集合,它们在存储元素时 ...

  4. [理论篇]一.JavaScript中的死连接`javascript:void(0)`和空连接`javascript:;`

    void 运算符 void 运算符会对给定的表达式进行求值,然后直接返回 undefined void 运算符通常只用于获取 undefined 的原始值,一般使用 void(0)(等同于 void ...

  5. spring-boot添加自定义拦截器

    spring-boot中的WebMvcConfigurerAdapter类提供了很多自定义操作的方法,先贴出来大家看看 package org.springframework.web.servlet. ...

  6. Docker中执行Shell出现乱码

    问题描述 最近遇到一个问题: 执行命令 docker exec f4af9b sh -c 'bash /tmp/build.sh' 命令在docker中执行shell,会出现中文乱码的问题.但是在do ...

  7. Netty URL路由方案探讨

    最近在用Netty做开发,需要提供一个http web server,供调用方调用.采用Netty本身提供的HttpServerCodec handler进行Http协议的解析,但是需要自己提供路由. ...

  8. 【转】C#中PrintDocument类详解

    PrintDocument组件是用于完成打印的类,其常用属性.方法和事件如下: 属性DocumentName:字符串类型,记录打印文档时显示的文档名(例如,在打印状态对话框或打印机队列中显示). 方法 ...

  9. c++中引用的用法(转)

    from here 对于习惯使用C进行开发的朋友们,在看到c++中出现的&符号,可能会犯迷糊,因为在C语言中这个符号表示了取地址符,但是在C++中它却有着不同的用途,掌握C++的&符号 ...

  10. HDU 4521 小明系列问题——小明序列 (线段树 单点更新)

    题目连接 Problem Description 大家都知道小明最喜欢研究跟序列有关的问题了,可是也就因为这样,小明几乎已经玩遍各种序列问题了.可怜的小明苦苦地在各大网站上寻找着新的序列问题,可是找来 ...