Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
MongoDBµÄ³£¹æ±¸·Ý²ßÂÔ
 
×÷Õߣºyaoxing À´Ô´£º²©¿ÍÔ° ·¢²¼ÓÚ 2016-4-1
  2578  次浏览      39
 

MongoDBµÄ±¸·ÝÆäʵËãÊÇÒ»¸ö»ù±¾²Ù×÷£¬×î½ü×ÜÊÇÓÐÈËÎÊÆð£¬¿´À´ºÜ¶àÈ˶ÔÕâÀﻹ²»Ì«ÊìϤ¡£ÎªÁ˱ÜÃâÒ»´ÎÓÖÒ»´ÎµØÖظ´½âÊÍ£¬ÌØ×ܽá³Éһƪ²©¿Í¹©ºóÀ´Õß²éÔÄ¡£ÈçÓв»¾¡ÕýÈ·Ö®´¦ÇëÖ¸Õý¡£

1. ÄÚ½¨·½·¨

1.1 ¸´ÖÆÊý¾Ý¿âÎļþ

²»Óöà×ö½âÊÍ£¬¼¸ºõ¶ÔÈκÎÊý¾Ý¿â¶¼ÓÐÓ㬼òµ¥´Ö±©¡£µ«Ïñ¶àÊýÊý¾Ý¿âÒ»Ñù£¬Õâ¸ö²Ù×÷±ØÐëÔÚmongodʵÀýÍ£Ö¹µÄÇé¿öϽøÐвÅÄܱ£Ö¤ÄãµÃµ½µÄÊÇÕýȷ״̬ϵÄÊý¾Ý¿â¡£·ñÔòÔÚ±¸·Ý¹ý³ÌÖÐÈç¹ûÓÐд²Ù×÷£¬¿ÉÄÜÔì³É±¸·Ýµ½µÄ¿â´¦ÓÚ·ÇÕý³£×´Ì¬¶ø²»¿ÉʹÓᣱØÐëÍ£Ö¹Êý¾Ý¿âÕâÒ»µã¾ÍÔì³ÉÁËÕâ¸ö·½·¨µÄ¿ÉÓÃÐԷdz£µÍ£¬Ê¹Óó¡¾°ÓÐÏÞ¡£

1.2 mongodump/mongorestore

ÎÒ²»´òËãϸ˵ÕâÁ½¸öÃüÁîÈçºÎʹÓã¬ÒòΪ½éÉÜÕâÁ½¸öÃüÁîµÄÎÄÕÂÍøÉÏÒѾ­Ò»´ó¶ÑÁË£¬´ó¼Ò¿ÉÒÔÇáËɴӱ𴦻òÕß¹Ù·½ÎĵµÖÐÕÒµ½ËµÃ÷¡£²»Ïëϸ˵µÄÁíÒ»¸öÔ­ÒòÒ²ÊÇÏ£Íû¿´µ½ÕâÀïµÄ¶ÁÕßÄܹ»Ñø³É¶ÀÁ¢½â¾öÎÊÌâµÄÄÜÁ¦£¬²»Òª¶ÔËùνµÄ¡°¸ßÊÖ¡±²úÉúÒÀÀµ£¬Óöµ½ÎÊÌâ¶ÀÁ¢Ë¼¿¼¶ÀÁ¢½â¾ö£¬Õ⽫ÊÇÄã½ñºóµÄµÀ·Éϱز»¿ÉÉٵļ¼ÄÜÖ®Ò»¡£

ÏÂÃæ½éÉÜһЩ±ðÈË˵µÃÏà¶ÔÉٵĶ«Î÷¡£

1.2.1 ³ýÁËmongodump/mongorestoreÖ®Í⻹ÓÐÒ»¶Ô×éºÏÊÇmongoexport/mongoimport

Çø±ðÔÚÄÄÀ

1.mongoexport/mongoimportµ¼Èë/µ¼³öµÄÊÇJSON¸ñʽ£¬¶ømongodump/mongorestoreµ¼Èë/µ¼³öµÄÊÇBSON¸ñʽ¡£

2.JSON¿É¶ÁÐÔÇ¿µ«Ìå»ý½Ï´ó£¬BSONÔòÊǶþ½øÖÆÎļþ£¬Ìå»ýСµ«¶ÔÈËÀ༸ºõûÓпɶÁÐÔ¡£

3.ÔÚһЩmongodb°æ±¾Ö®¼ä£¬BSON¸ñʽ¿ÉÄÜ»áËæ°æ±¾²»Í¬¶øÓÐËù²»Í¬£¬ËùÒÔ²»Í¬°æ±¾Ö®¼äÓÃmongodump/mongorestore¿ÉÄܲ»»á³É¹¦£¬¾ßÌåÒª¿´°æ±¾Ö®¼äµÄ¼æÈÝÐÔ¡£µ±ÎÞ·¨Ê¹ÓÃBSON½øÐÐ¿ç°æ±¾µÄÊý¾ÝÇ¨ÒÆµÄʱºò£¬Ê¹ÓÃJSON¸ñʽ¼´mongoexport/mongoimportÊÇÒ»¸ö¿ÉÑ¡Ïî¡£¿ç°æ±¾µÄmongodump/mongorestore¸öÈ˲¢²»ÍƼö£¬ÊµÔÚÒª×öÇëÏȼì²éÎĵµ¿´Á½¸ö°æ±¾ÊÇ·ñ¼æÈÝ£¨´ó²¿·ÖʱºòÊǵģ©¡£

