使用systemctl命令确认MongoDB服务是否正在运行。若未运行,尝试启动服务并查看启动结果:
sudo systemctl status mongod # 查看服务状态
sudo systemctl start mongod # 启动服务
sudo systemctl restart mongod # 重启服务(若修改配置后需重启)
若服务启动失败,需进一步检查日志定位原因。
MongoDB的日志文件默认位于/var/log/mongodb/mongod.log,包含详细的错误信息和操作记录。使用以下命令实时查看最新日志:
sudo tail -f /var/log/mongodb/mongod.log
通过日志可快速定位启动失败、连接拒绝、查询超时等问题的具体原因。
MongoDB的主配置文件为/etc/mongod.conf,需检查以下关键配置项的正确性:
net.bindIp:绑定的IP地址(如0.0.0.0允许所有IP连接,127.0.0.1仅本地连接);storage.dbPath:数据存储目录(如/var/lib/mongodb);systemLog.path:日志文件路径(如/var/log/mongodb/mongod.log)。MongoDB进程需对数据目录(默认/var/lib/mongodb)具有读写权限。使用以下命令修复权限问题:
sudo mkdir -p /var/lib/mongodb # 若目录不存在则创建
sudo chown -R mongodb:mongodb /var/lib/mongodb # 修改目录所有者为mongodb用户
sudo chmod -R 755 /var/lib/mongodb # 设置合适的权限
若出现“Connection refused”错误,需检查以下内容:
sudo ufw allow 27017 # 使用ufw开放端口
sudo netstat -tulnp | grep 27017 # 查看端口监听状态
原因:服务未启动、端口被占用、防火墙阻止或配置文件错误。
解决方案:
sudo systemctl start mongod启动服务;sudo netstat -tulnp | grep 27017检查端口占用,若有冲突则停止占用进程;sudo ufw allow 27017开放防火墙端口;/etc/mongod.conf中的bindIp配置是否正确。原因:副本集成员不可用、网络分区或写入超时。
解决方案:
rs.status()命令检查副本集状态,确认所有成员均为SECONDARY或PRIMARY;writeConcern参数(如将w: "majority"改为w: 1,降低写入一致性要求,但会降低数据可靠性)。原因:未创建索引、索引不合理、查询语句效率低。
解决方案:
explain("executionStats")分析查询计划,确认是否使用了索引:db.collection.find({field: "value"}).explain("executionStats")
db.collection.createIndex({field: 1}) // 单字段索引
db.collection.createIndex({field1: 1, field2: -1}) // 复合索引
limit()限制返回结果,避免$where等低效操作)。原因:配置文件错误、数据目录权限问题、端口被占用或依赖库缺失。
解决方案:
/var/log/mongodb/mongod.log)定位具体错误;/etc/mongod.conf中的dbPath(数据目录)和logpath(日志文件路径)是否正确;sudo lsof -i :27017查找占用进程并终止;libcrypto.so.1.1),安装对应库文件:sudo apt-get install libssl-dev # 安装缺失的库
sudo ldconfig # 更新动态链接库缓存
原因:副本集同步失败、写入操作未确认、磁盘故障。
解决方案:
rs.status()检查副本集同步状态,确认syncSourceHost是否正确;oplog日志(local.oplog.rs集合),确认数据是否同步:use local
db.oplog.rs.find().sort({$natural: -1}).limit(10) // 查看最近10条操作日志
writeConcern设置为w: "majority"(多数节点确认),避免数据丢失;df -h),确保数据目录有足够空间。/etc/mongod.conf中的storage.wiredTiger.engineConfig.cacheSizeGB参数(设置WiredTiger缓存大小,通常为物理内存的50%);operationProfiling.mode: slowOp),记录慢查询日志。_id、username);{field1: 1, field2: -1});db.collection.reIndex()重建索引,保持索引效率。sharding)水平扩展,或副本集(replication)提高读取性能。