mysql에서 수행 한 레코드 변경 방법을 디버그합니다.mongoDB Binlogs 읽기
mysqlbinlog bin-88.log | grep "record-id"--before = 2 --after = 2
mongo와 비슷한 기능을 수행하려면 어떻게해야합니까?
감사합니다.
mysql에서 수행 한 레코드 변경 방법을 디버그합니다.mongoDB Binlogs 읽기
mysqlbinlog bin-88.log | grep "record-id"--before = 2 --after = 2
mongo와 비슷한 기능을 수행하려면 어떻게해야합니까?
감사합니다.
mongodb에 oplog가 있지만 복제본 세트가있을 때만 채워집니다. capped collection입니다.
당신과 같이 쉘에서이를 조회 할 수 있습니다
use local;
db.oplog.rs.find(); // specify "ns" and "_id" here, if desired
당신은 MongoDB를 비슷한 방법을 사용할 수 있습니다. binlog에 해당하는 것은 oplog이며 (MySQL binlog와 같이) 일반적으로 복제에 사용됩니다. MongoDB에서 oplog
은 local
데이터베이스에있는 oplog.rs
이라는 capped collection입니다. 제한된 컬렉션이므로 oplog는 고정 된 양의 기록을 유지합니다. 당신은 change the size of the oplog 일 수 있습니다.
MongoDB가 oplog를 만들려면 복제를 사용하도록 mongod
을 구성해야합니다. 만 oplog를 원할 경우 노드가 하나만있는 더미 복제본 세트를 만들 수 있습니다.
참고 : 권장 생산 구성은 장애 조치 및 데이터 중복을 위해 최소 3 개의 노드로 복제를 사용하는 것입니다.
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 binlog에서 유의해야 할 점은 MongoDB oplog는 적용 할 변경 사항이 idempotent 인 것입니다. MySQL binlog는 데이터를 수정하는 명령문 목록입니다. oplog
형식을 사용하면 MongoDB는 원하지 않는 부작용없이 여러 번 안전하게 항목을 적용 할 수 있습니다. 또한 binlog에 나타나는 것과 같은 단일 "UPDATE .."문보다는 여러 문서에 영향을주는 업데이트 명령의 결과가 oplog의 각 문서에 대한 별도 항목으로 있음을 알 수 있습니다.
+1, 광산보다 조금 더 철저합니다! "쿼리 로그가 아님"이라고 말하면, binlog는 쿼리 로그와 같지만 실제로는 삽입/업데이트/삭제 명령문 로그입니다 (binlog에는 수정하지 않는 쿼리가 없습니다). –
@WesFreeman : 의견을 주셔서 감사합니다. 마지막 단락을'query'보다는'statement'로 명확히하기 위해 업데이트했습니다. – Stennie