4.JSONËäÈ»¾ßÓÐ½ÏºÃµÄ¿ç°æ±¾Í¨ÓÃÐÔ£¬µ«ÆäÖ»±£ÁôÁËÊý¾Ý²¿·Ö£¬²»±£ÁôË÷Òý£¬ÕË»§µÈÆäËû»ù´¡ÐÅÏ¢¡£Ê¹ÓÃʱӦ¸Ã×¢Òâ¡£

×ÜÖ®£¬ÕâÁ½Ì×¹¤¾ßÔÚʵ¼ÊʹÓÃÖи÷ÓÐÓÅÊÆ£¬Ó¦¸Ã¸ù¾ÝÓ¦Óó¡¾°Ñ¡ÔñʹÓ㨺ÃÏñ¸úû˵һÑù£©¡£µ«ÑϸñµØËµ£¬mongoexport/mongoimportµÄÖ÷Òª×÷Óû¹Êǵ¼Èë/µ¼³öÊý¾ÝʱʹÓ㬲¢²»ÊÇÒ»¸öÕæÕýÒâÒåÉϵı¸·Ý¹¤¾ß¡£ËùÒÔÕâÀïÒ²²»Õ¹¿ª½éÉÜÁË¡£

1.2.2 mongodumpÓÐÒ»¸öÖµµÃÒ»ÌáµÄÑ¡ÏîÊÇ--oplog

×¢ÒâÕâÊÇreplica set»òÕßmaster/slaveģʽרÓã¨standaloneģʽÔËÐÐmongodb²¢²»ÍƼö£©¡£

--oplog use oplog for taking a point-in-time snapshot

¿´Ó¢ÎÄ˵Ã÷ºÃÅ£BµÄÑù×Ó£¬point-in-time¿ìÕÕŶ£¬ÎÒµÚÒ»´Î¿´µ½Õâ¾ä»°µÄʱºòµÄÀí½âÊÇËü¿ÉÒÔÈÃÊý¾Ý¿â»Øµ½Õâ¶Îʱ¼äÖеÄÈÎÒâÒ»¸öʱ¼äµãµÄ״̬£¬ÃÀÁ˺ÃÒ»Õó¡£µ«Êµ¼ÊÉϲ¢²»ÊÇ¡£ËüµÄʵ¼Ê×÷ÓÃÊÇÔÚµ¼³öµÄͬʱÉú³ÉÒ»¸öoplog.bsonÎļþ£¬´æ·ÅÔÚÄ㿪ʼ½øÐÐdumpµ½dump½áÊøÖ®¼äËùÓеÄoplog¡£Õâ¸ö¶«Î÷¾ßÌåÓÐʲôÓÃÏÈÂô¸ö¹Ø×Ó¡£ÓÃͼÐÎÀ´ËµÃ÷ÏÂoplog.bsonµÄ¸²¸Ç·¶Î§:

ΪÁ˺óÃæµÄ½²½â²»ÖÁÓÚ°ÑÈË˵ÔΣ¬½øÒ»²½ËµÃ÷֮ǰÏȽâÊÍÒ»ÏÂʲôÊÇoplog¼°ÆäÏà¹Ø¸ÅÄî¡£¹Ù·½ÌṩµÄÎĵµÆäʵÒѾ­ºÜÈ«ÃæµØ×öÁ˽âÊÍ£¬µã»÷²é¿´ÖÐÎÄÎĵµ»òÓ¢ÎÄÎĵµ¡£

¼òµ¥µØËµ£¬ÔÚreplica setÖÐoplogÊÇÒ»¸ö¶¨Èݼ¯ºÏ£¨capped collection£©£¬ËüµÄĬÈÏ´óСÊÇ´ÅÅ̿ռäµÄ5%£¨¿ÉÒÔͨ¹ý--oplogSizeMB²ÎÊýÐ޸ģ©£¬Î»ÓÚlocal¿âµÄdb.oplog.rs£¬ÓÐÐËȤ¿ÉÒÔ¿´¿´ÀïÃæµ½µ×ÓÐЩʲôÄÚÈÝ¡£ÆäÖмǼµÄÊÇÕû¸ömongodʵÀýÒ»¶Îʱ¼äÄÚÊý¾Ý¿âµÄËùÓбä¸ü£¨²åÈë/¸üÐÂ/ɾ³ý£©²Ù×÷¡£µ±¿Õ¼äÓÃÍêʱмǼ×Ô¶¯¸²¸Ç×îÀϵļǼ¡£ËùÒÔ´Óʱ¼äÖáÉÏ¿´£¬oplogµÄ¸²¸Ç·¶Î§´ó¸ÅÊÇÕâÑùµÄ£º

Æä¸²¸Ç·¶Î§±»³Æ×÷oplogʱ¼ä´°¿Ú¡£ÐèҪעÒâµÄÊÇ£¬ÒòΪoplogÊÇÒ»¸ö¶¨Èݼ¯ºÏ£¬ËùÒÔʱ¼ä´°¿ÚÄܸ²¸ÇµÄ·¶Î§»áÒòΪÄ㵥λʱ¼äÄڵĸüдÎÊý²»Í¬¶ø±ä»¯¡£ÏëÒª²é¿´µ±Ç°µÄoplogʱ¼ä´°¿ÚÔ¤¼ÆÖµ£¬¿ÉÒÔʹÓÃÒÔÏÂÃüÁ

