Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 已将Mongo数据库移动到其他驱动器:无法获取lockfilepath的锁_Mongodb_Unix_Database - Fatal编程技术网

Mongodb 已将Mongo数据库移动到其他驱动器:无法获取lockfilepath的锁

Mongodb 已将Mongo数据库移动到其他驱动器:无法获取lockfilepath的锁,mongodb,unix,database,Mongodb,Unix,Database,我正在将mongo数据移动到其他驱动器。我要移动的所有数据都存储在/data/db中,我正在将其移动到NAS(网络连接存储)中 第一步: mongodump -d mydb -c mycollection -o nas/mongo-temp 这在mongo temp/like中创建了一个文件树: dump `-- mydb `-- mycollection.bson 1 directory, 1 file 然后我停止了mongod服务并创建了一个新的/data/db目录: /etc

我正在将mongo数据移动到其他驱动器。我要移动的所有数据都存储在/data/db中,我正在将其移动到NAS(网络连接存储)中

第一步:

mongodump -d mydb -c mycollection -o nas/mongo-temp
这在mongo temp/like中创建了一个文件树:

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…/mongotemp/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命令,服务器将正常启动,并且我能够对旧数据库进行查询。

检查mongo temp的目录和父目录的权限。大概它是作为mongodb用户运行的


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

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

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

  • 您已成功且完全关闭旧服务器-可能是错误报告错误,您得到它是因为它试图获取已打开的端口
  • 根据mongo shell的输出,您使用的是1.6.4版,我猜您是从UbuntuRepo 11.04或类似版本安装的,这不是一个好的选择-1.6在这一点上非常旧。使用10gen repos()或下载二进制文件并获得更新的版本

  • 最后但并非最不重要的一点是,当您手动启动mongod时,请确保所有参数都相同,就像端口一样。当您通过mongo shell连接时,请指定启动mongod的端口-遇到此类问题时不要依赖默认值,请明确说明。

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

    rm /var/lib/mongodb/mongod.lock 
    
    然后重新启动
    mongod


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

    我已经尝试了各种权限,包括上面的权限。相同的结果。在/etc/passwd中的mongodb用户中设置一个shell,然后切换到该用户并尝试转到该文件夹并创建一个文件。如果您可以创建一个文件,那么这不是权限问题。但我有一种强烈的感觉,那就是,仍然没有骰子。它可以创建锁文件,但不能“获取锁”。你能打开文件,放入一些东西,然后保存吗?(作为mongodb用户)并且mongodb拥有锁文件?如果是这样,我想就权限而言,我没有什么建议了。dump只是一种备份方法。我知道恢复,并打算在服务器正常工作后使用它。我会检查1号和2号。谢谢,我在CentOS。我按照上的步骤安装mongo。centos是否有更新的存储库源代码?不,这是正确的源代码,但您似乎运行的是一个非常旧的版本-可能您安装了mongodb(这会影响您的默认repo),而不是mongo-10gen等。这将使您目前获得2.0.4版本,而不是1.6.4版本。自更新以来,我一直在进行修补,但仍然一无所获。我相信NAS可能与此有关。我可以创建一个本地目录作为MongoDB的数据库源。但是当我挂载nas并使用该目录时,会出现无法获取锁文件错误。nas使用的是什么文件系统?如果是Windows/MAC格式,我想知道这是否是您的问题的原因。。。。