备份脚本 mongobk.sh

$ cat mongobk.sh

#!/bin/sh
# dump 命令执行路径,根据mongodb安装路径而定
# mongo的容器名称
MONGODB_CONTAINER_NAME=yapi_mongodb
DUMP="docker exec -it ${MONGODB_CONTAINER_NAME} "
# 临时备份路径(注:docker 容器内的路径)
OUT_DIR=/dump/tmp
# 压缩后的备份存放路径(注:docker 容器内的路径)
TAR_DIR=/dump/list
# 当前系统时间
DATE=`date +%Y%m%d%H%M`
# 数据库账号
DB_USER=user
# 数据库密码
DB_PASS=password
# 数据库名称,多个用空格隔开
DB_NAME_ARR=("yapi") 
# 代表删除7天前的备份,即只保留近 7 天的备份
DAYS=7


# 最终保存的数据库备份文件
for DBNAME in ${DB_NAME_ARR[@]}
do
    # 删除临时目录内容
    rm -rf $OUT_DIR/*
    
    # 文件名称:数据库名_时间
    FILE_NAME="${DBNAME}_${DATE}"
    # 导出数据的临时目录
    TARGET_DIR="$OUT_DIR/$FILE_NAME"
    mkdir -p $TARGET_DIR
    # 临时目录打包压缩后的文件
    TARGZ_FILE="${FILE_NAME}.tar.gz"
    # 存放压缩后文件的目录
    TARGET_FILE="$TAR_DIR/$TARGZ_FILE"
    
    # 执行导出命令
    # $DUMP -h 127.0.0.1:27017 -u $DB_USER -p $DB_PASS -d $DBNAME -o $OUT_DIR/$DATE
    $DUMP mongodump -h 127.0.0.1:27017 -d $DBNAME -o $TARGET_DIR
    
    # 判断导出结果
    flag=`echo $?`
    if [ $flag == "0" ];then
            echo "database $DBNAME success backup to $TARGET_DIR"
    else
            echo "database $DBNAME backup fail!"
    fi
    
    # 压缩格式为 .tar.gz 格式
    # -P tar 默认采用相对路径压缩打包,需要(-P)允许使用绝对路径 
    # -v 输出 verbose 日志
    $DUMP tar -zcPf $TARGET_FILE $TARGET_DIR/$DBNAME
    
    # 将容器内的压缩文件,复制到宿主机与备份脚本同级的dump目录下
    docker cp ${MONGODB_CONTAINER_NAME}:$TARGET_FILE $PWD/dump
    # echo "docker cp ${MONGODB_CONTAINER_NAME}:$TARGET_FILE $PWD/dump"
    

done

# 删除 $DAYS 天前的备份文件
find $PWD/dump -mtime +$DAYS -delete


定时任务 crontab

$ cat /etc/crontab 

0 0 */3 * * root bash mongobk.sh >> /var/log/mongo/bk.log
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