test:PRIMARY> rs.printReplicationInfo()
configured oplog size: 1561.5615234375MB <--¼¯ºÏ´óС
log length start to end: 423849secs (117.74hrs) <--Ô¤¼Æ´°¿Ú¸²¸Çʱ¼ä
oplog first event time: Wed Sep 09 2015 17:39:50 GMT+0800 (CST)
oplog last event time: Mon Sep 14 2015 15:23:59 GMT+0800 (CST)
now: Mon Sep 14 2015 16:37:30 GMT+0800 (CST)

oplogÓÐÒ»¸ö·Ç³£ÖØÒªµÄÌØÐÔ¡ª¡ªÃݵÈÐÔ£¨idempotent£©¡£¼´¶ÔÒ»¸öÊý¾Ý¼¯ºÏ£¬Ê¹ÓÃoplogÖмǼµÄ²Ù×÷ÖØ·Åʱ£¬ÎÞÂÛ±»ÖطŶàÉٴΣ¬Æä½á¹û»áÊÇÒ»ÑùµÄ¡£¾ÙÀýÀ´Ëµ£¬Èç¹ûoplogÖмǼµÄÊÇÒ»¸ö²åÈë²Ù×÷£¬²¢²»»áÒòΪÄãÖØ·ÅÁËÁ½´Î£¬Êý¾Ý¿âÖо͵õ½Á½ÌõÏàͬµÄ¼Ç¼¡£ÕâÊÇÒ»¸öºÜÖØÒªµÄÌØÐÔ£¬Ò²ÊǺóÃæÕâЩ²Ù×÷µÄ»ù´¡¡£

»Øµ½Ö÷ÌâÉÏÀ´£¬¿´¿´oplog.bsonµ½µ×ÓÐʲô×÷Óá£Ê×ÏÈÒªÃ÷°×µÄÒ»¸öÎÊÌâÊÇÊý¾ÝÖ®¼ä»¥ÏàÓÐÒÀÀµÐÔ£¬±ÈÈ缯ºÏAÖдæ·ÅÁ˶©µ¥£¬¼¯ºÏBÖдæ·ÅÁ˶©µ¥µÄËùÓÐÃ÷ϸ£¬ÄÇôֻÓÐÒ»¸ö¶©µ¥ÓÐÍêÕûµÄÃ÷ϸʱ²ÅÊÇÕýÈ·µÄ״̬¡£¼ÙÉèÔÚÈÎÒâÒ»¸öʱ¼äµã£¬AºÍB¼¯ºÏµÄÊý¾Ý¶¼ÊÇÍêÕû¶ÔÓ¦²¢ÇÒÓÐÒâÒåµÄ£¨¶Ô·Ç¹ØÏµÐÍÊý¾Ý¿âÒª×öµ½Õâµã²¢²»ÈÝÒ×£¬ÇÒ¶ÔÓÚMongoDBÀ´ËµÕâÑùµÄÊý¾Ý½á¹¹²¢·ÇºÏÀí¡£µ«´Ë´¦ÎÒÃǼÙÉèÕâ¸öÌõ¼þ³ÉÁ¢£©£¬ÄÇôÈç¹ûA´¦ÓÚʱ¼äµãx£¬¶øB´¦ÓÚxÖ®ºóµÄÒ»¸öʱ¼äµãyʱ£¬¿ÉÒÔÏëÏóAºÍBÖеÄÊý¾Ý¼«ÓпÉÄܲ»¶ÔÓ¦¶øÊ§È¥ÒâÒå¡£

ÔÙ»ØÀ´¿´mongodumpµÄ²Ù×÷¡£mongodumpµÄ½øÐйý³ÌÖв¢²»»á°ÑÊý¾Ý¿âËøËÀÒÔ±£Ö¤Õû¸ö¿â¶³½áÔÚÒ»¸ö¹Ì¶¨µÄʱ¼äµã£¬ÕâÔÚÒµÎñÉϳ£³£ÊDz»ÔÊÐíµÄ¡£ËùÒÔ¾ÍÓÐÁËdumpµÄ×îÖÕ½á¹ûÖÐA¼¯ºÏÊÇ10µãÕûµÄ״̬£¬¶øB¼¯ºÏÔòÊÇ10µãÁã1·ÖµÄ״̬ÕâÖÖÇé¿ö¡£ÕâÑùµÄ±¸·Ý¼´Ê¹»Ö¸´»ØÈ¥£¬¿ÉÒÔÏëÏóµÃµ½µÄ½á¹û¿ÖÅÂÒâÒåÓÐÏÞ¡£ÄÇôÉÏÃæÕâ¸öoplog.bsonµÄÒâÒå¾ÍÔÚÕâÀïÌåÏÖ³öÀ´ÁË¡£Èç¹ûÔÚdumpÊý¾ÝµÄ»ù´¡ÉÏ£¬ÔÙÖØ×öÒ»±éoplogÖмǼµÄËùÓвÙ×÷£¬ÕâʱµÄÊý¾Ý¾Í¿ÉÒÔ´ú±ídump½áÊøÊ±ÄǸöʱ¼äµã£¨point-in-time£©µÄÊý¾Ý¿â״̬¡£

