Urb*_*leg 7 mongodb nosql mongorestore mongodump
我们试图在一个相对较小的数据库上做一个简单的MongoDump.
我们的步骤很简单:
出口
从目标机器中删除现有数据库
导入目标机器
MongoDump完美执行.
mongodump --out=/root/mongo-prod
Run Code Online (Sandbox Code Playgroud)
数据库丢弃也是如此:
mongo db_name --eval "db.dropDatabase()"
Run Code Online (Sandbox Code Playgroud)
另一方面,在调用mongoRestore之后
mongorestore --stopOnError --drop --db db_name /root/mongo-prod-{{ build }}/db_name/
Run Code Online (Sandbox Code Playgroud)
导入过程开始,并挂起3个特定的集合,并重复以下错误:
no collection options to restore
restoring db_name.Collection4 from file /root/mongo-prod-31/db_name/Collection4.bson
file /root/mongo-prod-31/db_name/Collection4.bson is 56625 bytes
using 1 insertion workers
[########################] db_name.Collection1 106.7 KB/106.7 KB (100.0%)
[########################] db_name.Collection2 63.5 KB/63.5 KB (100.0%)
[######..................] db_name.Collection3 6.7 MB/25.9 MB (25.8%)
[########################] db_name.Collection4 55.3 KB/55.3 KB (100.0%)
[########################] db_name.Collection1 106.7 KB/106.7 KB (100.0%)
[########################] db_name.Collection2 63.5 KB/63.5 KB (100.0%)
[######..................] db_name.Collection3 6.7 MB/25.9 MB (25.8%)
[########################] db_name.Collection4 55.3 KB/55.3 KB (100.0%)
Run Code Online (Sandbox Code Playgroud)
*******这无限循环*******
ps添加--repair到mongodump命令,在mongorestore上创建一个不同的错误:
Failed: restore error: db_name.Collection1: error restoring from /root/mongo-prod-33/db_name/Collection1.bson: insertion error: E11000 duplicate key error index: db_name.Collection1.$_id_ dup key: { : ObjectId('5651802de4b0293285f7f508') }
Run Code Online (Sandbox Code Playgroud)
小智 25
我只花了一个小时:
从档案中读取
--archive=/backup...
Run Code Online (Sandbox Code Playgroud)
忽略存档参数并等待标准输入
--archive /backup
Run Code Online (Sandbox Code Playgroud)
似乎参数适用于 arg 值或 arg=value,只是不适用于存档...
显然,这个问题与MongoDB 编写问题有关.从MongoDB文档(版本3.2):
写入问题描述了MongoDB请求的确认级别,用于对独立mongod或副本集或分片集群的写入操作.
在副本集配置中,此选项定义在认为成功之前需要写入多少副本写入操作.
该mongorestore
实用程序将默认写入关注设置为多数.这样的值需要确认写操作已经传播到大多数投票节点,包括主节点.如果您有> = 1/2的副本集(投票!)成员下台,mongorestore将永远挂起,等待大多数成员的确认.来自文档:
如果未指定wtimeout选项且写入关注级别无法实现,则写入操作将无限期阻止.
如果仍需要执行数据库还原,只需--writeConcern '{w:0}'
在mongorestore
命令中指定.这将禁用对当前mongo连接的写入操作的确认,并且您将能够还原数据库.
以下是文档链接:https: //docs.mongodb.com/v3.2/reference/write-concern
PS同样可以接受最新的MongoDB版本3.4.
我遇到了同样的问题,可以通过扩大wiredTiger的缓存来解决它:
# 猫 /etc/mongod.conf
..
wiredTiger:
engineConfig:
cacheSizeGB: 2
..
Run Code Online (Sandbox Code Playgroud)
(之前设置为1GB)
华泰