缘由:linux服务器mongodb数据库挂掉了,需要重连
一、先systemctl方式启动mongo,测试是否能成功
systemctl status/start/stop mongod
二、手动方式启动(不推荐此方法)
1. 先mongo看能否连接成功
mongo
2. 查看mongo的数据库存放路径(dbpath)或者查看到mongod.conf文件路径
ps -ax | grep mongod
3. 在mongod.conf中查看数据库存放路径(dbpath)
/etc/mongo.conf # mongo.conf文件路径。vim打开查看mongo数据库的dbpath
/var/lib/mongo # mongo的数据库存放路径(dbpath)
4. 查看mongo的安装路径
root@xxx:/# whereis mongo
mongo: /usr/bin/mongo
5. 切换到mongo的安装bin路径,执行重启命令
cd /usr/bin
sudo ./mongod -dbpath 刚刚查到的mongo数据库存放地址(dbpath)
如:sudo ./mongod -dbpath /var/lib/mongo
6. 有些时候,这种手动启动方式,关闭jumpserver连接服务器后会mongo数据库会断连,所以可以使用 nohup 方式后台一直启动,具体命令:
nohup mongod -dbpath /var/lib/mongo > out.log &
nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行, 具体可以查看菜鸟教程的解释和示例
以上命令表示在后台执行 mongod -dbpath /var/lib/mongo (mongo手动启动命令),并重定向输入到 out.log 文件
7. 清理旧日志,释放磁盘空间(以下摘自菜鸟教程)
df 以磁盘分区为单位查看文件系统,可以获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
例如,我们使用df -h命令来查看磁盘信息, -h 选项为根据大小适当显示:
显示内容参数说明:
Filesystem:文件系统
Size: 分区大小
Used: 已使用容量
Avail: 还可以使用的容量
Use%: 已用百分比
Mounted on: 挂载点
相关命令:
df -hl:查看磁盘剩余空间
df -h:查看每个根路径的分区大小
du -sh [目录名]:返回该目录的大小
du -sm [文件夹]:返回该文件夹总M数
du -h [目录名]:查看指定文件夹下的所有文件大小(包含子文件夹)
三、可以通过上面手动启动mongo成功,但Jenkins更新,mongo启动失败,以下为正常排查流程
- 查看Linux系统日志,看下mongo启动命令错误日志
- 排查mongo自身日志,并依次解决
- 重启mongo
1. 查看Linux系统日志,先切换root用户,然后vim打开Linux系统日志,日志文件在/var/log/messages ,路径和文件不对自行再查下
sudo su
/var/log/messages
2. vim打开后,/ 输入mongo进行查找定位,发现命令错误日志
错误显示子进程退出失败,mongo启动失败,应该是之前我们直接kill mongo进程号异常关闭mongo导致, 系统日志没有找到关键的错误原因和解决办法,再进入mongo日志进行定位查找
3. 查找mongo日志文件路径
vim etc/mongod.conf
vim打开后查找到mongo的日志文件路径为:/var/log/mongodb/mongod.log
4. vim打开mongo日志, 继续定位mongo启动失败问题
MongoDB的日志文件在设置 logappend=true 的情况下,会不断向同一日志文件追加的,时间长了,日志文件会变得非常大,vim打开会很慢
可以将旧的mongod.log文件改名,新建一个同名的mongod.log,再来复现Jenkins更新时mongo启动失败问题,这样vim打开就很快了
打开mongo日志文件后,错误如下:(可以先命令行模式输入nohl取消之前vim搜索mongo关键字的高亮显示)
5. mongod.lock文件暂不可用问题(Unable to lock the lock file)
以上错误表示:mongod.lock文件暂不可用,因为我们之前手动拉起了一个mongo,而mongo启动一个示例后就会占用mongod.lock文件,所以Jenkins再启动mongo就会提示mongod.lock文件暂不可用
6. mongo地址和端口被占用(SocketException: Address already in use)
以上错误表示:mongo默认的127.0.0.1:27017地址和端口被占用了
7. 无法断开套接字文件(Failed to unlink socket file)
以上错误表示:无法断开套接字文件/tmp/mongodb-27017.sock,mongodb-27017.sock可以理解为一个套接字管道文件
8. mongo目录下文件权限错误(Permission denied)
以上错误表示:mongo目录下的WiredTiger.turtl文件操作时权限错误,这就引申一个mongo启动用户组的问题
9. 先查看正常的服务器下,mongo的文件权限及用户组
top查看得知正常机器人的mongo启动的用户组为mongod
10. 查看启动错误的mongo文件权限及用户组
ls -ll 查看var/lib/mongo目录下的文件权限及用户组
11. 更改mongo目录下的文件权限及用户组为之前查到的mongod
sudo chown -R mongod:mongod /var/lib/mongo/*
12. top查看mongod运行的用户组,确定是否为mongod,如果是roo等其他用户组,不是mongod用户组则需要手动关闭mongo连接再重新执行Jenkins更新
sudo chown -R mongod:mongod /var/lib/mongo/*
13. 进入mongo后执行手动关闭mongo连接,切忌使用kill进程方式,否则又会报之前的mongo异常关闭错误
mongo
use admin
db.shutdownServer()