适用场景:有通过mongodump创建的备份文件(如BSON格式),需恢复整个数据库或指定集合。
操作步骤:
sudo systemctl stop mongod。/backups/mongodb/full_20250101)复制到目标服务器(若备份在本地,可跳过)。mongorestore --host localhost --port 27017 --db 目标数据库名 /path/to/backup/directory(如mongorestore --host localhost --port 27017 --db mydb /backups/mongodb/full_20250101);mongorestore --host localhost --port 27017 --db 目标数据库名 --collection 目标集合名 /path/to/backup/directory/集合名.bson(如mongorestore --host localhost --port 27017 --db mydb --collection users /backups/mongodb/full_20250101/users.bson)。sudo systemctl start mongod。mongo shell连接数据库,执行use 目标数据库名→db.集合名.find(),检查数据是否完整。适用场景:MongoDB运行在复制集模式下,需恢复到某个特定时间点(如误删除数据前的状态)。
操作前提:备份时启用了Oplog(默认开启),且备份目录包含Oplog数据(如oplog.bson)。
操作步骤:
sudo systemctl stop mongod。--oplogReplay参数回放备份期间的操作,--oplogLimit指定恢复的时间点(格式为ISODate,如2025-01-01T12:00:00Z),命令示例:mongorestore --host localhost --port 27017 --oplogReplay --oplogLimit "2025-01-01T12:00:00Z" /path/to/backup/directory。sudo systemctl start mongod。mongo shell检查数据是否恢复到指定时间点的状态。适用场景:MongoDB服务异常关闭(如系统崩溃、强制关机),导致数据文件损坏(常见错误:assertion src/mongo/db/storage/mmap_v1/btree/btree.cpp:1755)。
操作步骤:
sudo systemctl stop mongod。sudo rm -rf /var/lib/mongodb/mongod.lock(锁文件路径可能因配置不同而变化,可通过cat /etc/mongod.conf | grep dbPath确认数据目录)。sudo mongod --repair --dbpath /var/lib/mongodb(--dbpath指定数据目录),等待修复完成(修复过程可能耗时较长,取决于数据量)。sudo systemctl start mongod,检查服务状态(sudo systemctl status mongod)是否为active (running)。适用场景:无备份文件或备份文件损坏,尝试通过第三方工具恢复已删除或损坏的数据(成功率取决于数据覆盖情况)。
常用工具:
storage.journal.enabled=true(开启预写日志),用于恢复误删除的集合数据。mongodump结合crontab设置定期备份(如每天凌晨2点备份),并将备份文件存储在异地(如云存储)。.bson文件),可通过mongorestore --dryRun命令模拟恢复过程,确认备份文件可用。sudo chown -R mongodb:mongodb /var/lib/mongodb),避免服务无法启动。