适用场景:有定期备份(通过mongodump创建)的情况,是最常用的恢复方式。
操作步骤:
sudo systemctl stop mongod
/backups/mongodb/full_20250101)复制到MongoDB默认数据目录(通常为/var/lib/mongodb)。mongorestore --host localhost --port 27017 /backups/mongodb/full_20250101/mydb
mycollection):mongorestore --host localhost --port 27017 /backups/mongodb/full_20250101/mydb/mycollection.bson
--drop:恢复前删除目标数据库/集合,避免数据重复;--noIndexRestore:跳过索引恢复,加快恢复速度(后续手动创建索引)。sudo systemctl start mongod
mongo shell中执行:use mydb; db.mycollection.find() # 检查数据是否恢复
适用场景:备份后到故障前有写操作,需要恢复到某一具体时间点(如误删除数据)。
前提条件:备份时启用了Oplog(复制集默认开启)。
操作步骤:
--oplogReplay参数重放备份后到目标时间点的操作。mongorestore --oplogReplay --oplogLimit "2025-01-01T12:00:00" /backups/mongodb/full_20250101
--oplogLimit:指定恢复到的时间点(格式为ISODate),需早于故障时间。适用场景:MongoDB部署了复制集(Replica Set),某一节点数据丢失或损坏。
操作步骤:
sudo systemctl stop mongod
mongod --replSet rs0 --dbpath /var/lib/mongodb --port 27017
rs0:复制集名称(需与原集群一致);rs.status() # 查看节点状态,确认同步完成
适用场景:数据库文件损坏(如*.wt、*.ns文件损坏),导致MongoDB无法启动。
操作步骤:
sudo cp -R /var/lib/mongodb /var/lib/mongodb_backup
sudo mongod --dbpath /var/lib/mongodb --repair
mongod.lock(通常在/var/lib/mongodb目录下),需删除:sudo rm -f /var/lib/mongodb/mongod.lock
sudo systemctl start mongod
注意:修复可能导致部分数据丢失,建议修复前通过mongodump导出数据。适用场景:上述方法均无法恢复(如物理损坏、逻辑坏道),需使用专业工具。
常用工具:
--dryRun参数验证备份完整性(如mongorestore --dryRun /backups/mongodb/latest)。systemctl stop mongod),避免数据覆盖。