mongo oplog 整理
首先需要介绍一下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 整理的更多相关文章
- mongo学习整理
mongo做为NOSQL家族中一员,被广泛使用以及应用到生产环境中,有其出色的性能.关系型数据库(RDBMS )在互联网中依然是不可替代的一部分,mongo基于NOSQL的特性,在程序中RDBMS不适 ...
- Mongodb基于oplog恢复至任意时间
背景: 最近后端基于mongo的项目越来越多,MySQL基于冷备份+binlog可以恢复至任意时间点,那么mongo是否有同样的功能呢?经过调研发现可以通过dump+oplog可以实现粒度更细致的恢复 ...
- [Solr] (源) Solr与MongoDB集成,实时增量索引
一. 概述 大量的数据存储在MongoDB上,需要快速搜索出目标内容,于是搭建Solr服务. 另外一点,用Solr索引数据后,可以把数据用在不同的项目当中,直接向Solr服务发送请求,返回xml.js ...
- Solr与MongoDB集成,实时增量索引
Solr与MongoDB集成,实时增量索引 一. 概述 大量的数据存储在MongoDB上,需要快速搜索出目标内容,于是搭建Solr服务. 另外一点,用Solr索引数据后,可以把数据用在不同的项目当中, ...
- 基于netcore实现mongodb和ElasticSearch之间的数据实时同步的工具(Mongo2Es)
基于netcore实现mongodb和ElasticSearch之间的数据实时同步的工具 支持一对一,一对多,多对一和多对多的数据传输方式. 一对一 - 一个mongodb的collection对应一 ...
- MongoDB-Elasticsearch 实时数据导入
时间 2017-09-18 栏目 MongoDB 原文 http://blog.csdn.net/liangxw1/article/details/78019356 5 ways to sync ...
- TiDB 在摩拜单车的深度实践及应用
一.业务场景 摩拜单车 2017 年开始将 TiDB 尝试应用到实际业务当中,根据业务的不断发展,TiDB 版本快速迭代,我们将 TiDB 在摩拜单车的使用场景逐渐分为了三个等级: P0 级核心业务: ...
- mongo 原理 Replica Set Oplog
[客户的写请求全部发送至主节点] Primary. The primary receives all write operations. Secondaries. Secondaries replic ...
- mongo安装、备份与常见命令整理
http://zlboy888.blog.163.com/blog/static/315357072012919241104/ 1 下载安装包 官方下载地址:http://www.mongodb.o ...
随机推荐
- Docker图形界面管理之Shipyard
一.介绍 Shipyard基于Docker API实现的容器图形管理系统,支持container.images.engine.cluster等功能,可满足我们基本的容器部署需求. 可堆栈的Docker ...
- 获取异常信息e.printStackTrace()的内容
获取异常信息e.printStackTrace()的内容 最近做项目的时候需要记录操作的日志,但是记录异常信息的是发现使用e.getMessage()根本无法满足需要,并且e.getMessage() ...
- UIViewController的初始化
UIViewController的初始化一般有两个: -(instancetype)init; -(instancetype)initWithNibName:(NSString *)nibNameOr ...
- 接口测试Case之面向页面对象编写及规范
一.什么是页面对象化 主要提倡的思想是:万物皆对象,即把一个Page看成一个对象,来进行接口自动化Case的编写,不要闲扯,直接讲怎么个操作法呢? 二.有什么优势? 2.1 Case层次清晰,便于管理 ...
- Java并发编程原理与实战三十四:并发容器CopyOnWriteArrayList原理与使用
1.ArrayList的实现原理是怎样的呢? ------>例如:ArrayList本质是实现了一个可变长度的数组. 假如这个数组的长度为10,调用add方法的时候,下标会移动到下一位,当移动到 ...
- Kafka安装验证及其注意
一.Zookeeper 配置文件说明: # the directory where the snapshot is stored. dataDir=/tmp/zookeeper # the port ...
- 数据库日志文件(databasename_log.ldf)太大 如何清除
在SQL2008中清除日志就必须在简单模式下进行,等清除动作完毕再调回到完全模式.方案一:完全命令模式USE[master] GO ALTER DATABASE DNName SET RECOVERY ...
- 一个简单的ns2实验全过程
实验名称:比较tcp和udp的丢包行为 试验目的:1. 熟练用ns2做网络仿真试验的整个流程:2. 练习写tcl脚本,了解怎么应用http和rtp:3. 练习用awk处理trace数据,了解怎么计算丢 ...
- 20155322 2016-2017-2 《Java程序设计》第5周学习总结
20155322 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 本周的学习任务是课本第八第九章: 第八章主要是讲异常处理.这里要理解Java的错误以对象的方 ...
- 微服务深入浅出(10)-- Docker
概念 1.Docker引擎 一个运行在服务器上的后台进程 2.Docker客户端 分为两种:CLI和RestAPI,与Docker引擎交互 3.Docker镜像 类似于我们使用的光盘,将程序打包到Do ...