以下是一个完整的MongoDB自动备份Shell脚本示例:
#!/bin/bash
# MongoDB备份脚本
# 版本: 1.0
# 作者: [你的名字]
# 日期: $(date +%Y-%m-%d)
# 配置参数
MONGO_HOST="localhost" # MongoDB主机
MONGO_PORT="27017" # MongoDB端口
MONGO_USER="" # MongoDB用户名(如果有认证)
MONGO_PASS="" # MongoDB密码(如果有认证)
BACKUP_DIR="/data/backups/mongodb" # 备份目录
DATE=$(date +%Y%m%d_%H%M%S) # 当前日期时间
DAYS_TO_KEEP=7 # 保留最近7天的备份
# 创建备份目录(如果不存在)
mkdir -p $BACKUP_DIR
# 备份函数
backup_mongodb() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] 开始MongoDB备份..."
# 构建备份命令
if [ -z "$MONGO_USER" ]; then
# 无认证备份
mongodump --host $MONGO_HOST --port $MONGO_PORT --out $BACKUP_DIR/mongodb_backup_$DATE
else
# 有认证备份
mongodump --host $MONGO_HOST --port $MONGO_PORT --username $MONGO_USER --password $MONGO_PASS --out $BACKUP_DIR/mongodb_backup_$DATE
fi
# 检查备份是否成功
if [ $? -eq 0 ]; then
echo "[$(date +'%Y-%m-%d %H:%M:%S')] MongoDB备份成功,保存到: $BACKUP_DIR/mongodb_backup_$DATE"
# 压缩备份文件
cd $BACKUP_DIR
tar -czvf mongodb_backup_$DATE.tar.gz mongodb_backup_$DATE
rm -rf mongodb_backup_$DATE
# 清理旧备份
find $BACKUP_DIR -name "mongodb_backup_*.tar.gz" -type f -mtime +$DAYS_TO_KEEP -exec rm -f {} \;
echo "[$(date +'%Y-%m-%d %H:%M:%S')] 已清理超过$DAYS_TO_KEEP天的旧备份"
else
echo "[$(date +'%Y-%m-%d %H:%M:%S')] MongoDB备份失败!"
exit 1
fi
}
# 执行备份
backup_mongodb
基本备份功能:
mongodump
工具备份MongoDB数据备份管理:
日志记录:
使用Linux的crontab设置定时任务,实现自动备份:
/usr/local/bin/mongodb_backup.sh
bash
chmod +x /usr/local/bin/mongodb_backup.sh
bash
crontab -e
bash
0 2 * * * /usr/local/bin/mongodb_backup.sh >> /var/log/mongodb_backup.log 2>&1
# 只备份特定数据库
mongodump --host $MONGO_HOST --port $MONGO_PORT --db mydatabase --out $BACKUP_DIR/mongodb_backup_$DATE
# 只备份特定集合
mongodump --host $MONGO_HOST --port $MONGO_PORT --db mydatabase --collection mycollection --out $BACKUP_DIR/mongodb_backup_$DATE
# 备份完成后传输到远程服务器
REMOTE_USER="backupuser"
REMOTE_HOST="backup.server.com"
REMOTE_DIR="/remote/backup/path"
scp $BACKUP_DIR/mongodb_backup_$DATE.tar.gz $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR
# 备份完成后发送邮件通知
MAIL_TO="admin@example.com"
SUBJECT="MongoDB备份报告 - $(date +%Y-%m-%d)"
if [ $? -eq 0 ]; then
echo "MongoDB备份成功完成于 $(date)" | mail -s "$SUBJECT" $MAIL_TO
else
echo "MongoDB备份失败于 $(date)" | mail -s "$SUBJECT" $MAIL_TO
fi
创建配置文件/etc/mongodb_backup.conf
:
MONGO_HOST="localhost"
MONGO_PORT="27017"
MONGO_USER=""
MONGO_PASS=""
BACKUP_DIR="/data/backups/mongodb"
DAYS_TO_KEEP=7
然后在脚本中读取配置:
# 读取配置文件
if [ -f "/etc/mongodb_backup.conf" ]; then
source /etc/mongodb_backup.conf
fi
备份的恢复可以使用mongorestore
命令:
# 解压备份文件
tar -xzvf mongodb_backup_20230101_020000.tar.gz
# 恢复备份
mongorestore --host localhost --port 27017 mongodb_backup_20230101_020000/
权限问题:
存储空间:
安全性:
测试:
性能影响:
--oplog
选项进行增量备份通过以上脚本和配置,你可以实现一个可靠、自动化的MongoDB备份解决方案,确保数据安全。