在进行数据恢复前,需完成以下关键步骤以避免数据进一步损坏:
sudo systemctl stop mongod
/var/lib/mongodb)复制到安全位置,以便恢复失败时可回滚。sudo cp -R /var/lib/mongodb /var/lib/mongodb_backup
mongorestore是MongoDB官方提供的恢复工具,适用于mongodump生成的BSON格式备份或压缩包。
mongorestore --host <主机名/IP> --port <端口> <备份目录>/<数据库名>
mongorestore -u <用户名> -p <密码> --authenticationDatabase <认证库> <备份目录>
示例:恢复game数据库到本地默认端口(27017),认证库为admin:mongorestore -u admin -p 123456 --authenticationDatabase admin /home/user/backup/game
mongorestore所在目录(如/usr/local/mongodb/bin),执行:./mongorestore -u <用户名> -p <密码> --authenticationDatabase <认证库> <备份目录>/<数据库名>/<集合名>
示例:恢复game数据库中的user集合:./mongorestore -u admin -p 123456 --authenticationDatabase admin /home/user/backup/game/user
--drop选项可先删除当前数据库中的数据,再恢复备份(慎用,会导致现有数据丢失):mongorestore --drop --host localhost --port 27017 /home/user/backup/game
若数据丢失发生在最近一次完整备份后,可通过oplog(操作日志)恢复增量数据(需开启oplog,默认开启)。
oplog.rs文件(位于数据目录的local数据库中,如/var/lib/mongodb/local/oplog.rs)。mongorestore的--oplogReplay选项恢复指定时间段的oplog:mongorestore --oplogReplay --host localhost --port 27017 /path/to/oplog_file
--oplogLimit和--oplogStart选项(具体参数参考官方文档)。若集群中存在其他健康节点,可通过数据复制同步数据:
rs.add("丢失节点IP:27017")
若使用支持快照的存储(如LVM、ZFS、云服务商的快照功能),可直接恢复数据目录的快照:
lvcreate --size 1G --snapshot --name mongodb_snapshot /dev/vg_mongodb/lv_mongodb
mkdir /mnt/mongodb_snapshot
mount /dev/vg_mongodb/mongodb_snapshot /mnt/mongodb_snapshot
cp -R /mnt/mongodb_snapshot/* /var/lib/mongodb/
umount /mnt/mongodb_snapshot
lvremove /dev/vg_mongodb/mongodb_snapshot
若上述方法无效,可尝试第三方工具(如MongoDB Rescue、MongoDB Backup Manager),但需注意:
show dbs、db.collection.find()验证);