在mysql中,我調試了一個記錄如何改變閱讀mongoDB Binlogs
mysqlbinlog bin-88.log | grep的 「記錄ID」 --before = 2 --AFTER = 2
我怎麼做蒙戈類似的東西?
謝謝!
在mysql中,我調試了一個記錄如何改變閱讀mongoDB Binlogs
mysqlbinlog bin-88.log | grep的 「記錄ID」 --before = 2 --AFTER = 2
我怎麼做蒙戈類似的東西?
謝謝!
有在MongoDB中的OPLOG,但只有當你有一個副本集被填充。這是一個capped collection。
您可以從外殼像這樣進行查詢:
use local;
db.oplog.rs.find(); // specify "ns" and "_id" here, if desired
可以使用MongoDB中類似的方法。 binlog的等價物是oplog,它通常用於複製(如MySQL二進制日誌)。在MongoDB中的oplog
是capped collection稱爲oplog.rs
其住在local
數據庫。作爲一個封閉的集合,oplog保持了一個固定的歷史數量。你可以change the size of the oplog。
爲了MongoDB的創建OPLOG,你就需要配置mongod
使用複製。如果您只需要需要oplog,則可以創建僅具有一個節點的虛擬副本集。
注:推薦的生產配置是使用複製以最小的三個節點的,因爲這提供了用於故障轉移和數據冗餘。
一個有用的一系列博客文章解釋OPLOG格式的開頭:Replication Internals。你可以像查詢正常的MongoDB集合一樣查詢它,所以你可以嘗試一些更新並查看結果命令是什麼。在一個給定的名稱空間中找到對於給定的對象ID(o2._id
)的所有更新的
實施例(mydb
數據庫,mycollection
):
> use local
> db.oplog.rs.find({'ns':'mydb.mycollection', 'o2._id' : ObjectId("501c87fa9d2b5b2b54437125")})
{
"ts" : Timestamp(1344047454000, 1),
"h" : NumberLong("226994175309144171"),
"op" : "u",
"ns" : "mydb.mycollection",
"o2" : {
"_id" : ObjectId("501c87fa9d2b5b2b54437125")
},
"o" : {
"name" : "Bobby Tables",
"iq" : 180
}
}
在上述例子中,我發現的更新條目(op
:u
)對於ObjectID爲501c87fa9d2b5b2b54437125
的文檔。應用了兩個列更新:名稱,iq。
一個區別從MySQL binlogs要注意的是MongoDB的OPLOG是idempotent更改應用列表; MySQL二進制日誌是修改數據的語句列表。格式oplog
允許MongoDB多次安全地應用條目而沒有不必要的副作用。這也意味着您會發現影響多個文檔的更新命令的結果作爲oplog中每個文檔的單獨條目,而不是像在binlog中出現的單個「UPDATE ..」語句。
+1,比我的更徹底!當你說「不是查詢日誌」時,它聽起來像binlog是查詢日誌,但它們確實是插入/更新/刪除語句日誌(binlog沒有不修改的查詢)。 – 2012-08-04 03:11:51
@WesFreeman:感謝您的反饋..我已經更新了最後一段,用'statement'而不是'query'來闡明。 – Stennie 2012-08-04 03:18:30