Backup

從 oplog 增量備份 MongoDB

  • September 20, 2018

我試圖使用以下程式碼基於 ts 使用 oplog 進行備份

import pymongo
   import traceback
   from pymongo.cursor import CursorType
   c = pymongo.MongoClient('mongodb://localhost:28001')
   oplog = c.local.oplog.rs
first = next(oplog.find().sort('$natural', pymongo.DESCENDING).limit(-1))
ts = first['ts']
while True:
   cursor = oplog.find({'ts': {'$gt': ts}}, cursor_type=CursorType.TAILABLE_AWAIT, oplog_replay=True)
   while cursor.alive:
       for doc in cursor:
           ts = doc['ts']
           print doc['ns']
           db,collection=str.split(str(doc['ns']),'.',1)

當我們的 opLog 大小較小時,它執行良好,但是當我在 oplog 大小為 48 GB 的生產環境中使用它時,它不起作用。

我無法更改 oplog 大小。請建議一些方法來進行增量備份。

增量備份過程

  • 鎖定在次要成員上寫入
  • 從完整(或最新的增量)備份記錄的 oplog 位置轉儲 oplog:
mongodump --host <secondary> -d local -c oplog.rs -o /mnt/mongo-test_backup/1 
--query '{ "ts" : { $gt :  Timestamp(1437725201, 50) } }'
  • 記錄最新的 oplog 位置(與完整備份相同)
  • 解鎖寫入

點擊這裡了解詳細資訊

我正在考慮使用 mongodump 進行增量備份,如下所示。

mongodump -d local -c oplog.rs -q "{ts : { \"\$gt\" : { \"\$timestamp\" : { \"t\" : 1494476525, \"i\" : 0 } } }}" --port 27022 --archive=/home/mongodb/testoplog.tar.gz --gzip >> testoplog.log 2>&1

引用自:https://dba.stackexchange.com/questions/147571