我使用mongodb-10gen debian软件包安装了mongodb 2.0.3.一切顺利,除了默认安装的服务在计算机启动时没有启动.它mongod仅以root用户身份运行.也许这就是原因.但据我所知,服务应该运行,因为它们是由root用户添加的.
可能是什么解决方案?
如果我跑的话 mongod
Tue Mar 27 13:00:44 [initandlisten] couldn't open /data/db/transaction_processor_dummy_development.ns errno:1 Operation not permitted
Run Code Online (Sandbox Code Playgroud)
如果我运行sudo service mongodb start它说:
mongodb start/running, process 4861
Run Code Online (Sandbox Code Playgroud)
但是在看的时候没有过程htop并mongo说:
MongoDB shell version: 2.0.3
connecting to: test
Tue Mar 27 13:02:40 Error: couldn't connect to server 127.0.0.1 shell/mongo.js:84
exception: connect failed
Run Code Online (Sandbox Code Playgroud)
Nia*_*ang 112
在我的ubuntu服务器上,运行:
sudo rm /var/lib/mongodb/mongod.lock
mongod --repair
sudo service mongodb start
Run Code Online (Sandbox Code Playgroud)
Ese*_*ulu 31
固定!
原因是dbpath变量/etc/mongodb.conf.以前,我使用的是mongodb 1.8,其中dbpath的默认值是/data/db.upstart作业mongodb(mongodb-10gen包附带)调用mongodwith --config /etc/mongodb.conf选项.
作为一种解决方案,我只需要/data/db递归更改目录的所有者.
Rya*_*anH 26
如果您的文件权限以某种方式更改,也会发生这种情况.删除锁文件没有帮助,我们在日志文件中收到错误,如:
2016-01-20T09:14:58.210-0800 [initandlisten] warning couldn't write to / rename file /var/lib/mongodb/journal/prealloc.0: couldn't open file /var/lib/mongodb/journal/prealloc.0 for writing errno:13 Permission denied
2016-01-20T09:14:58.288-0800 [initandlisten] couldn't open /var/lib/mongodb/local.ns errno:13 Permission denied
2016-01-20T09:14:58.288-0800 [initandlisten] error couldn't open file /var/lib/mongodb/local.ns terminating
Run Code Online (Sandbox Code Playgroud)
所以,去检查权限:
ls -l /var/lib/mongodb
total 245780
drwxr-xr-x 2 mongodb mongodb 4096 Jan 20 09:14 journal
drwxr-xr-x 2 root root 4096 Jan 20 09:11 local
-rw------- 1 root root 67108864 Jan 20 09:11 local.0
-rw------- 1 root root 16777216 Jan 20 09:11 local.ns
-rwxr-xr-x 1 mongodb nogroup 0 Jan 20 09:14 mongod.lock
Run Code Online (Sandbox Code Playgroud)
修理:
# chown -R mongodb:mongodb /var/lib/mongodb
Run Code Online (Sandbox Code Playgroud)
如果锁定文件仍然存在,请将其删除:
# rm /var/lib/mongodb/mongod.lock
Run Code Online (Sandbox Code Playgroud)
启动mongodb
# service mongodb start
Run Code Online (Sandbox Code Playgroud)
记录日志,你应该看到它的结尾:
tail -f /var/log/mongodb/mongodb.log
2016-01-20T09:16:02.025-0800 [initandlisten] waiting for connections on port 27017
Run Code Online (Sandbox Code Playgroud)
And*_*res 20
我对这个问题感到厌倦,所以我决定创建一个shell脚本来轻松恢复我的mongo数据库.
#!/bin/sh
sudo rm /var/lib/mongodb/mongod.lock
sudo -u mongodb mongod -f /etc/mongodb.conf --repair
sudo service mongodb start
Run Code Online (Sandbox Code Playgroud)
Soc*_*lai 12
请记住,通过强制删除.lock文件重新启动数据库时,数据可能会损坏.如果以这种方式重新启动服务器,则不应将您的服务器视为"健康".
要修改情况,要么运行
mongod --repair
Run Code Online (Sandbox Code Playgroud)
要么
> db.repairDatabase();
Run Code Online (Sandbox Code Playgroud)
在mongo shell中将数据库恢复到"健康"状态.
Abd*_*iaa 10
1 - 如果启用,则禁用fork选项/etc/mongodb.conf
2 - 修复您的数据库
mongod --repair --dbpath DBPATH
Run Code Online (Sandbox Code Playgroud)
3 - 杀死当前的mongod进程
找到mongo进程
ps -ef | grep mongo
Run Code Online (Sandbox Code Playgroud)
你会得到mongod PID
mongodb PID 1 0 06:26 ? 00:00:00 /usr/bin/mongod --config /etc/mongodb.conf
Run Code Online (Sandbox Code Playgroud)
停止当前的mongod进程
kill -9 PID
Run Code Online (Sandbox Code Playgroud)
4 - 启动mongoDB服务
service mongodb start
Run Code Online (Sandbox Code Playgroud)
删除.lock文件并重新安装并没有解决我的机器(Ubuntu 19.10)上的问题。问题是在意外关闭后,MongoDB 袜子不再属于 MongoDB 组和用户。
所以,我按照以下步骤操作:
更改用户:组权限:
chown mongodb:mongodb <YOUR_SOCK>
Run Code Online (Sandbox Code Playgroud)须藤 systemctl 启动 mongod
对于ubunto来说,实现它的原因很简单,就是安装mongodb包:
sudo apt-get install mongodb
Run Code Online (Sandbox Code Playgroud)
sudo -u mongodb mongod --repair --dbpath /var/lib/mongodb/
sudo service mongodb start
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
237372 次 |
| 最近记录: |