我正在将我的mongo数据移动到另一个驱动器。我要移动的所有数据都存储在/ data / db中,我将它移动到NAS(网络附加存储)。
第一步:
mongodump -d mydb -c mycollection -o nas/mongo-temp
这在mongo-temp /中创建了一个文件树,所以:
dump
`-- mydb
`-- mycollection.bson
1 directory, 1 file
然后我停止了mongod服务并创建了一个新的/ data / db目录:
/etc/init.d/mongod stop
mkdir mongo-temp/data/db
...并更改了/etc/mongodb.conf中的dbpath行
dbpath=.../mongo-temp/data/db
我使用/etc/init.d/mongod start
成功重启了mongo服务器。
当我尝试连接时:
mongo
MongoDB shell version: 1.6.4
Thu May 3 09:53:23 *** warning: spider monkey build without utf8 support. consider rebuilding with utf8 support
connecting to: test
Thu May 3 09:53:24 Error: couldn't connect to server 127.0.0.1 (anon):1154
exception: connect failed
我尝试使用命令mongod --dbpath .../mongo-temp/data/db
启动mongod但是我收到一条错误消息:
Thu May 3 09:57:26 exception in initAndListen std::exception: Unable to acquire lock for lockfilepath: /home/dlpstats/nas-mnt/mongo-temp/data/db/mongod.lock
删除锁定文件没有帮助。如果我在没有--dbpath的情况下运行mongod命令,服务器就可以正常运行了,我可以对旧数据库进行查询。
答案 0 :(得分:2)
首先,您提到您使用mongodump来填充新驱动器 - 这只是一种备份方法还是您打算成为新的数据库文件?这不是它的工作方式 - mongodump输出与数据库文件不同 - 实际上它需要与mongoresore重新导入。如果您执行直接数据文件复制,则传输将是无缝的。
然后,除了Wes在他的回答中建议的权限之外,还有一些事情需要检查:
最后但并非最不重要的是,当您手动启动mongod时,请确保所有参数都相同,例如端口。当你通过mongo shell连接时,指定启动mongod的端口 - 在遇到这样的问题时不要依赖默认值,这是明确的。
答案 1 :(得分:1)
我遇到了这个问题并发出以下命令解决了我的问题:
rm /var/lib/mongodb/mongod.lock
然后重新启动mongod
。
但是我不确定这是不是一个好的解决方案。
答案 2 :(得分:0)
检查mongo-temp的目录和父目录的权限。据推测它是作为mongodb用户运行的?
您需要对目录(和父目录)执行权限才能在那里创建文件。对目录执行权限允许您列出那里的文件,这是打开文件进行写入所必需的。