一、准备工作
安装MongoDB工具包
在Ubuntu上,mongodump(备份)和mongorestore(恢复)工具包含在mongodb-tools包中。若未安装,可通过以下命令安装:
sudo apt update
sudo apt install mongodb-tools
确认MongoDB服务状态
备份/恢复前需确保MongoDB服务正在运行:
sudo systemctl start mongod # 启动服务
sudo systemctl enable mongod # 设置开机自启
sudo systemctl status mongod # 检查状态(显示"active (running)"即为正常)
二、MongoDB备份操作
使用mongodump备份数据
mongodump是MongoDB自带的全量备份工具,支持备份整个实例、特定数据库或集合。
/backup/mongodb_$(date +%Y%m%d),按日期命名便于管理):sudo mkdir -p /backup # 创建备份目录(可选)
sudo mongodump --out /backup/mongodb_$(date +%Y%m%d)
mydb):sudo mongodump --db mydb --out /backup/mongodb_$(date +%Y%m%d)
mydb中的users集合):sudo mongodump --db mydb --collection users --out /backup/mongodb_$(date +%Y%m%d)
压缩备份文件
为节省存储空间,可使用tar命令压缩备份目录:
sudo tar -czvf /backup/mongodb_backup_$(date +%Y%m%d).tar.gz /backup/mongodb_$(date +%Y%m%d)
压缩后可通过ls -lh命令查看压缩包大小,确认节省空间效果。
自动化定期备份(可选)
使用cron定时任务实现每日自动备份(如凌晨2点):
crontab -e
0 2 * * * sudo mkdir -p /backup && sudo mongodump --out /backup/mongodb_$(date +\%Y\%m\%d) && sudo tar -czvf /backup/mongodb_backup_$(date +\%Y\%m\%d).tar.gz /backup/mongodb_$(date +\%Y\%m\%d) && sudo find /backup -name "mongodb_backup_*.tar.gz" -mtime +7 -exec rm {} \;
三、MongoDB恢复操作
停止MongoDB服务(可选但推荐)
恢复前停止服务可避免数据冲突(若为生产环境,建议在低峰期操作):
sudo systemctl stop mongod
使用mongorestore恢复数据
mongorestore是mongodump的配套恢复工具,支持恢复整个实例、特定数据库或集合。
/backup/mongodb_20250930)中的所有数据库恢复到MongoDB实例:sudo mongorestore /backup/mongodb_20250930
mydb):sudo mongorestore --db mydb /backup/mongodb_20250930/mydb
mydb中的users集合):sudo mongorestore --db mydb --collection users /backup/mongodb_20250930/mydb/users.bson
--drop选项):sudo mongorestore --drop --db mydb /backup/mongodb_20250930/mydb
启动MongoDB服务
恢复完成后,启动MongoDB服务以恢复正常访问:
sudo systemctl start mongod
验证恢复结果
使用mongo shell连接MongoDB,检查数据是否恢复成功:
mongo # 进入mongo shell
use mydb # 切换到目标数据库
db.users.find() # 查询目标集合(如users)的数据
若能正常查询到备份时的数据,则说明恢复成功。
四、注意事项
sudo提升权限(如sudo mongodump)。mongorestore --dryRun模拟恢复过程,检查备份文件的完整性(不会实际恢复数据)。openssl等工具加密备份文件(如tar -czvf - /backup | openssl enc -aes-256-cbc -salt -out /backup/encrypted.tar.gz.enc)。