更改mongod dbpath引发权限错误

时间:2014-07-16 13:23:21

标签: mongodb

我的mongo数据库需要更多空间,所以我去了当地的电脑商店,买了一个新硬盘,安装好了。然后,我将所有文件从/var/lib/mongodb复制到/media/didier/mongodb/mongodb/,并使用命令/media/didier/mongodb/mongodb/更改了sudo chown -R mongodb:mongodb /media/didier/mongodb/mongodb/的所有权。然后,我将配置文件更改为/etc/mongod.conf以指向良好的数据目录。基本上,我遵循Changing MongoDB data store directory的指示。

权限看起来很好,配置文件看起来也很好,但是当我使用sudo service mongod start启动mongodb时,我的日志中有以下异常

014-07-16T09:11:37.362-0400 [initandlisten] MongoDB starting : pid=5899 port=27017 
dbpath=/media/didier/mongodb/mongodb/ 64-bit host=miaou
2014-07-16T09:11:37.362-0400 [initandlisten] db version v2.6.3
2014-07-16T09:11:37.362-0400 [initandlisten] git version: 255f67a66f9603c59380b2a389e386910bbb52cb
2014-07-16T09:11:37.362-0400 [initandlisten] build info: Linux build12.nj1.10gen.cc 2.6.32-431.3.1.el6.x86_64 #1 SMP Fri Jan 3 21:39:27 UTC 2014 x86_64 BOOST_LIB_VERSION=1_49
2014-07-16T09:11:37.362-0400 [initandlisten] allocator: tcmalloc
2014-07-16T09:11:37.362-0400 [initandlisten] options: { config: "/etc/mongod.conf", net: { bindIp: "127.0.0.1" }, storage: { dbPath: "/media/didier/mongodb/mongodb/" }, systemLog: { destination: "file", logAppend: true, path: "/var/log/mongodb/mongod.log" } }
2014-07-16T09:11:37.362-0400 [initandlisten] exception in initAndListen std::exception: boost::filesystem::status: Permission denied: "/media/didier/mongodb/mongodb/", terminating
2014-07-16T09:11:37.362-0400 [initandlisten] dbexit: 
2014-07-16T09:11:37.362-0400 [initandlisten] shutdown: going to close listening sockets...
2014-07-16T09:11:37.362-0400 [initandlisten] shutdown: going to flush diaglog...
2014-07-16T09:11:37.362-0400 [initandlisten] shutdown: going to close sockets...
2014-07-16T09:11:37.362-0400 [initandlisten] shutdown: waiting for fs preallocator...
2014-07-16T09:11:37.362-0400 [initandlisten] shutdown: lock for final commit...
2014-07-16T09:11:37.362-0400 [initandlisten] shutdown: final commit...
2014-07-16T09:11:37.362-0400 [initandlisten] shutdown: closing all files...
2014-07-16T09:11:37.362-0400 [initandlisten] closeAllFiles() finished
2014-07-16T09:11:37.362-0400 [initandlisten] dbexit: really exiting now

知道出了什么问题吗?当我只是运行sudo mongod --config /etc/mongod.conf时,一切正常。所以我认为这是一个许可问题。

喝彩!

2 个答案:

答案 0 :(得分:2)

问题是 mongodb 用户无法访问硬盘驱动器。要在所有用户之间共享硬盘,您需要通过添加以下行来更改/etc/fstab

UUID=a43bc179-f0e5-464b-bd77-1be6a7581ec2   /media/mongodb ext4  defaults  0   0

这将在启动时将硬盘驱动器挂载到/media/mongodb目录。有关详细信息,请参阅https://help.ubuntu.com/community/Fstab


简而言之,要在ubuntu计算机上使用不同的硬盘作为mongodb上的数据位置,需要执行以下三个步骤:

  1. 确保 mongodb 用户可以访问新硬盘(fstab)
  2. 确保用户 mongodb 可以访问数据目录(chown)
  3. 更改mongo配置文件(/etc/mongod.conf)

答案 1 :(得分:0)

我认为问题是您需要更改/ media挂载点的权限,以使“其他”组和用户拥有r + x(读取和执行)权限;至少这对我来说是固定的。做

sudo chmod a+rx /media

会做到的。您想确保对我认为的mongodb数据的整个路径也是如此,因此可以执行sudo chmod -R a+rx /media以使其递归,或更改驱动器的权限,然后将每个子文件夹移至mongodb文件夹:

sudo chmod a+rx /media/didier
sudo chmod a+rx /media/didier/mongodb
sudo chmod a+rx /media/didier/mongodb/mongodb