我通过AWS使用CentOS 7。
我希望将MongoDB数据存储在附加的EBS而不是默认的/ var / lib路径上。
但是,当我编辑 Grade2z = as.data.frame(scale(Grade2[ ,c(1,9:14)]))#create new dataframe that ONLY has the scaled CBM and aR scores
colnames(Grade2z) = c("Fallz", "Winterz", "Springz", "aRFallz", "aRWinterz", "aRSpringz")
Grade2 = merge(Grade2, Grade2z)
以指向新的 dbpath 时,我收到了拒绝权限错误。
权限已正确设置为目录上的mongod.mongod。
是什么给出了?
答案 0 :(得分:0)
TL; DR - 问题是SELinux,它影响守护进程可以访问的内容。运行setenforce 0
暂时停用。
您正在使用一种使用SELinux的Linux。
来自维基百科:
SELinux可以控制系统允许的活动 用户,进程和守护进程,具有非常精确的规范。然而, 它主要用于限制守护进程[需要引用],如数据库 具有更明确定义的数据访问权限的引擎或Web服务器 活动权利。这限制了受限守护进程的潜在危害 这会变得妥协。普通的用户进程经常在 无限制域,不受SELinux限制,但仍受限制 经典的Linux访问权限
暂时修复:
sudo setenforce 0
这应该禁用SELinux策略并允许服务运行。
永久修复:
修改/etc/sysconfig/selinux
并设置:
SELINUX=disabled
然后重启。
该服务现在应该可以正常启动。
数据目录也适用于Docker,例如:
docker run --name db -v /mnt/path-to-mounted-ebs:/data/db -p 27017:27017 mongo:latest
警告:两种解决方案都禁用SELinux提供的安全性,这会削弱您的整体安全性。更好的解决方案是了解SELinux的工作原理,并在与mongod一起使用的新数据目录上创建策略。有关更完整的教程,请参阅https://wiki.centos.org/HowTos/SELinux。