1

我正在将我的 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
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,mongod --dbpath .../mongo-temp/data/db但我收到一条错误消息:

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 命令,则服务器可以正常启动,并且我可以对旧数据库进行查询。

4

3 回答 3

2

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

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

  1. 您已成功且完全关闭旧服务器 - 可能是错误报告的错误并且您得到它是因为它试图获取已经打开的端口
  2. 根据 mongo shell 输出,您使用的是 1.6.4 版本,我猜您是从 Ubuntu 存储库安装的 11.04 或类似版本,这不是一个好的选择——此时 1.6 已经很旧了。使用 10gen 存储库 ( http://www.mongodb.org/display/DOCS/Ubuntu+and+Debian+packages ) 或下载二进制文件并获取更新的版本

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

于 2012-05-03T19:26:05.837 回答
1

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

rm /var/lib/mongodb/mongod.lock 

然后重新启动mongod.

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

于 2014-04-10T13:32:59.620 回答
0

检查 mongo-temp 的目录和父目录的权限。大概它以 mongodb 用户身份运行?

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

于 2012-05-03T17:27:01.423 回答