在进行恢复前,需先定位故障根源,避免盲目操作导致数据进一步损坏:
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指向有效路径,便于故障排查。