docker compose安装MongoDB及备份脚本分享

由于宝塔不支持Alibaba Cloud 3系统安装MongoDB,所以使用docker来安装,然后使用宝塔自带的计划任务来进行自动化备份。

docker compose安装MongoDB

compose模板文件

version: "3.3"
services:
  mongodb:
    image: mongo
    container_name: mongodb
    restart: always
    ports:
      - 27017:27017
    volumes:
      - /www/docker_data/mongodb/data:/data/db # 挂载数据目录至宿主机
      - /etc/localtime:/etc/localtime # 时区
    environment:
      - MONGO_INITDB_ROOT_USERNAME=root # 管理员账号
      - MONGO_INITDB_ROOT_PASSWORD=123456 # 管理员密码

networks:
  default:
    name: mongodb_network
  1. 如果不是使用宝塔则忽略下面的步骤,首先在docker的项目模板中添加上面模板(需要根据自己情况修改相关配置,里面涉及的目录需要提前创建)

  1. 添加容器

  1. 启动后,查看是否正常运行,如果正常运行则点击重启,查看重启后是否正常,如正常则安装完成!

MongoDB自动备份

自动备份脚本

#!/bin/sh

# dump 命令执行路径,根据mongodb安装路径而定
# mongo的容器名称
MONGODB_CONTAINER_NAME=mongodb
# xxxx为docker的id,可以执行docker ps查看
DUMP="docker container exec -i xxxxx "

# 容器内存放备份根目录
CONTAINER_ROOT=/data/db
# 容器挂载Mongo的宿主机根目录
VOLUME_DIR=/www/docker/mongodb/data
# 宿主机额外保存的压缩包备份(实际还原目录)
BACKUP_DIR=/www/docker/mongodb/backup
# 临时备份路径(注:docker 容器内的路径)
OUT_DIR=$CONTAINER_ROOT/dump/tmp
# 压缩后的备份存放路径(注:docker 容器内的路径)
TAR_DIR=$CONTAINER_ROOT/dump/list

# 当前系统时间
DATE=`date +%Y%m%d%H%M`

# ip
IP=127.0.0.1
# 端口
PORT=27017

# 数据库账号
DB_USER=root
# 数据库密码
DB_PASS=123456
# 数据库名称,多个用空格隔开
DB_NAME_ARR=("my_sql") 

# 代表删除7天前的备份,即只保留近 7 天的备份
DAYS=3

# 最终保存的数据库备份文件
for DBNAME in ${DB_NAME_ARR[@]}
do
    # 删除临时目录内容
    rm -rf $OUT_DIR/*

    # 文件名称:数据库名_时间
    FILE_NAME="${DBNAME}_${DATE}"
    # 导出数据的临时目录
    TARGET_DIR="$OUT_DIR/$FILE_NAME"
    # 临时目录打包压缩后的文件
    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 $TARGET_DIR
    $DUMP mongodump -h $IP:$PORT -u $DB_USER -p $DB_PASS --authenticationDatabase admin -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 $BACKUP_DIR
    echo "docker cp ${MONGODB_CONTAINER_NAME}:$TARGET_FILE $BACKUP_DIR"

done

# 删除挂载目录 $DAYS 天前的 临时 备份文件
find $VOLUME_DIR/dump/tmp -mtime +$DAYS -delete;
# 删除挂载目录 $DAYS 天前的 压缩 备份文件
find $VOLUME_DIR/dump/list -mtime +$DAYS -delete;
# 删除实际备份目录 $DAYS 天前的 压缩 备份文件
find $BACKUP_DIR -mtime +$DAYS -delete;
  1. 在宝塔的计划任务中添加定时任务

  1. 如果你有配置oss的话,则在创建一个备份目录的任务,选择刚才配置中备份存放的目录,然后设置自动备份

完!

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