【坑】mongodb启动报错

本文介绍了一种常见的MongoDB启动异常情况及解决方法。当遇到数据目录不存在导致的启动失败时,可以通过删除data目录下的.lock文件来解决问题。

mongodb真的很脆弱,公司加个防火墙,马上就不行了,撤掉也必须重启,重启还容易报错


cd 到mongodb的安装路径 ,然后启动


./mongod --dbpath=/data/mongodb/master/data --logpath=/data/mongodb/master/log/master.log                                     data和log是两个文件夹,这里可以随意建


启动有异常信息

2017-08-31T17:25:31.926+0800 I CONTROL  [initandlisten] MongoDB starting : pid=12882 port=27017 dbpath=/data/db 64-bit host=env-12
2017-08-31T17:25:31.926+0800 I CONTROL  [initandlisten] db version v3.4.1
2017-08-31T17:25:31.926+0800 I CONTROL  [initandlisten] git version: 5e103c4f5583e2566a45d740225dc250baacfbd7
2017-08-31T17:25:31.926+0800 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
2017-08-31T17:25:31.926+0800 I CONTROL  [initandlisten] allocator: tcmalloc
2017-08-31T17:25:31.926+0800 I CONTROL  [initandlisten] modules: none
2017-08-31T17:25:31.926+0800 I CONTROL  [initandlisten] build environment:
2017-08-31T17:25:31.926+0800 I CONTROL  [initandlisten]     distmod: rhel70
2017-08-31T17:25:31.926+0800 I CONTROL  [initandlisten]     distarch: x86_64
2017-08-31T17:25:31.926+0800 I CONTROL  [initandlisten]     target_arch: x86_64
2017-08-31T17:25:31.926+0800 I CONTROL  [initandlisten] options: {}
2017-08-31T17:25:31.926+0800 I STORAGE  [initandlisten] exception in initAndListen: 29 Data directory /data/db not found., terminating
2017-08-31T17:25:31.926+0800 I NETWORK  [initandlisten] shutdown: going to close listening sockets...
2017-08-31T17:25:31.926+0800 I NETWORK  [initandlisten] shutdown: going to flush diaglog...
2017-08-31T17:25:31.926+0800 I CONTROL  [initandlisten] now exiting
2017-08-31T17:25:31.926+0800 I CONTROL  [initandlisten] shutting down with code:100

解决办法:

把data目录下的.lock文件删掉,再执行启动命令,然后 ss -nlpt|grep mongo  能看到pid,说明启动成功了

<think>嗯,用户这次的问题很具体,是MongoDB启动时遇到错误码48的解决方案。从用户提供的引用内容看,虽然引用了MongoDB的Limit/Skip方法和一些运维片段,但实际需求与这些引用关联不大,可能是系统自动关联的无关内容。 用户应该是个运维人员或者开发者,正在部署MongoDB时遇到了技术障碍。错误码48在数据库启动失败时很常见,用户现在可能比较着急,需要快速可行的解决方案。考虑到MongoDB报错信息通常比较隐晦,用户可能已经尝试过基本排查但未果。 关于错误码48,核心要解决的是“端口被占用”问题。需要引导用户分步骤确认:先检查端口占用情况,再处理占用进程,最后调整MongoDB配置。如果用户是生产环境,还要特别注意操作安全性,避免误杀重要进程。 在技术细节上,要强调netstat和lsof命令的用法差异(不同Linux发行版可能默认安装不同工具),以及MongoDB配置文件的路径差异(源码安装vs包管理安装)。对于Windows用户也需要提供替代方案,虽然用户没提系统环境,但提前覆盖更稳妥。 用户没有提供日志全文,所以补充说明要检查完整日志很重要。另外主动提出可协助分析日志,既展现专业性,也为后续深入帮助留余地。最后列出的三个相关问题都是该错误的典型延伸场景,特别是副本集配置和容器化部署,现在用Docker部署MongoDB也很常见。 </think> MongoDB启动报错**"error code 48: Address already in use"**表示端口被占用,以下是详细解决方案: --- ### 🛠 解决步骤: 1. **确认占用端口进程** ```bash # Linux/Mac sudo lsof -i :27017 # 默认端口27017 # 或 sudo netstat -tulpn | grep 27017 # Windows netstat -ano | findstr :27017 ``` 若输出结果类似: `mongod 1234 user IPv6 0xabcd 0t0 TCP *:27017 (LISTEN)` 则进程ID `1234` 占用了端口。 2. **终止占用进程** ```bash # Linux/Mac sudo kill -9 <进程ID> # 如 sudo kill -9 1234 # Windows taskkill /PID <进程ID> /F # 如 taskkill /PID 1234 /F ``` 3. **修改MongoDB端口(可选)** 若需保留原进程,修改MongoDB配置文件`mongod.conf`: ```yaml net: port: 27018 # 更换新端口 ``` 重启服务:`sudo systemctl restart mongod` 4. **检查重复启动** 确保未同时运行多个`mongod`实例: ```bash ps aux | grep mongod # 检查是否有重复进程 ``` 5. **查看完整日志定位问题** ```bash journalctl -u mongod -n 50 --no-pager # 系统日志 cat /var/log/mongodb/mongod.log # MongoDB日志 ``` --- ### ⚠ 注意事项: - **副本集场景**:若配置了副本集,需确保所有节点端口不冲突[^2]。 - **防火墙限制**:临时关闭防火墙测试(生产环境慎用): ```bash sudo ufw disable # Ubuntu systemctl stop firewalld # CentOS ``` - **权限问题**:使用`sudo`启动或确保数据目录权限正确: ```bash sudo chown -R mongodb:mongodb /var/lib/mongodb ``` --- ### 📚 补充说明: 错误码48通常由以下原因引起: 1. 未正常关闭的MongoDB进程残留 2. 其他服务(如Docker容器)占用端口 3. 配置文件`net.bindIp`绑定到已用IP地址 > **引用提示**:端口冲突是分布式系统的常见问题,副本集配置时需统一规划端口[^2]。 --- ### 🔍 相关问题: 1. 如何永久修改MongoDB默认端口? 2. MongoDB副本集启动时出现端口冲突如何解决? 3. 如何在Docker容器中部署MongoDB并避免端口冲突? 若需进一步分析,请提供`/var/log/mongodb/mongod.log`日志片段,我将协助诊断具体原因。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值