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=10CURRENT_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 ]; thenOLDEST_DATE_FOLDER=$(echo "$CURRENT_DATE_FOLDERS" | head -n 1)rm -r "$OLDEST_DATE_FOLDER"echo "Deleted expired date folder: $OLDEST_DATE_FOLDER"fiecho "Backup completed for $DB_NAME: $BACKUP_FILE"
done
定时任务
命令:crontab -e
0 2 * * * /data/data_backup/mysql/backup.sh
每天2点开始备份