Mongodb
oplog 中的 Mongorestore 失去了一些記錄
我們做了一個 mongo oplog 的轉儲,現在嘗試在另一台伺服器上恢復它:
mongorestore -vvvvv --authenticationDatabase admin -u mongoUser -p --oplogReplay --filter '{"o._id": ObjectId( "54566b2856a34e1831157660" )}' dump/
我們在過濾器中只有 1 條記錄進行測試,但沒有過濾器,根本沒有任何東西可以導入具有相同的輸出。
我們從單個副本集轉儲並嘗試導入新的分片集群。
這會產生以下輸出:
Enter password: 2014-11-05T15:02:55.596+0100 creating new connection to:127.0.0.1:27017 2014-11-05T15:02:55.596+0100 [ConnectBG] BackgroundJob starting: ConnectBG 2014-11-05T15:02:55.597+0100 connected to server 127.0.0.1:27017 (127.0.0.1) 2014-11-05T15:02:55.597+0100 connected connection! connected to: 127.0.0.1 2014-11-05T15:02:55.857+0100 drillDown: dump 2014-11-05T15:02:55.857+0100 Replaying oplog file size: 21413184554 2014-11-05T15:02:58.000+0100 Progress: 3905443976/21413184554 18% (bytes) 2014-11-05T15:03:01.001+0100 Progress: 8027986469/21413184554 37% (bytes) 2014-11-05T15:03:04.000+0100 Progress: 11157894758/21413184554 52% (bytes) 2014-11-05T15:03:07.001+0100 Progress: 14340379265/21413184554 66% (bytes) 2014-11-05T15:03:10.000+0100 Progress: 17890791357/21413184554 83% (bytes) 2820163 objects found 1 objects processed 2014-11-05T15:03:12.945+0100 Applied 1 oplog entries out of 1 (0 skipped).
看起來不錯,但記錄沒有出現在數據庫中……我們做錯了什麼?
此外,我們正在從 uberVU 執行 oplogreplay 以與舊數據庫保持同步。這工作正常,新數據庫中不斷出現記錄。但是我們必須指定 –skipIndexes 因為以前的索引現在是一個分片鍵
我們設法通過使用 mongodump / mongorestore 以外的其他工具解決了這個問題。使用 dropbox hydra 項目 ( https://github.com/dropbox/hydra ) 可以更快、更順暢地複制整個數據庫並與我們的新集群保持同步。
不知道這是否是 Markus 將在評論中建議的工具,但它們工作正常 :)
仍然不知道為什麼 mongo 工具不能在這裡完成這項工作。他們需要 5 天才能失敗。Hydra 用了不到一天的時間就成功了……