mongodb关于启动权限的问题

本文介绍了在Ubuntu系统中使用MongoDB遇到的权限问题及其解决办法。当使用不同用户权限进行数据库操作时,可能会导致MongoDB无法正常启动。文章详细解释了如何通过调整文件和目录的所有权来解决这一问题。

mongodb在ubuntu的安装

参考:     http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/

安装完成,在/etc/mongodb.conf配置自己的 dbpath,logpath等,即可指定到路径。

然后即可使用service来启动mongo数据库: 

service mongodb start/stop
service的默认权限是 mongodb用户,一般不是root用户


问题

有时候我们会因为数据的问题(如备份mongodump, 恢复mongorestore)会重新修复数据库存

mongod --repair --dbpath=f:/dbpath

这个时候就要注意你所使用的权限了,一般会是root用户。

不过问题就来了,当你重启mongodb的时候,发现启动不了,log日志报出的是: 

Fri Mar 28 13:05:01 [initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: 
/opt/mongo/data/mongod.lock errno:13 Permission denied

或者

warning couldn't write to / rename file /data/db/journal/prealloc.0: couldn't open file 
/opt/mongo/data/journal/prealloc.0 for writing errno:13 Permission denied 
Fri Mar 28 13:09:59 [initandlisten] exception in initAndListen: 13516 couldn't open file 
/opt/mongo/data/journal/j._0 for writing errno:13 Permission denied, terminating


等等,基本上都是说Permission denied的事。

解决

其实也很明险,主要还是权限的问题。

当你使用 “root”账号在 mongod上做一些文章的时候,生成的文件和目录都会是root的权限。

而当你用service mongodb start时,这个的启动并不是root账号,一般是mongodb账号,因而自然访问不了一些root的文件和文件夹了。

所以只要重新分配dbpath的权限即可:

sudo chown -R mkyong /data/db (自定义的data路径也可)


参考:http://www.mkyong.com/mongodb/mongodb-couldnt-open-datadbyourdb-ns-errno13-permission-denied/


<think>我们正在解决MongoDB无法启动问题,错误信息是找不到`/www/server/mongodb/log/configsvr.pid`文件。这个文件通常是由MongoDB配置服务器(config server)在启动时创建的,用于存储进程ID。如果该文件不存在,可能是因为配置服务器没有成功启动,或者启动过程中出现了问题。 以下我们将分步骤来解决这个问题: ### 1. 确认文件路径和权限 首先,我们需要确认MongoDB配置服务器期望写入的目录是否存在,并且MongoDB进程有权限在该目录中创建文件。 - 检查目录是否存在: ```bash ls -ld /www/server/mongodb/log/ ``` 如果目录不存在,需要创建它: ```bash mkdir -p /www/server/mongodb/log/ ``` - 检查目录权限: ```bash ls -ld /www/server/mongodb/log/ ``` 确保MongoDB的运行用户(通常是`mongod`或`mongodb`)对该目录有写权限。如果没有,可以修改目录权限: ```bash chown -R mongodb:mongodb /www/server/mongodb/log/ chmod -R 755 /www/server/mongodb/log/ ``` 注意:这里的用户和组`mongodb`需要根据实际情况替换(例如,有时可能是`mongod`)。 ### 2. 检查配置文件 MongoDB的配置文件(通常是`/etc/mongod.conf`或`/www/server/mongodb/config.conf`)中指定了`pidFilePath`。请确保配置文件中指定的`pidFilePath`与错误信息中的路径一致,或者错误信息中的路径正是你期望的。 在配置文件中查找`pidFilePath`配置项。例如: ```yaml processManagement: pidFilePath: /www/server/mongodb/log/configsvr.pid ``` 如果配置文件中没有指定`pidFilePath`,那么MongoDB默认会将pid文件存储在dbpath下的`mongod.lock`文件(但注意,默认情况下,配置服务器可能不使用相同的命名规则,因此最好显式指定)。如果你使用的是配置服务器副本集,确保配置文件是针对配置服务器的。 ### 3. 检查MongoDB配置服务器的启动命令或脚本 如果你使用系统服务(如systemd)启动MongoDB配置服务器,检查服务文件(例如`/lib/systemd/system/mongod.service`)中的启动命令,确认其使用的配置文件是否正确。 - 重新加载systemd配置(如果修改了服务文件): ```bash systemctl daemon-reload ``` - 启动服务并查看状态: ```bash systemctl start mongod-config # 请替换为你的服务名 systemctl status mongod-config ``` ### 4. 查看日志文件 MongoDB启动失败时,会在日志文件中记录详细原因。查看配置服务器日志文件的位置(在配置文件中通过`systemLog.path`指定)。例如: ```yaml systemLog: destination: file path: /www/server/mongodb/log/configsvr.log logAppend: true ``` 使用以下命令查看日志: ```bash tail -n 100 /www/server/mongodb/log/configsvr.log ``` 如果日志文件不存在,可能是因为MongoDB启动初期就失败了。此时,尝试手动启动配置服务器,并观察输出: ```bash mongod --config /www/server/mongodb/config.conf ``` ### 5. 检查端口占用 配置服务器默认使用27019端口(如果是以配置服务器模式运行),检查该端口是否被占用: ```bash netstat -tulnp | grep 27019 ``` 如果被占用,需要停止占用该端口的进程,或者修改MongoDB配置文件中配置服务器的端口。 ### 6. 修复数据库文件 如果之前配置服务器异常关闭,可能会导致数据库文件损坏。可以尝试修复(注意:修复操作可能会造成数据丢失,建议先备份): ```bash mongod --repair --config /www/server/mongodb/config.conf ``` 然后再次尝试启动。 ### 7. 重新生成pid文件 如果以上步骤都不能解决问题,可以尝试手动启动配置服务器,让它自动生成pid文件。确保在启动时使用正确的配置文件,并且配置文件中指定的目录都存在且具有适当权限。 ### 8. 检查系统资源 确保系统有足够的资源(内存、磁盘空间)来启动MongoDB。使用`df -h`查看磁盘空间,使用`free -m`查看内存。 ## 总结 以上步骤涵盖了解决该问题的常见方法。根据实际情况逐步排查,重点关注文件路径、权限、配置文件设置以及日志信息。 §§相关问题§§ 1. MongoDB配置服务器启动失败还有哪些常见原因? 2. 如何正确配置MongoDB配置服务器的日志文件? 3. 不同版本的MongoDB启动配置服务器的命令有什么区别? </think>## MongoDB 无法启动(`configsvr.pid` 文件缺失)的解决方案 这个错误表明 MongoDB 配置服务器在启动时无法创建 PID 文件(进程标识文件)。以下是系统性的解决方法: ### 1. **检查目录结构与权限** - **确认目录是否存在**: ```bash sudo mkdir -p /www/server/mongodb/log/ ``` - **修复目录权限**: ```bash sudo chown -R mongodb:mongodb /www/server/mongodb/log/ sudo chmod -R 755 /www/server/mongodb/log/ ``` ### 2. **验证配置文件设置** 在 MongoDB 配置文件(通常为 `/etc/mongod.conf` 或自定义路径)中检查: ```yaml storage: dbPath: /var/lib/mongo # 确保此目录存在且有权限 systemLog: path: /www/server/mongodb/log/mongod.log # 日志路径检查 processManagement: pidFilePath: /www/server/mongodb/log/configsvr.pid # PID文件路径 ``` **关键点**:确保 `pidFilePath` 与错误提示路径一致,且 `dbPath` 目录权限正确[^2]。 ### 3. **检查端口冲突** ```bash sudo netstat -tulnp | grep 27019 # 配置服务器默认端口 ``` 如果端口被占用,终止冲突进程或修改配置文件中的 `net.port` 值。 ### 4. **手动启动定位问题** 通过命令行启动获取实时错误: ```bash sudo -u mongodb mongod --configsvr --config /etc/mongod.conf ``` 观察终端输出的错误信息(比日志更直接)。 ### 5. **检查存储引擎兼容性** 如果是从 MMAPv1 升级到 WiredTiger: ```bash sudo mongod --repair --dbpath /var/lib/mongo ``` 修复后更新配置文件引擎设置[^2]: ```yaml storage: engine: wiredTiger ``` ### 6. **修复服务文件(Systemd 系统)** 检查 `/lib/systemd/system/mongod.service`: ```ini [Service] User=mongodb Group=mongodb ExecStart=/usr/bin/mongod --config /etc/mongod.conf ``` 重载服务配置: ```bash sudo systemctl daemon-reload sudo systemctl start mongod ``` ### 7. **日志分析** 查看 MongoDB 日志定位根本原因: ```bash tail -n 100 /www/server/mongodb/log/mongod.log ``` 常见日志错误: - `Failed to unlink socket file` → 删除 `/tmp/mongodb-*.sock` - `Insufficient free space` → 清理磁盘空间 ### 8. **重建 PID 文件(临时方案)** ```bash echo $(pgrep -f mongod) | sudo tee /www/server/mongodb/log/configsvr.pid sudo systemctl restart mongod ``` > **重要提示**:若以上步骤无效,尝试备份数据后重装 MongoDB 并恢复数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值