#!/bin/bash
# 数据库连接信息
MONGO_HOST="172.25.25.14"
MONGO_PORT="27017"
MONGO_USERNAME="root"
MONGO_PASSWORD="xuxiaowei.com.cn"
MONGO_AUTH_DB="admin"
# 备份文件夹
backup_folder="/data/mongo-backups"
# 保留天数
keep_days=7
# 数据库列表
database_list=(
"test"
"passport"
"xuxiaowei"
"xuxiaowei-cloud"
)
# 文件名后缀
file_suffix=$(date +%Y%m%d_%H%M%S)
for database in "${database_list[@]}"; do
# 数据库备份文件夹
backup_dir="${backup_folder}/${database}"
# 创建数据库备份文件夹
mkdir -p $backup_dir
# 备份文件名(使用tar.gz格式)
backup_file="${database}_${file_suffix}.tar.gz"
# 创建临时文件夹
temp_backup_dir="${backup_dir}/temp_${file_suffix}"
mkdir -p $temp_backup_dir
chmod 777 $temp_backup_dir
echo "$(date +'%Y-%m-%d %H:%M:%S') 备份数据库 $database 到 $backup_dir/$backup_file 开始"
# 开始计算耗时
start_time=$(date +%s)
# 执行备份
# 如果当前机器上安装了 mongodump,可直接使用当前机器的 mongodump
# 如果当前机器上没有安装 mongodump,可以使用 registry.cn-qingdao.aliyuncs.com/xuxiaoweicomcn/mongo:8.0.5 Docker 镜像中的 mongodump 执行备份
docker run --rm -v $backup_dir:$backup_dir registry.cn-qingdao.aliyuncs.com/xuxiaoweicomcn/mongo:8.0.5 mongodump --host $MONGO_HOST --port $MONGO_PORT --username $MONGO_USERNAME --password $MONGO_PASSWORD --authenticationDatabase $MONGO_AUTH_DB --db $database --out $temp_backup_dir
# 检查备份是否成功
if [ $? -ne 0 ]; then
echo "$(date +'%Y-%m-%d %H:%M:%S') 备份数据库 $database 失败,耗时 $(date -u -d "@$(($(date +%s) - $start_time))" +"%H:%M:%S")"
# 清理临时目录
rm -rf $temp_backup_dir
else
# 压缩备份文件
cd $temp_backup_dir
tar -zcvf $backup_dir/$backup_file .
cd -
# 清理临时目录
rm -rf $temp_backup_dir
echo "$(date +'%Y-%m-%d %H:%M:%S') 备份数据库 $database 到 $backup_dir/$backup_file 成功,大小为 $(du -h $backup_dir/$backup_file | awk '{print $1}'),耗时 $(date -u -d "@$(($(date +%s) - $start_time))" +"%H:%M:%S")"
fi
# 保留最近 keep_days 天的备份
find $backup_dir -type f -name "*.tar.gz" -mtime +$keep_days -exec rm {} \;
# 检查是否删除成功
if [ $? -ne 0 ]; then
echo "$(date +'%Y-%m-%d %H:%M:%S') 删除 $backup_dir 中超过 $keep_days 天的备份失败"
else
echo "$(date +'%Y-%m-%d %H:%M:%S') 删除 $backup_dir 中超过 $keep_days 天的备份成功"
fi
done
echo "$(date +'%Y-%m-%d %H:%M:%S') 备份完成"