MongoDB数据库服务启动失败求助及排查操作记录
MongoDB数据库服务启动失败
错误状态信息
执行systemctl status mongod.service的输出:
● mongod.service - MongoDB数据库服务器 已加载:已加载(/usr/lib/systemd/system/mongod.service; enabled; vendor preset: disabled) 活动状态:失败 (Result: exit-code) 于 周四 2023-07-06 15:25:29 UTC; 1分10秒前 文档:https://docs.mongodb.org/manual **进程:27540 ExecStart=/usr/bin/mongod $OPTIONS (代码=退出,状态=100)** 进程:27537 ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb (代码=退出,状态=0/SUCCESS) 进程:27534 ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb (代码=退出,状态=0/SUCCESS) 进程:27532 ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb (代码=退出,状态=0/SUCCESS) 主PID:11421 (代码=退出,状态=0/SUCCESS) Jul 06 15:25:29 ip-10-151-20-7.ec2.internal systemd[1]: 正在启动MongoDB数据库服务器... Jul 06 15:25:29 ip-10-151-20-7.ec2.internal mongod[27540]: {"t":{"$date":"2023-07-06T15:25:29.425Z"},"s":"I", "c":"CONTROL", "id":5760901, "ctx":...lse}}}} Jul 06 15:25:29 ip-10-151-20-7.ec2.internal mongod[27540]: 即将fork子进程,等待服务器准备好接受连接。 Jul 06 15:25:29 ip-10-151-20-7.ec2.internal mongod[27540]: fork出的进程:27543 Jul 06 15:25:29 ip-10-151-20-7.ec2.internal mongod[27540]: 错误:子进程启动失败,退出状态码100 Jul 06 15:25:29 ip-10-151-20-7.ec2.internal mongod[27540]: 如需查看更多输出信息,请去掉"--fork"选项启动。 Jul 06 15:25:29 ip-10-151-20-7.ec2.internal systemd[1]: mongod.service: 控制进程退出,代码=退出状态=100 Jul 06 15:25:29 ip-10-151-20-7.ec2.internal systemd[1]: **启动MongoDB数据库服务器失败。** Jul 06 15:25:29 ip-10-151-20-7.ec2.internal systemd[1]: mongod.service单元进入失败状态。 Jul 06 15:25:29 ip-10-151-20-7.ec2.internal systemd[1]: mongod.service失败。 提示:部分行被省略,使用-l参数查看完整内容。
另一次systemctl status mongod的输出:
● mongod.service - MongoDB数据库服务器 已加载:已加载(/usr/lib/systemd/system/mongod.service; enabled; vendor preset: disabled) 活动状态:失败 (Result: exit-code) 于 周四 2023-07-06 14:34:27 UTC; 5分钟前 文档:https://docs.mongodb.org/manual 进程:22327 ExecStart=/usr/bin/mongod $OPTIONS (代码=退出,状态=48) 进程:22324 ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb (代码=退出,状态=0/SUCCESS) 进程:22322 ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb (代码=退出,状态=0/SUCCESS) 进程:22318 ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb (代码=退出,状态=0/SUCCESS) 主PID:11421 (代码=退出,状态=0/SUCCESS) Jul 06 14:34:27 ip-<私有服务器IP>.ec2.internal systemd[1]: 正在启动MongoDB数据库服务器... Jul 06 14:34:27 ip-<私有服务器IP>.ec2.internal mongod[22327]: {"t":{"$date":"2023-07-06T14:34:27.382Z"},"s":"I", "c":"CONTROL", "id":5760901, "ctx":...lse}}}} Jul 06 14:34:27 ip-<私有服务器IP>.ec2.internal mongod[22327]: 即将fork子进程,等待服务器准备好接受连接。 Jul 06 14:34:27 ip-<私有服务器IP>.ec2.internal mongod[22327]: fork出的进程:22330 Jul 06 14:34:27 ip-<私有服务器IP>.ec2.internal systemd[1]: mongod.service: 控制进程退出,代码=退出状态=48 Jul 06 14:34:27 ip-<私有服务器IP>.ec2.internal systemd[1]: 启动MongoDB数据库服务器失败。 Jul 06 14:34:27 ip-<私有服务器IP>.ec2.internal systemd[1]: mongod.service单元进入失败状态。 Jul 06 14:34:27 ip-<私有服务器IP>.ec2.internal systemd[1]: mongod.service失败。 提示:部分行被省略,使用-l参数查看完整内容。
journalctl -xe的关键输出:
Jul 06 14:50:57 ip-<私有服务器IP>.ec2.internal systemd[1]: 正在启动MongoDB数据库服务器... Jul 06 14:50:57 ip-<私有服务器IP>.ec2.internal mongod[23608]: {"t":{"$date":"2023-07-06T14:50:57.569Z"},"s":"I", "c":"CONTROL", "id":5760901, "ctx":"-","msg": Jul 06 14:50:57 ip-<私有服务器IP>.ec2.internal mongod[23608]: 即将fork子进程,等待服务器准备好接受连接。 Jul 06 14:50:57 ip-<私有服务器IP>.ec2.internal mongod[23608]: fork出的进程:23610 Jul 06 14:50:57 ip-<私有服务器IP>.ec2.internal mongod[23608]: 错误:子进程启动失败,退出状态码48 Jul 06 14:50:57 ip-<私有服务器IP>.ec2.internal mongod[23608]: 如需查看更多输出信息,请去掉"--fork"选项启动。 Jul 06 14:50:57 ip-<私有服务器IP>.ec2.internal systemd[1]: mongod.service: 控制进程退出,代码=退出状态=48 Jul 06 14:50:57 ip-<私有服务器IP>.ec2.internal systemd[1]: 启动MongoDB数据库服务器失败。 Jul 06 14:50:57 ip-<私有服务器IP>.ec2.internal systemd[1]: mongod.service单元进入失败状态。 Jul 06 14:50:57 ip-<私有服务器IP>.ec2.internal systemd[1]: mongod.service失败。
说明:配置文件中bindIP已设为服务器私有IP。
已尝试的解决方案
systemctl restart mongod:启动失败,提示查看systemctl status mongod.service和journalctl -xe详情sudo systemctl start mongod:启动失败,提示同上rm -rf /var/lib/mongo/mongod.lock后重启:问题未解决sudo rm -r /tmp/mongodb-27017.sock后重启:问题未解决chown -R mongod:mongod mongodb:执行失败,提示“无法访问‘mongodb’:没有该文件或目录”systemctl start mongod.service:启动失败,提示同上
问题分析与解决建议
错误码说明
- 状态码48:MongoDB默认端口27017已被其他进程占用,这是最常见的原因
- 状态码100:通常与配置错误、数据目录权限异常或数据库文件损坏有关
排查与修复步骤
检查端口占用情况
执行以下命令查看27017端口是否被占用:netstat -tulpn | grep 27017 # 或使用ss命令(部分系统netstat未预装) ss -tulpn | grep 27017如果输出结果中有其他进程占用端口,可终止该进程(需确认进程无关紧要),或修改MongoDB配置文件
/etc/mongod.conf中的port字段更换端口。查看完整启动日志
按照提示,去掉--fork选项直接启动MongoDB,获取详细错误信息:sudo mongod --config /etc/mongod.conf此命令会直接在控制台输出所有启动日志,可精准定位问题(比如配置文件语法错误、数据目录不存在等)。
修复数据目录权限
之前执行chown命令时路径错误,正确的数据目录路径应为/var/lib/mongo,执行以下命令:sudo chown -R mongod:mongod /var/lib/mongo sudo chmod -R 755 /var/lib/mongo检查配置文件有效性
打开/etc/mongod.conf,确认以下内容:bindIp设置正确(私有IP,若需允许本地连接可设为0.0.0.0或私有IP,127.0.0.1)dbPath指向的目录存在且权限正确(默认是/var/lib/mongo)logPath指向的日志目录存在且权限正确- 配置文件无语法错误(比如逗号、括号缺失)
修复损坏的数据库
如果是数据库文件损坏导致启动失败,先停止服务,然后执行修复(注意:修复前建议备份数据):sudo systemctl stop mongod sudo mongod --dbpath /var/lib/mongo --repair sudo systemctl start mongod
内容的提问来源于stack exchange,提问作者LuciferTK0797
相关产品推荐
相关产品推荐

