将Mongo数据库移动到不同的驱动器:无法获取lockfilepath的锁定

时间:2012-05-03 16:59:55

标签: mongodb unix database

我正在将我的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命令,服务器就可以正常运行了,我可以对旧数据库进行查询。

3 个答案:

答案 0 :(得分:2)

首先,您提到您使用mongodump来填充新驱动器 - 这只是一种备份方法还是您打算成为新的数据库文件?这不是它的工作方式 - mongodump输出与数据库文件不同 - 实际上它需要与mongoresore重新导入。如果您执行直接数据文件复制,则传输将是无缝的。

然后,除了Wes在他的回答中建议的权限之外,还有一些事情需要检查:

  1. 您已成功并完全关闭旧服务器 - 可能是错误报告错误并且您正在获取它,因为它正在尝试抓取已经打开的端口
  2. 根据mongo shell输出你使用的是1.6.4版本,我的猜测是你从11.04或类似的Ubuntu repo安装,这不是一个好的选择 - 1.6此时已经很老了。使用10gen repos(http://www.mongodb.org/display/DOCS/Ubuntu+and+Debian+packages)或下载二进制文件并获取更新版本
  3. 最后但并非最不重要的是,当您手动启动mongod时,请确保所有参数都相同,例如端口。当你通过mongo shell连接时,指定启动mongod的端口 - 在遇到这样的问题时不要依赖默认值,这是明确的。

答案 1 :(得分:1)

我遇到了这个问题并发出以下命令解决了我的问题:

rm /var/lib/mongodb/mongod.lock 

然后重新启动mongod

但是我不确定这是不是一个好的解决方案。

答案 2 :(得分:0)

检查mongo-temp的目录和父目录的权限。据推测它是作为mongodb用户运行的?

您需要对目录(和父目录)执行权限才能在那里创建文件。对目录执行权限允许您列出那里的文件,这是打开文件进行写入所必需的。