Mongodb

複製 mongo db 集合而不鎖定整個 mongod 實例

  • February 14, 2018

我正在嘗試在同一台伺服器上執行 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** databaseStackOverflow****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文件都已經成功複製進去了。ordersStackExchange****StackOverflow

Very Import Note:執行mongoexport&mongoimportsystem command line而不是mongo shell。

希望這對您有所幫助。

進一步了解您的參考mongoexportmongoimport

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