在进行恢复前,需先定位故障根源,避免盲目操作导致数据进一步损坏:
systemctl status mongod
确认MongoDB服务是否运行。若未运行,尝试启动服务(systemctl start mongod
)并查看启动日志(journalctl -xe | grep mongod
)。/var/log/mongodb/mongod.log
,通过tail -f /var/log/mongodb/mongod.log
实时查看错误信息(如启动失败、连接拒绝等)。/etc/mongod.conf
的关键参数(如dbPath
数据目录、logPath
日志路径、net.port
端口、bindIp
绑定IP),确保语法正确(可使用YAML验证工具)。df -h
检查磁盘空间(需预留至少10%空闲空间)、free -m
检查内存(避免内存不足导致崩溃)、top
检查CPU负载(过高可能导致服务异常)。/var/lib/mongo
)和日志目录的所有者为mongod
用户(sudo chown -R mongod:mongod /var/lib/mongo
),避免权限不足无法读写。sudo systemctl stop mongod
。mongod --repair
命令修复数据目录(需指定--dbpath
,如sudo mongod --dbpath /var/lib/mongo --repair
)。注意:修复过程可能丢失部分损坏数据,需提前备份(cp -R /var/lib/mongo /var/lib/mongo_backup
)。sudo systemctl start mongod
)并检查状态(systemctl status mongod
)。cp -R /var/lib/mongo /var/lib/mongo_corrupted
),避免修复时二次损坏。mongod --repair --dbpath /var/lib/mongo
,等待修复完成。mongodump
备份,可通过mongorestore
恢复(参考“数据恢复”部分)。lsof -i :27017
查看27017端口是否被占用,若有则杀掉占用进程(kill -9 <PID>
)。Enforcing
模式,可临时设置为Permissive
(sudo setenforce 0
),排查是否因SELinux阻止连接;若需永久关闭,编辑/etc/selinux/config
将SELINUX=enforcing
改为disabled
。sudo firewall-cmd --permanent --add-port=27017/tcp
,sudo firewall-cmd --reload
)。mongo -u admin -p password --authenticationDatabase admin
)。mongodump
创建的备份(如/backups/mongo
目录或backup.tar.gz
压缩包)。mongorestore --dir /backups/mongo
(恢复到同名数据库);若需恢复到新数据库,添加--db
参数(mongorestore --dir /backups/mongo --db restored_db
)。mongorestore --dir /backups/mongo --db test --collection users
(仅恢复test
数据库的users
集合)。.tar.gz
格式,先解压(tar -zxvf backup.tar.gz
),再执行mongorestore --dir /path/to/extracted
。oplogSize
足够大)。mongodump --oplog
(将Oplog保存到备份目录的oplog.bson
文件中)。mongorestore --oplogReplay /path/to/backup
(将备份数据恢复到数据库,并应用Oplog中的操作)。mongodump
每日备份(如mongodump --out /backups/mongo_$(date +%F)
),并将备份文件存储在异地(如云存储)。mongostat
(监控操作频率)、mongotop
(监控集合读写时间)、db.serverStatus()
(查看服务器状态)监控数据库性能,及时发现异常。mongod.conf
参数(如storage.wiredTiger.engineConfig.cacheSizeGB
设置为物理内存的50%、net.maxIncomingConnections
设置为合理值)。systemLog.destination: file
(日志输出到文件)且systemLog.path
指向有效路径,便于故障排查。