複製 mongo db 集合而不鎖定整個 mongod 實例
我正在嘗試在同一台伺服器上執行 mongodb 副本集合。
要求是我們根據我們的存檔策略刪除數據庫,但我們需要從該數據中保留一個集合作為備份在同一伺服器上的單獨數據庫中。
我執行 copyCollection 但它會鎖定整個 mongo 實例並阻止所有其他操作。
集合大小為 10 GB,因此複製需要相當長的時間,並且系統在一段時間內不可用。
請提出一種在不鎖定整個實例的情況下實現此目的的方法。
我正在嘗試在同一台伺服器上執行 mongodb 副本集合。要求是我們根據我們的存檔策略刪除數據庫,但我們需要從該數據中保留一個集合作為備份在同一伺服器上的單獨數據庫中。
是的,可以通過
mongoexport
從您的source
數據庫和mongoimport
集合到target
同一mongod
伺服器上的數據庫。讓我們從頭開始。
假設我有兩個數據庫**
StackExchange
並且StackOverflow
**在同一個mongod
.> show dbs StackExchange 0.000GB StackOverflow 0.000GB
假設其中有包含文件
StackExchange
的集合。orders
****4
> show collections orders >
讓我們通過shell檢查集合中是否存在
documents
記錄。Orders``StackExchange``mongo
> db.orders.find().pretty() { "_id" : ObjectId("5a44c1479adf6e5fc5cea526"), "cust_id" : "A123", "amount" : 250, "status" : "A" } { "_id" : ObjectId("5a44c1479adf6e5fc5cea525"), "cust_id" : "A123", "amount" : 500, "status" : "A" } { "_id" : ObjectId("5a44c1479adf6e5fc5cea528"), "cust_id" : "A123", "amount" : 300, "status" : "D" } { "_id" : ObjectId("5a44c1479adf6e5fc5cea527"), "cust_id" : "B212", "amount" : 200, "status" : "A" } >
在這裡,我們可以看到訂單集合中有 4 條文件記錄。
假設我想將 的**
orders
集合 複製到具有名稱的目標數據庫。StackExchange
**database
StackOverflow
****targetorders
documents
>mongoexport -d StackExchange -c orders | mongoimport -d StackOverflow -c targetorders 2018-02-14T10:52:16.630+0300 connected to: localhost 2018-02-14T10:52:16.631+0300 exported 4 records 2018-02-14T10:52:16.693+0300 connected to: localhost 2018-02-14T10:52:17.047+0300 imported 4 documents
驗證數據庫中的
targetorders
集合文件StackOverflow
。> use StackOverflow switched to db StackOverflow > show collections targetorders test > db.targetorders.find().pretty() { "_id" : ObjectId("5a44c1479adf6e5fc5cea528"), "cust_id" : "A123", "amount" : 300, "status" : "D" } { "_id" : ObjectId("5a44c1479adf6e5fc5cea525"), "cust_id" : "A123", "amount" : 500, "status" : "A" } { "_id" : ObjectId("5a44c1479adf6e5fc5cea526"), "cust_id" : "A123", "amount" : 250, "status" : "A" } { "_id" : ObjectId("5a44c1479adf6e5fc5cea527"), "cust_id" : "B212", "amount" : 200, "status" : "A" } >
所以,在這裡我們可以看到集合中的所有
4
文件都已經成功複製進去了。orders
StackExchange
****StackOverflow
Very Import Note:
執行mongoexport
&mongoimport
從system command line
,而不是mongo shell。希望這對您有所幫助。
進一步了解您的參考mongoexport和mongoimport