Õâ¸ö½áÂÛ³ÉÁ¢µÄÖØÒªÌõ¼þ¾ÍÊÇÃݵÈÐÔ£ºÒÑ´æÔÚµÄÊý¾Ý£¬ÖØ×öoplog²»»áÖØ¸´£»²»´æÔÚµÄÊý¾ÝÖØ×öoplog¾Í¿ÉÒÔ½øÈëÊý¾Ý¿â¡£ËùÒÔµ±×öÍê½ØÖ¹µ½Ä³¸öʱ¼äµãµÄoplogʱ£¬Êý¾Ý¿â¾Í»Ö¸´µ½Á˽ØÖ¹ÄǸöʱ¼äµãµÄ״̬¡£

À´¿´¿´mongorestoreµÄÑ¡Ïî¡£¸úoplogÏà¹ØµÄÑ¡ÏîÓÐ--oplogReplayºÍ--oplogLimit¡£µÚÒ»¸öÑ¡Ïî¹ËÃû˼Ò壬¿ÉÒÔÖØ·Åoplog.bsonÖеIJÙ×÷ÄÚÈÝ¡£µÚ¶þ¸öÑ¡Ïî

ºóÃæÔÙ×ö½éÉÜ¡£ÏÈÀ´¿´Ò»¸öÀý×Ó£º

Ê×ÏÈÎÒÃÇÄ£ÄâÒ»¸ö²»¶ÏÓвåÈë²Ù×÷µÄ¼¯ºÏfoo£¬

use test
for(var i = 0; i < 100000; i++) {
db.foo.insert({a: i});
}

È»ºóÔÚ²åÈë¹ý³ÌÖÐÄ£ÄâÒ»´Îmongodump²¢Ö¸¶¨--oplog¡£

mongodump -h 127.0.0.1 --oplog

×¢Òâ--oplogÑ¡ÏîÖ»¶ÔÈ«¿âµ¼³öÓÐЧ£¬ËùÒÔ²»ÄÜÖ¸¶¨-dÑ¡Ïî¡£ÒòΪÕû¸öʵÀýµÄ±ä¸ü²Ù×÷¶¼»á¼¯ÖÐÔÚlocal¿âÖеÄoplog.rs¼¯ºÏÖС£

¸ù¾ÝÉÏÃæËù˵£¬´Ódump¿ªÊ¼µÄʱ¼äϵͳ½«¼Ç¼ËùÓеÄoplogµ½oplog.bsonÖУ¬ËùÒÔÎÒÃǵõ½ÕâЩÎļþ£º

yaoxing ~ $ ll dump/
total 440
-rw-r--r-- 1 yaoxing yaoxing 442470 Sep 14 17:21 oplog.bson
drwxr-xr-x 2 yaoxing yaoxing 4096 Sep 14 17:21 test

ÆäÖÐtestÊÇÎÒÃǸղÅʹÓõÄÊý¾Ý¿â£¬oplog.bsonÊǵ¼³öÆÚ¼ä½øÐеÄËùÓвÙ×÷¡£Èç¹û¶Ôoplog.bsonÖеÄÄÚÈÝºÃÆæ£¬¿ÉÒÔÓÃbsondump¹¤¾ßÀ´²é¿´ÆäÖеÄÄÚÈÝ£¬ÀýÈ磺

{"h":{"$numberLong":"2279811375157953332"},"ns":"test.foo",
"o":{"_id":{"$oid":"55f834ae6b530b5854f9d6ee"},"a":7784.0},"op":"i","ts":{"$timestamp":{"t":1442329774,"i":3248}},"v":2}

´Óoplog.bsonÖÐÎÒÃÇÌôÑ¡µÚÒ»ÌõºÍ×îºóÒ»ÌõÄÚÈݳöÀ´¹Û²ì

