在恢復數據前,需完成以下基礎操作:
sudo systemctl stop mongod
/var/lib/mongodb
或/data/db
)復制到安全位置:sudo cp -R /var/lib/mongodb /var/lib/mongodb_backup
.tar.gz
),需提前解壓;若為mongodump
生成的BSON/JSON文件,確保路徑正確。mongorestore
是MongoDB官方提供的邏輯恢復工具,適用于mongodump
生成的備份或手動導出的BSON/JSON文件。
若備份目錄包含完整數據庫(如/backups/mydb
),可使用以下命令恢復到指定數據庫(如mydb
):
mongorestore --host localhost --port 27017 --db mydb /backups/mydb
--host
/--port
:指定MongoDB服務器地址和端口(默認localhost:27017
);--db
:目標數據庫名(需與備份時的數據庫名一致)。若只需恢復某個集合(如mycollection
),可指定集合路徑:
mongorestore --host localhost --port 27017 --db mydb --collection mycollection /backups/mydb/mycollection.bson
--collection
:目標集合名(需與備份時的集合名一致)。若MongoDB啟用了身份驗證,需添加用戶名、密碼及認證數據庫:
mongorestore --host localhost --port 27017 --username admin --password 123456 --authenticationDatabase admin /backups/mydb
--username
/--password
:認證用戶名和密碼;--authenticationDatabase
:認證數據庫(通常為admin
)。若備份時啟用了Oplog(MongoDB的操作日志),可通過回放Oplog將數據恢復到故障前的精確時間點。
--oplog
參數(如mongodump --oplog
);/var/lib/mongodb/local/oplog.rs
)。mongorestore --host localhost --port 27017 --oplogReplay /backups/mydb
--oplogReplay
:指示mongorestore
回放Oplog中的操作,實現增量恢復。若使用xtrabackup
或mongod
的--archive
參數創建了物理備份(如.tar.gz
或.xbstream
格式),需通過以下步驟恢復:
sudo yum install -y percona-xtrabackup-24 # CentOS/RHEL
sudo apt install -y percona-xtrabackup-24 # Ubuntu/Debian
sudo innobackupex --decompress --remove-original /backups/physical_backup
--decompress
:解壓備份文件;--remove-original
:刪除原始壓縮文件(可選)。sudo innobackupex --apply-log /backups/physical_backup
--apply-log
:應用備份中的事務日志,確保數據一致性。sudo rsync -avz /backups/physical_backup/ /var/lib/mongodb/
sudo systemctl start mongod
若邏輯備份或Oplog恢復無效,可嘗試第三方工具(如MongoDB Repair Tool
、MongoDB Rescue
),但此類工具通常針對物理文件損壞的情況,且效果取決于數據損壞程度。建議優先使用官方工具恢復。
恢復完成后,通過Mongo Shell驗證數據是否恢復成功:
mongo --host localhost -u <username> -p <password> --authenticationDatabase admin
show dbs; // 查看所有數據庫
use mydb; // 切換到目標數據庫
show collections; // 查看所有集合
db.mycollection.find(); // 查詢集合中的數據
注意事項: