mongodb 3.4.3权限被拒绝有关netbuger_kv_engine.cpp 267错误与ubuntu 16

Nic*_*ick 29 ubuntu mongodb

我在推出mongod作为服务时遇到了问题:当我执行sudo mongod -f /etc/mongod.conf但是当使用sudo service mongod start启动它时,它是如何工作的我在日志中得到一个错误

Assertion: 28595:13: Permission denied src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp 267

我在ubuntu 16上运行mongodb

我完全按照mongodb文档中的说明安装该版本,这是一个错误吗?任何建议如何解决这一点是值得赞赏的.

附加信息:

mongodb服务启动脚本看起来像这样,并以用户mongodb运行它,这可能连接到错误?LIB/systemd /系统/ mongodb.service:

[Unit]
Description=MongoDB Database Service
Wants=network.target
After=network.target

[Service]
ExecStart=/usr/bin/mongod --config /etc/mongod.conf
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
User=mongodb
Group=mongodb
StandardOutput=syslog
StandardError=syslog

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

Ste*_*nie 48

我在推出mongod作为服务时遇到了问题:当我执行sudo mongod -f /etc/mongod.conf但是当使用sudo service mongod start启动它时,它是如何工作的我在日志中得到一个错误

sudo命令mongodroot权限(也称为超级用户访问)开头.如果mongod作为服务运行,则在服务定义中配置用户和组(mongodb对于您的示例中的两者).

不需要以用户身份运行该mongod过程root,并且根据最小特权原则的常见安全实践强烈建议不要这样做.

如果要从命令行测试配置,可以使用sudo指定用户而不是默认(root)用户运行.

例如:

sudo -u mongodb mongod -f /etc/mongod.conf 
Run Code Online (Sandbox Code Playgroud)

通常,最好使用服务配置而不是mongod手动运行.通过手动调用,您还必须记住包含配置文件路径之类的参数(因为没有默认的配置路径).如果没有一个配置文件,mongod也使用默认选项,如dbPath/data/db.

断言:28595:13:权限被拒绝src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp 267

您的权限错误的可能原因是之前已mongod作为root用户启动.某些目录和文件现在可能由root用户拥有,因此mongodb用户无法访问这些目录和文件 .您的具体错误与访问数据目录中的文件(即配置storage.dbPathmongod.conf)有关.

假设您没有更改mongod.conf文件中的默认路径,您应该能够递归调整权限以匹配mongod.service定义所需的内容.

首先,确保您已停止mongod当前正在运行的实例.

然后,递归调整对预期用户和组的权限:

# storage.dbPath
sudo chown -R mongodb:mongodb /var/lib/mongodb

# systemLog.path
sudo chown -R mongodb:mongodb /var/log/mongodb
Run Code Online (Sandbox Code Playgroud)

现在你应该可以mongod作为服务开始了.如果服务无法启动,则mongod日志文件中应该有更详细的信息(假设日志文件可由mongodb服务用户写入).


Fre*_*ler 7

有同样的问题.

/var/log/mongodb/mongod.log中的内容:

2017-05-13T13:46:41.152+0700 E STORAGE  [initandlisten] WiredTiger error (13) [1494658001:152518][15821:0x7fb843803cc0], connection: /var/lib/mongodb/journal/WiredTigerPreplog.0000000002: file-remove: unlink: Permission denied
2017-05-13T13:46:41.159+0700 I -        [initandlisten] Assertion: 28595:13: Permission denied src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp 267
Run Code Online (Sandbox Code Playgroud)

所以我们看到有些东西无法删除/ var/lib/mongodb/journal /中的文件"WiredTigerPreplog.0000000002"所以id只是给了权限,我只是这样做了:

sudo chmod 764 /var/lib/mongodb/journal/
Run Code Online (Sandbox Code Playgroud)

如果没有帮助,请尝试:

sudo chown -R mongodb:mongodb /var/lib/mongodb/ && sudo chmod 764 /var/lib/mongodb/journal/
Run Code Online (Sandbox Code Playgroud)


Pob*_*obe 6

共有三种触发此类问题的设置:

  1. MongoDB安装已配置为在给定路径下创建数据库文件,并且此路径在当前系统上不存在。该路径在mongo中称为 dbpath

对于您的情况,请检查是否/data/db存在。如果不是,或者为空,则mongod尝试使用错误的dbpath。您需要找到它,它通常位于下/var/lib/mongodb

找到它后,您可以做两件事。首先,将所有文件从那里复制到/data/db。其次,在mongod.conf文件下更改dbpath,该文件位于(在linux中)位于/etc/mongod.conf。确保使用--config指定的配置文件启动mongod 。

  1. MongoDB无权读取与其dbpath相对应的一个或多个文件或目录。

chown mongodb:mongodb dbpath -R

  1. MongoDB缺少WiredTiger.wt。如果您删除dbpath下的文件,或者设备发生故障,则可能发生这种情况。例如,我们这样做是为了测试恢复策略。

如果您确定dbpath是正确的,并且那里没有WiredTiger.wt的实例。您的数据库已损坏。如果丢失此文件,则无法确保完整性。通过以下方式重新安装mongodb:

sudo apt-get purge mongodb-org*

sudo rm -r dbpath

sudo apt-get install mongodb-org

编辑:或从您的副本之一复制dbpath。