docker中数据库备份脚本——Mongo备份脚本
#!/bin/bash
# MongoDB数据库信息
MONGO_HOST="127.0.0.1"
MONGO_PORT="27017"
declare -A MONGO_CREDENTIALS
MONGO_CREDENTIALS["数据库1"]="数据库1帐号:密码"
MONGO_CREDENTIALS["数据库2"]="数据库2帐号:密码"
MONGO_CREDENTIALS["数据库3"]="数据库3帐号:密码"
# 备份保存主目录
BACKUP_ROOT="/data/data_backup/mongo"
# 最多保留的备份日期文件夹数
MAX_DATE_FOLDERS=10
CURRENT_DATE=$(date +%Y%m%d)
# 循环备份每个数据库
for DB_NAME in "${!MONGO_CREDENTIALS[@]}"; do
# 创建日期文件夹(如果不存在)
BACKUP_DIR="$BACKUP_ROOT/$CURRENT_DATE"
mkdir -p "$BACKUP_DIR"
# 备份文件名
BACKUP_FILE="$BACKUP_DIR/backup_${DB_NAME}_${CURRENT_DATE}"
# MongoDB备份命令
CREDENTIALS=(${MONGO_CREDENTIALS[$DB_NAME]//:/ })
USERNAME=${CREDENTIALS[0]}
PASSWORD=${CREDENTIALS[1]}
echo "Executing mongodump command: docker exec mongo mongodump --host $MONGO_HOST --port $MONGO_PORT --username ${USERNAME} --password ${PASSWORD} --db $DB_NAME --out $BACKUP_FILE"
docker exec mongo mongodump --host $MONGO_HOST --port $MONGO_PORT --username ${USERNAME} --password ${PASSWORD} --db $DB_NAME --out $BACKUP_FILE
# 将容器里的数据数据拷贝出来
docker cp mongo:$BACKUP_FILE $BACKUP_FILE
# 删除容器里的数据
docker exec mongo rm -r $BACKUP_DIR
# 删除过期的日期文件夹
CURRENT_DATE_FOLDERS=$(ls -1 -d $BACKUP_ROOT/*/ 2>/dev/null)
NUM_DATE_FOLDERS=$(echo "$CURRENT_DATE_FOLDERS" | wc -l)
if [ $NUM_DATE_FOLDERS -gt $MAX_DATE_FOLDERS ]; then
OLDEST_DATE_FOLDER=$(echo "$CURRENT_DATE_FOLDERS" | head -n 1)
rm -r "$OLDEST_DATE_FOLDER"
echo "Deleted expired date folder: $OLDEST_DATE_FOLDER"
fi
echo "Backup completed for $DB_NAME: $BACKUP_FILE"
done
定时任务
命令:crontab -e
0 2 * * * /data/data_backup/mysql/backup.sh
每天2点开始备份