Docker mongoDB容器备份与恢复
admin
2024-03-19 12:43:48

Docker mongoDB容器备份与恢复

文章目录

  • Docker mongoDB容器备份与恢复
    • 单词:
    • 1.数据备份:
      • 1. 1 基本语法:
      • 1. 2 实例:
      • 1. 3 注意!!
    • 2. 恢复数据:
      • 2.1 基本语法:
      • 2.2 实例:
    • 3. 示例:
      • 3. 1 主机与容器内结构目录
        • 3.1.1 主机目录
        • 3.1.2 mongoDB容器内目录:
      • 3. 2 步骤:
        • 3. 2.1 创建目录

单词:

音标翻译
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 <:port> -d dbname 
参数作用备注
**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" ];thenecho "database $DBNAME success backup to $TARGET_DIR"elseecho "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/dumpdone# 删除 $DAYS 天前的备份文件 ; [ 删除从容器拷贝到主机dump.sh脚本执行同目录下的dump文件夹中的过期文件 ]
find $PWD/dump -mtime $DAYS -delete

相关内容

热门资讯

2025海上丝绸之路城市合作发... 11月18日至20日,以“融创融汇 合作共赢”为主题的2025海上丝绸之路城市合作发展大会暨国际旅行...
洛福敦群岛:挪威北极光下的世外... 挪威的洛福敦群岛,犹如一颗镶嵌在北极圈内的璀璨明珠,以其壮丽的自然景观和神秘的极光闻名于世。这里的雪...
“只有河南”景区无烟化管理获游... 近日,有网友在社交平台发帖称,去过“只有河南·戏剧幻城”(以下简称“只有河南”)后才发现景区禁烟保持...
四川TOP100餐厅出炉!成都... 🔥你知道吗?四川美食又上热搜了!最近高德扫街榜发布‘烟火四川’榜单,成都直接拿下58家餐厅,乐山小吃...
原创 奶... 走在2025年的城市街头,奶茶店看着比以前还琳琅满目。 高端商场里的连锁品牌、社区小巷的小众门店,几...