viren Asked: 2018-02-14 21:47:58 +0800 CST2018-02-14 21:47:58 +0800 CST 2018-02-14 21:47:58 +0800 CST 复制 mongo db 集合而不锁定整个 mongod 实例 772 我正在尝试在同一台服务器上运行 mongodb 副本集合。 要求是我们根据我们的存档策略删除数据库,但我们需要从该数据中保留一个集合作为备份在同一服务器上的单独数据库中。 我运行 copyCollection 但它会锁定整个 mongo 实例并阻止所有其他操作。 集合大小为 10 GB,因此复制需要相当长的时间,并且系统在一段时间内不可用。 请提出一种在不锁定整个实例的情况下实现此目的的方法。 mongodb archive 1 个回答 Voted Best Answer Md Haidar Ali Khan 2018-02-15T00:02:02+08:002018-02-15T00:02:02+08:00 我正在尝试在同一台服务器上运行 mongodb 副本集合。要求是我们根据我们的存档策略删除数据库,但我们需要从该数据中保留一个集合作为备份在同一服务器上的单独数据库中。 是的,可以通过mongoexport从您的source数据库和mongoimport集合到target同一mongod服务器上的数据库。 让我们从头开始。 假设我有两个数据库StackExchange并且StackOverflow在同一个mongod. > show dbs StackExchange 0.000GB StackOverflow 0.000GB 假设其中有包含文档StackExchange的集合。orders4 > show collections orders > 让我们通过shell检查集合中是否存在documents记录。OrdersStackExchangemongo > 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 databaseStackOverflowtargetorders 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文档都已经成功复制进去了。ordersStackExchangeStackOverflow Very Import Note:运行mongoexport&mongoimport从system command line,而不是mongo shell。 希望这对您有所帮助。 进一步了解您的参考mongoexport和mongoimport
是的,可以通过
mongoexport
从您的source
数据库和mongoimport
集合到target
同一mongod
服务器上的数据库。让我们从头开始。
假设我有两个数据库
StackExchange
并且StackOverflow
在同一个mongod
.假设其中有包含文档
StackExchange
的集合。orders
4
让我们通过shell检查集合中是否存在
documents
记录。Orders
StackExchange
mongo
在这里,我们可以看到订单集合中有 4 条文档记录。
假设我想将 的
orders
集合 复制到具有名称的目标数据库。StackExchange
database
StackOverflow
targetorders
documents
验证数据库中的
targetorders
集合文件StackOverflow
。所以,在这里我们可以看到集合中的所有
4
文档都已经成功复制进去了。orders
StackExchange
StackOverflow
希望这对您有所帮助。
进一步了解您的参考mongoexport和mongoimport