{"h":{"$numberLong":"2279811375157953332"},"ns":"test.foo","
o":{"_id":{"$oid":"55f834ae6b530b5854f9d6ee"},"a":7784.0},"op":"i","ts":{"$timestamp":{"t":1442329774,"i":3248}},"v":2}
...
{"h":{"$numberLong":"-1177358680665374097"},"ns":"test.foo", "o":{"_id":{"$oid":"55f834b26b530b5854f9fa5e"},"a":16856.0},"op":"i","ts":{"$timestamp":{"t":1442329778,"i":1361}},"v":2}

ºì×Ö²¿·Ö¿ÉÒÔ¿´³ö£¬´Ó¿ªÊ¼½øÐÐmongodumpʱ£¬Ñ­»·½øÐе½i=7784£¬¶øµ½Õû¸ö²Ù×÷½áÊøÊ±£¬Ñ­»·½øÐе½i=16856¡£ÔÙ¿´Ò»ÏÂtest/foo.bsonÖÐÊý¾ÝµÄ×îºóÒ»Ìõ

{"_id":{"$oid":"55f834ae6b530b5854f9d73d"},"a":7863.0}

¿ÉÒÔ·¢ÏÖ£¬×îÖÕdump³öµÄÊý¾Ý¼È²»ÊÇ×ʼµÄ״̬£¬Ò²²»ÊÇ×îºóµÄ״̬£¬¶øÊÇÖмäij¸öËæ»ú״̬¡£ÕâÕýÊÇÒòΪ¼¯ºÏ²»¶Ï±ä»¯Ôì³ÉµÄ¡£

ÄÇôʹÓÃmongorestoreÀ´»Ö¸´£º

yaoxing ~ $ mongorestore -h 127.0.0.1 --oplogReplay dump
2015-09-19T01:22:20.095+0800 building a list of dbs and collections to restore from dump dir
2015-09-19T01:22:20.095+0800 reading metadata for test.foo from
2015-09-19T01:22:20.096+0800 restoring test.foo from
2015-09-19T01:22:20.248+0800 restoring indexes for collection test.foo from metadata
2015-09-19T01:22:20.248+0800 finished restoring test.foo (7864 documents)
2015-09-19T01:22:20.248+0800 replaying oplog
2015-09-19T01:22:20.463+0800 done

×¢Òâºì×ÖµÄÁ½¾ä£¬µÚÒ»¾ä±íʾtest.foo¼¯ºÏÖлָ´ÁË7864¸öÎĵµ£»µÚ¶þ¾ä±íÊ¾ÖØ·ÅÁËoplogÖеÄËùÓвÙ×÷¡£ËùÒÔÀíÂÛÉÏfooÓ¦¸ÃÓÐ16857¸öÎĵµ£¨7864¸öÀ´×Ôfoo.bson£¬Ê£ÏµÄÀ´×Ôoplog.bson£©¡£Ñé֤һϣº

test:PRIMARY> db.foo.count()
16857

Õâ¾ÍÊÇ´øoplogµÄmongodumpµÄÕæÕý×÷Óá£

1.2.3 ´Ó±ð´¦¶øÀ´µÄoplog

´ÏÃ÷ÈçÄã¿ÉÄÜÒѾ­Ïëµ½£¬¼ÈÈ»dump³öµÄÊý¾ÝÅäºÏoplog¾Í¿ÉÒÔ°ÑÊý¾Ý¿â»Ö¸´µ½Ä³¸ö״̬£¬ÄÇÊDz»ÊÇÓµÓÐÒ»·Ý´Óij¸öʱ¼äµã¿ªÊ¼±¸·ÝµÄdumpÊý¾Ý£¬ÔÙ¼ÓÉÏ´Ódump¿ªÊ¼Ö®ºóµÄoplog£¬Èç¹ûoplog×ã¹»³¤£¬ÊDz»ÊǾͿÉÒÔ°ÑÊý¾Ý¿â»Ö¸´µ½ÆäºóµÄÈÎÒâ״̬ÁË£¿Êǵģ¡ÊÂʵÉÏreplica setÕýÊÇÒÀÀµoplogµÄÖØ·Å»úÖÆÔÚ¹¤×÷¡£µ±secondaryµÚÒ»´Î¼ÓÈëreplica setʱ×öµÄinitial sync¾ÍÏ൱ÓÚÊÇÔÚ×ömongodump£¬´ËºóÖ»ÐèÒª²»¶ÏµØÍ¬²½ºÍÖØ·Åoplog.rsÖеÄÊý¾Ý£¬¾Í´ïµ½ÁËsecondaryÓëprimaryͬ²½µÄÄ¿µÄ¡£

¼ÈÈ»oplogÒ»Ö±¶¼ÔÚoplog.rsÖдæÔÚ£¬ÎÒÃÇΪʲô»¹ÐèÒªÔÚmongodumpʱָ¶¨--oplogÄØ£¿ÐèÒªµÄʱºò´Óoplog.rsÖÐÄò»¾ÍÍêÁËÂ𣿴ð°¸Êǿ϶¨µÄ£¬Äãȷʵ¿ÉÒÔÖ»dumpÊý¾Ý£¬²»ÐèÒªoplog¡£ÔÚÐèÒªµÄʱºò¿ÉÒÔÔÙ´Óoplog.rsÖÐÈ¡¡£µ«Ç°ÌáÊÇoplogʱ¼ä´°¿Ú£¨ÍüÁËʱ¼ä´°¿Ú¸ÅÄîµÄÇëÍùǰ·­£©±ØÐëÄܹ»¸²¸ÇdumpµÄ¿ªÊ¼Ê±¼ä¡£

Ã÷°×ÁËÕâ¸öµÀÀí£¬ÀíÂÛÉÏÖ»ÒªÎÒÃǵÄmongodump×öµÃ×㹻Ƶ·±£¬ÊÇ¿ÉÒÔ±£Ö¤Êý¾Ý¿âÄܹ»»Ö¸´µ½¹ýÈ¥µÄÈÎÒâÒ»¸öʱ¼äµãµÄ¡£MMS£¨ÏÖÔÚ½ÐCloud Manager£©µÄ¸¶·Ñ±¸·ÝÒ²ÕýÊÇÔÚÀûÓÃÕâ¸öÔ­Àí¹¤×÷¡£¼ÙÉèoplogʱ¼ä´°¿ÚÓÐ24Сʱ£¬ÄÇôÀíÂÛÉÏÖ»ÒªÎÒÔÚÿ24СʱÄÚÍê³ÉÒ»´Îdump£¬¼´¿É±£Ö¤dumpÖ®ºóµÄ24СʱµÄpoint-in-timeÊý¾Ý»Ö¸´¡£ÔÚoplogʱ¼ä´°¿Ú¿ìÒª»¬³ö24СʱµÄʱºò£¬Ö»Òª¼°Ê±Íê³ÉÏÂÒ»´Îdump£¬¾ÍÓÖ¿ÉÒÔÓÐ24СʱµÄ°²È«ÆÚ¡£

À´×ö¸ö²âÊÔ¡£ÈÔȻʹÓÃÇ°ÃæµÄ·½·¨Ä£ÄâÒ»¶Îʱ¼äµÄÊý¾Ý¿â²åÈë²Ù×÷£º

use test
for(var i = 0; i < 100000; i++) {
db.foo.insert({a: i});
}

ͬʱ×öÒ»´Îmongodump²¢²»´ø--oplog:

yaoxing ~/dump $ mongodump -h 127.0.0.1 
2015-09-24T00:06:11.929+0800 writing test.system.indexes to dump/test/system.indexes.bson
2015-09-24T00:06:11.929+0800 done dumping test.system.indexes (1 document)
2015-09-24T00:06:11.929+0800 writing test.foo to dump/test/foo.bson
2015-09-24T00:06:11.963+0800 done dumping test.foo (11162 documents)

¿É¼ûÎÒÃǵ¼³öÁËi=11162ʱµÄ״̬¡£µÈ²åÈëÍê³Éºó£¬ÀíÂÛÉÏÎÒÃǵÄfoo¼¯ºÏÓ¦¸ÃÓÐ100000Ìõ¼Ç¼

> use test
switched to db test
> db.foo.count()
100000

ÏÖÔÚ¼ÙÉèÎÒ½øÐÐÁËÒ»´ÎÎó²Ù×÷£º

> db.foo.remove({})
WriteResult({ "nRemoved" : 100000 })

¸ü²ÒµÄÊÇÎÒÖ®ºóÓÖÍùfooÀïÃæ²åÈëÁËÒ»ÌõÊý¾Ý

> db.foo.insert({a: 100001});
WriteResult({ "nInserted" : 1 })

ÏÖÔÚÔõÑùÈÃʱ¼äµ¹Á÷£¬»Øµ½ÔÖÄÑǰµÄ×´Ì¬ÄØ£¿ÓÉÓÚÔÚÔÖÄÑǰÎÒÃÇÓйýÒ»´Îdump£¬Òò´ËÏÖÔÚÖ»ÒªÔÚoplogʱ¼ä´°¿Ú»¹Äܸ²¸Çµ¼³öʱ¼ä֮ǰ°ÑoplogÇÀ¾È³öÀ´¾ÍºÃÁË£º

yaoxing ~ $ mongodump -h 127.0.0.1 -d local -c oplog.rs 
2015-09-24T00:09:41.040+0800 writing local.oplog.rs to dump/local/oplog.rs.bson
2015-09-24T00:09:41.525+0800 done dumping local.oplog.rs (200003 documents)

Ϊʲô»áÓÐ200003Ìõ¼ÇÂ¼ÄØ£¿Çë×ÔÐÐʹÓÃbsondump¹¤¾ß²é¿´·¢ÉúÁËʲôÊÂÇé¡£

´ÓÇ°Ãæ½²µÄ¿ÉÖª£¬Ê¹ÓÃmongodump¼Óoplog.bson£¨Çë×¢ÒâÎļþλÖ㩼´¿É»Ö¸´Êý¾Ý¿â¡£ÕâÀïµÄdump/local/oplog.rs.bsonÆäʵ¾ÍÊÇÎÒÃÇÐèÒªµÄoplog.bson¡£Òò´Ë°ÑËüÖØÃüÃûºó·Åµ½ºÏÊʵÄλÖã¬Ò»¸öÄ£Äâ³öÀ´µÄ»Ö¸´»·¾³¾Í×¼±¸ºÃÁË

yaoxing ~/dump $ ll
total 18464
-rw-r--r-- 1 yaoxing yaoxing 18900271 Sep 24 00:09 oplog.bson
drwxr-xr-x 2 yaoxing yaoxing 4096 Sep 24 00:06 test

µ«ÊÇÕâ¸öoplog.bson¿ÉÊǰüº¬ÁËËùÓÐÔÖÄѲÙ×÷µÄ°¡£¬Èç¹ûÈ«Åָ̻´»ØÈ¥£¬¾ÍµÈÓÚÊÇÏÈÈÃʱ¹âµ¹Á÷£¬ÔÙ¿´±¯¾çÖØÑÝÒ»±é¡£ÐͼËéÁË¡­¡­ÕâʱºòÄãÐèÒªÒ»¸öÐÂÅóÓÑ£¬¾ÍÊÇÉÏÃæÌáµ½µÄ--oplogLimit¡£ËüÓë--oplogReplayÒ»ÆðʹÓÃʱ£¬¿ÉÒÔÏÞÖÆÖØ·Åµ½µÄʱ¼äµã¡£ÄÇÃ´ÖØÒªµÄÎÊÌâ¾ÍÊÇÈçºÎÕÒµ½ÔÖÄÑ·¢ÉúµÄʱ¼äµãÁË¡£ÈÔÈ»ÊÇbsondump¡£Èç¹ûÄã¶ÔLinuxÃüÁîÊìϤ£¬¿ÉÒÔÔڹܵÀÖÐÖ±½Ó²Ù×÷¡£Èç¹û²»ÐУ¬ÄǾÍÏÈdumpµ½ÎļþÖУ¬ÔÙÓÃÎı¾±à¼­Æ÷´ò¿ªÂýÂýÕÒºÃÁË¡£ÎÒÃÇÐèÒªÕÒµÄÄÚÈÝÊÇ"op":"d"£¬Ëü±íʾ½øÐÐÁËÒ»´Îɾ³ý²Ù×÷¡£¿ÉÒÔ·¢ÏÖ£¬oplog.bsonÖÐÓÐ100000´Îɾ³ý²Ù×÷£¬Êµ¼ÊÉÏÊÇÒ»ÌõÒ»Ìõ°Ñ¼Ç¼ɾ³ýµô£¬ÕâÒ²ÊÇΪʲôremove({})²Ù×÷»áÕâôÂý¡£Èç¹û¶ÔÒ»¸ö¼¯ºÏ½øÐÐdrop()¾Í»á¿ìµÃ¶à£¬Ëü½øÐеIJÙ×÷Çë¶ÁÕß×Ô¼º³¢ÊÔ¡£

yaoxing ~/dump $ bsondump oplog.bson | grep "\"op\":\"d\"" | head
{"b":true,"h":{"$numberLong":"5331406427126597755"},"ns":"test.foo", "o":{"_id":{"$oid":"5602cdf1befd4a4bfb4d149b"}},"op":"d","ts":{"$timestamp":{"t":1443024507,"i":1}},"v":2}
...

´ËÌõ¼Ç¼ÖÐÎÒÃÇÐèÒªµÄÊǺìÉ«µÄ$timestamp²¿·Ö£¬Ëü´ú±íµÄ·¢ÉúÕâ¸ö²Ù×÷µÄʱ¼ä£¬Ò²ÕýÊÇÎÒÃǵÄ--oplogLimitÐèÒª´«ÈëµÄʱ¼ä£¬Ö»ÊǸñʽÉÔÉÔÓб䣺

yaoxing ~ $ mongorestore -h 127.0.0.1 --oplogReplay --oplogLimit "1443024507:1" dump/
2015-09-24T00:34:09.533+0800 building a list of dbs and collections to restore from dump dir
2015-09-24T00:34:09.534+0800 reading metadata for test.foo from
2015-09-24T00:34:09.534+0800 restoring test.foo from
2015-09-24T00:34:09.659+0800 restoring indexes for collection test.foo from metadata
2015-09-24T00:34:09.659+0800 finished restoring test.foo (11162 documents)
2015-09-24T00:34:09.659+0800 replaying oplog
2015-09-24T00:34:11.548+0800 done

ÆäÖÐ1443024507¼´ÊÇ$timestampÖеÄ"t"£¬1¼´ÊÇ$timestampÖеÄ"i"¡£ÕâÑùÅäÖúóoplog½«»áÖØ·Åµ½Õâ¸öʱ¼äµãÒÔǰ£¬¼´ÕýºÃ±Ü¿ªÁ˵ÚÒ»Ìõɾ³ýÓï¾ä¼°ÆäºóÃæµÄ²Ù×÷£¬Êý¾Ý¿âÍ£ÁôÔÚÔÖÄÑǰ״̬¡£Ñé֤һϣº

rs0:PRIMARY> db.foo.count()
100000

1.3 С½á

½áºÏÉÏÊõ֪ʶ£¬ÎÒÃÇ¿ÉÒÔ×ܽáһЩmongodbµÄ±¸·Ý×¼Ôò£¨Ö»Õë¶Ôreplica»òmaster/slave£©£¬Âú×ãÕâЩ׼Ôò£¬MongoDB¾Í¿ÉÒÔ½øÐÐpoint-in-time»Ö¸´²Ù×÷£º

ÈÎÒâÁ½´ÎÊý¾Ý±¸·ÝµÄʱ¼ä¼ä¸ô£¨µÚÒ»´Î±¸·Ý¿ªÊ¼µ½µÚ¶þ´Î±¸·Ý½áÊø£©²»Äܳ¬¹ýoplogʱ¼ä´°¿Ú¸²¸Ç·¶Î§¡£

ÔÚÉÏ´ÎÊý¾Ý±¸·ÝµÄ»ù´¡ÉÏ£¬ÔÚoplogʱ¼ä´°¿ÚûÓл¬³öÉϴα¸·Ý½áÊøµÄʱ¼äµãǰ½øÐÐÍêÕûµÄoplog±¸·Ý¡£Çë³ä·Ö¿¼ÂÇoplog±¸·ÝÐèÒªµÄʱ¼ä£¬È¨ºâ·þÎñÆ÷¿Õ¼äÇé¿öÈ·¶¨oplog±¸·Ý¼ä¸ô¡£

ʵ¼ÊÓ¦ÓÃÖеÄ×¢ÒâÊÂÏ

¿¼Âǵ½oplogʱ¼ä´°¿ÚÊǸö±ä»¯Öµ£¬Çë¹Ø×¢oplogʱ¼ä´°¿ÚµÄ¾ßÌåʱ¼ä¡£

ÔÚ¿¿½üoplogʱ¼ä´°¿Ú»¬¶¯³öÓÐЧʱ¼ä֮ǰ±ØÐëÒªÓÐ×ã¹»µÄʱ¼ädump³öÐèÒªµÄoplog.rs£¬ÇëÔ¤Áô×ã¹»µÄʱ¼ä£¬²»Òª¶¥Âúʱ¼ä´°¿ÚÔÙ±¸·Ý¡£

µ±ÔÖÄÑ·¢Éúʱ£¬µÚÒ»¼þÊÂÇé¾ÍÊÇҪֹͣÊý¾Ý¿âµÄдÈë²Ù×÷£¬ÒÔÍùoplog»¬³öʱ¼ä´°¿Ú¡£ÌرðÊÇÏñÉÏÊöÕâÑùµÄremove({})²Ù×÷£¬Ë²¼ä¾Í»á²åÈë´óÁ¿d¼Ç¼´Ó¶øµ¼ÖÂoplogѸËÙ»¬³öʱ¼ä´°¿Ú¡£

2. ÍâÖ÷½·¨

1. MMS/Cloud Manager

ÒÔǰ½Ð×öMMS£¬¼à¿Ø¹¦ÄÜÃâ·Ñ£¬±¸·Ý¹¦ÄÜÊÕ·Ñ£»Ç°Á½¸öÔ¸üÃûΪCloud Manager²¢¿ªÊ¼¶Ô¼à¿Ø¹¦ÄÜÊÕ·Ñ£¬ÁíÍâÔö¼ÓÒ»¸öÔËά×Ô¶¯»¯»úÆ÷ÈË£¬Í¦Éµ¹Ï»¯µÄ£¬ÓÐÐËȤ¿ÉÒÔÍæÍæ¡£²»¹ý¼ÈÈ»ÊÕ·Ñ£¬ÎÒÏàÐÅÎÒ¹ú¹úÇé¾ö¶¨ÁË¿ÉÄÜûÓм¸¸ö¹«Ë¾»áÔ¸ÒâʹÓá£Òò´Ë²»×öÖØµã½éÉÜ£¬Ö»ÒªÖªµÀËüÄÜÌṩÈÎÒâʱ¼äµãµÄÊý¾Ý»Ö¸´¾Í¿ÉÒÔÁË£¬¹¦ÄÜÇ¿´ó£¬ÍÁºÀ¹«Ë¾»¶Ó­Ê¹Óá£

2. ´ÅÅÌ¿ìÕÕ

³£¼ûµÄÈçLVM¿ìÕÕ£¬ÊÇ¿ÉÒÔÓÃÀ´±¸·ÝMongoDBµÄ£¬µ«±ØÐ뿪ÆôMongoDBµÄJournal²¢ÇÒJournal±ØÐëºÍÊý¾ÝÎļþÔÚÒ»¸ö¾íÉÏ¡£»°ËµÓ¦¸Ã¶àÊýÈ˶¼ÊÇ¿ªÆôJournalµÄ°É£¿Ã»ÓÐJournalµÄ»°¶ÏµçÊǻᶪʧ×î¶à60sµÄÊý¾ÝµÄ¡£

¿ìÕÕÆäʵÊÇÒ»¸ö½Ïmongodump/mongorestoreÀ´µÃ¸ü¿ìµÄ±¸·Ý·½Ê½£¬Ï൱ʵÓ㬵«Ö»ÄÜÌṩµ½±¸·Ýʱ¼äµãµÄÊý¾Ý»Ö¸´£¬×÷ÓÃÓÐÏÞ¡£²»Õ¹¿ªÏ¸Ëµ£¬ÓÐÐËȤ¿ÉÒÔ²éÔĹٷ½Îĵµ¡£ÀíÂÛÉÏ˵£¬¿ìÕÕµ±È»Ò²¿ÉÒÔ½áºÏoplogÖØ·ÅÀ´´ïµ½point-in-timeÊý¾Ý»Ö¸´µÄ¡£µ«ÊDZ¾ÈËûÓÐÇ×ÉíʵÑ飬ÓÐÐËȤµÄÅóÓÑ¿ÉÒÔÍæÍæ²¢×ö¸ö½éÉÜ¡£

   
2578 ´Îä¯ÀÀ       39
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]

