• Docker mongoDB容器备份与恢复


    Docker mongoDB容器备份与恢复

    单词:

    音标翻译
    dump[dʌmp]:[dang’ mu’ pu]转储;倾倒;抛弃;甩
    deny | denied[dɪˈnaɪ] :[di’ nai]否认;否定;拒绝承认
    directory[dəˈrektəri] :[di’ ruai 'ke ‘ te 'rui]目录

    1.数据备份:

    1. 1 基本语法:

    >mongodump -h dbhost -d dbname -o dbdirectory
    
    • 1

    实例:

    1. 2 实例:

    docker exec -it mymongo mongodump -h localhost -u root -p 123456 -o /tmp/test
    
    • 1
    参数作用备注
    mongodump备份命令
    **-h **MongoDB 所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
    -d需要备份的数据库实例,例如:test
    -o备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据

    1. 3 注意!!

    **备份的内容是在容器中

    **不要尝试在主机目录中寻找备份的内容

    **需要docker exec -it [container] bash 进入容器内查找

    2. 恢复数据:

    2.1 基本语法:

    >mongorestore -h <hostname><:port> -d dbname <path>
    
    • 1
    参数作用备注
    mongorestore恢复命令
    -hMongoDB 所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
    -d需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
    mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:\data\dump\test不能同时指定 和 --dir 选项,–dir也可以设置备份目录
    –dir指定备份的目录不能同时指定 和 --dir 选项。

    2.2 实例:

    docker exec -it mymongo mongorestore -h localhost -u root -p 123456 --dir /tmp/test
    
    • 1

    不能同时指定 和 --dir 选项

    docker exec -it mymongo mongorestore -h localhost -u root -p 123456 /tmp/test
    
    • 1

    3. 示例:

    3. 1 主机与容器内结构目录

    3.1.1 主机目录
    ├── /
    |   ├── mongoDB
    |       ├── sh
    |            ├── dump.sh
    |            ├── dump [文件夹]
    |            	   ├── admin_202211041423.tar.gz
    |            	   ├── config_202211041435.tar.gz
    |            	   ├── water_202211041423.tar.gz
    |            	   ├── shop_202211041423.tar.gz
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    3.1.2 mongoDB容器内目录:
    ├── /
    |   ├── dump
    |       ├── list
    |  			├── admin_202211041423.tar.gz
    |            ├── config_202211041435.tar.gz
    |            ├── water_202211041423.tar.gz
    |       ├── tmp
    |  			├── admin_202211041423
    |            ├── config_202211041435
    |            ├── water_202211041423
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3. 2 步骤:

    3. 2.1 创建目录

    提前搭建 3.1 中主机、容器内目录树; 否则脚本执行输出:No such file or directory

    dump.sh脚本说明:

    dump.sh代码片段作用备注
    date +%Y%m%d%H%M202211011749 [年月日几点几分]
    for DBNAME in ${DB_NAME_ARR[@]}${DB_NAME_ARR[@]}数组中的所有数据库${arr1[@]} 或 ${arr1[*]} 表示的是数组的所有元素
    # dump.sh 执行文件
    MONGODB_CONTAINER_NAME=你的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)
    DATE=`date +%Y%m%d%H%M`
    # 数据库账号
    DB_USER=user
    # 数据库密码
    DB_PASS=password
    # 数据库名称,多个用空格隔开
    DB_NAME_ARR=("admin config") 
    # 代表24小时内的保留
    DAYS=1
    
    
    # 最终保存的数据库备份文件
    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 43.143.147.51: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.sh同级的dump目录下
        docker cp ${MONGODB_CONTAINER_NAME}:$TARGET_FILE $PWD/dump
    
    done
    
    # 删除 $DAYS 天前的备份文件 ; [ 删除从容器拷贝到主机dump.sh脚本执行同目录下的dump文件夹中的过期文件 ]
    find $PWD/dump -mtime $DAYS -delete
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
  • 相关阅读:
    【排序算法】详解冒泡排序及其多种优化&稳定性分析
    调试代码0
    Python + Django4 搭建个人博客(九):引入Bootstrap渲染和美化博文列表
    k8s 集群 使用yaml部署Tomcat方法
    颜色分类(中等)
    VideoPipe可视化视频结构化框架更新总结(2023-3-30)
    python项目之AI动物识别工具的设计与实现(django)
    前端面试题之CSS篇
    第七章·原型模式
    Flink 实时数仓(二)【ODS 层开发】
  • 原文地址:https://blog.csdn.net/weixin_43101443/article/details/128189051