Mongodb
oplog增量備份失敗
我已經使用 mongodump 安排了 oplog 增量轉儲,但它在大多數伺服器上經常失敗。我有一個分片集群,定義了大約 200GB 的 oplog 大小和大約 30-40 小時的 oplog 視窗。
我認為這是因為在轉儲開始之前出現消息“WiredTiger 記錄儲存 oplog 截斷”,這在每次失敗期間都很常見。其他時候,轉儲執行得非常好。我已經分析了 oplog 視窗和大小,這很好。oplog 開始數據比我在 oplog 轉儲期間使用的時間戳要舊得多。
以下是一些日誌:
- 從 mongod.log 和我的備份腳本:
2020-07-19T16:28:10.472+0000 I STORAGE [WT RecordStoreThread: local.oplog.rs] WiredTiger record store oplog truncation finished in: 420ms 2020-07-19T16:28:10.502+0000 E QUERY [conn74791] Plan executor error during find command: DEAD, stats: { stage: "COLLSCAN", filter: { $and: [ { ts: { $lte: Timestamp(1595176086, 2244) } }, { ts: { $gt: Timestamp(1595173520, 25) } } ] }, nReturned: 0, executionTimeMillisEstimate: 2970, works: 356598, advanced: 0, needTime: 356597, needYield: 0, saveState: 2787, restoreState: 2787, isEOF: 0, invalidates: 0, direction: "forward", docsExamined: 356596 }``` oplog-prd-mon-XYZ-shard-hd03.c.XYZ-dr.internal-20200719.log-2020-07-19T16:28:06.794+0000 reading password from standard input oplog-prd-mon-XYZ-shard-hd03.c.XYZ-dr.internal-20200719.log-Enter password: oplog-prd-mon-XYZ-shard-hd03.c.XYZ-dr.internal-20200719.log-2020-07-19T16:28:07.153+0000 writing local.oplog.rs to stdout oplog-prd-mon-XYZ-shard-hd03.c.XYZ-dr.internal-20200719.log-2020-07-19T16:28:09.795+0000 local.oplog.rs 0 oplog-prd-mon-XYZ-shard-hd03.c.XYZ-dr.internal-20200719.log-2020-07-19T16:28:10.517+0000 local.oplog.rs 0 oplog-prd-mon-XYZ-shard-hd03.c.XYZ-dr.internal-20200719.log:2020-07-19T16:28:10.517+0000 Failed: error writing data for collection `local.oplog.rs` to disk: error reading collection: Executor error during find command :: caused by :: errmsg: "CollectionScan died due to position in capped collection being deleted. Last seen record id: RecordId(6850019249918838732)"
你是對的,oplog 截斷正在殺死你的游標。
oplog 上沒有索引,因此 dump 必須從一開始就掃描以找到與查詢匹配的文件。
在這個 mongodump 游標的情況下,它檢查了 356596 個文件,但仍然沒有找到與查詢匹配的任何文件。
失敗消息報告最後看到的記錄是“RecordId(6850019249918838732)”。該數字是一個 64 位值,對應於
ts
.您可以從 bash 中獲取前 32 位和相應的時間戳:
% echo $((6850019249918838732 >> 32)) 1594894391
該日期
Thu Jul 16 10:13:11 UTC 2020
仍比第一個感興趣日期早一個多月。從封頂集合中修剪這些文件時,游標不再指向有效位置,因此無法繼續。
發生這種情況時,您需要重新啟動 mongodump,以便它可以從 oplog 的新開頭開始掃描。