MySQLË÷Òý±³ºóµÄÊý¾Ý½á¹¹
MySQLÐÔÄܵ÷ÓÅÓë¼Ü¹¹Éè¼Æ
SQL ServerÊý¾Ý¿â±¸·ÝÓë»Ö¸´
ÈÃÊý¾Ý¿â·ÉÆðÀ´ 10´óDB2ÓÅ»¯
oracleµÄÁÙʱ±í¿Õ¼äдÂú´ÅÅÌ
Êý¾Ý¿âµÄ¿çƽ̨Éè¼Æ

²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿â
¸ß¼¶Êý¾Ý¿â¼Ü¹¹Éè¼ÆÊ¦
HadoopÔ­ÀíÓëʵ¼ù
Oracle Êý¾Ý²Ö¿â
Êý¾Ý²Ö¿âºÍÊý¾ÝÍÚ¾ò
OracleÊý¾Ý¿â¿ª·¢Óë¹ÜÀí

GE Çø¿éÁ´¼¼ÊõÓëʵÏÖÅàѵ
º½Ìì¿Æ¹¤Ä³×Ó¹«Ë¾ Nodejs¸ß¼¶Ó¦Óÿª·¢
ÖÐÊ¢Òæ»ª ׿Խ¹ÜÀíÕß±ØÐë¾ß±¸µÄÎåÏîÄÜÁ¦
ijÐÅÏ¢¼¼Êõ¹«Ë¾ PythonÅàѵ
ij²©²ÊITϵͳ³§ÉÌ Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À
ÖйúÓÊ´¢ÒøÐÐ ²âÊÔ³ÉÊì¶ÈÄ£Ðͼ¯³É(TMMI)
ÖÐÎïÔº ²úÆ·¾­ÀíÓë²úÆ·¹ÜÀí