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. 2 实例:

docker exec -it mymongo mongodump -h localhost -u root -p 123456 -o /tmp/test
参数作用备注
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>
参数作用备注
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

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

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

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
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

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值