MongoDB如何查oplog.rs集合裡的操作日誌

kunlunzhiying發表於2017-12-22
首先需要介紹一下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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28211342/viewspace-2149056/,如需轉載,請註明出處,否則將追究法律責任。

相關文章