Backup
從 oplog 增量備份 MongoDB
我試圖使用以下程式碼基於 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