【mongoDB】MongoDB 增量备份和还原的原理和操作
2023-03-28 本文已影响0人
Bogon
MongoDB 增量备份和还原的原理:
MongoDB 增量备份和还原是基于 oplog 的,oplog(操作日志)是 MongoDB 中的一个特殊集合,记录了所有的写操作,包括 insert、update、delete 等,可以用来复制和恢复数据。
在备份时,先全量备份一次,然后记录下备份时的 oplog 的位置,之后定期备份 oplog,增量备份只备份从上次备份后的 oplog,这样可以大大缩短备份时间和减小备份文件的大小。
在还原时,先还原全量备份,然后将增量备份的 oplog 依次应用到数据库中,即可恢复至备份时的状态。
备份脚本:
#!/bin/bash
# MongoDB连接信息
HOSTNAME=<hostname>
PORT=<port>
USERNAME=<username>
PASSWORD=<password>
# 备份目录
BACKUP_DIR=<backup_directory>
# 全量备份
mongodump --host $HOSTNAME --port $PORT --username $USERNAME --password $PASSWORD --out $BACKUP_DIR
# 记录oplog位置
OPLOG_POS=$(mongo --host $HOSTNAME --port $PORT --username $USERNAME --password $PASSWORD --quiet --eval "rs.printReplicationInfo()" | grep "lastOpTime" | awk '{print $3}')
# 增量备份
mongodump --host $HOSTNAME --port $PORT --username $USERNAME --password $PASSWORD --oplog --out $BACKUP_DIR --oplogFile "oplog.bson" --query "{ts: {\$gt: Timestamp($OPLOG_POS)}}"
还原脚本:
#!/bin/bash
# MongoDB连接信息
HOSTNAME=<hostname>
PORT=<port>
USERNAME=<username>
PASSWORD=<password>
# 备份目录
BACKUP_DIR=<backup_directory>
# 还原全量备份
mongorestore --host $HOSTNAME --port $PORT --username $USERNAME --password $PASSWORD $BACKUP_DIR
# 还原增量备份
mongorestore --host $HOSTNAME --port $PORT --username $USERNAME --password $PASSWORD --oplogReplay $BACKUP_DIR