当前位置: 首页 > news >正文

MongoDB 容器数据备份

具体操作步骤

1 创建文件夹,赋予权限

mkdir-p/opt/mongo-back/{log,mongodb_backups,scripts}chmod-R755/opt/mongo-backcd/opt/mongo-back/logtouchmongo_backup.log

2 创建脚本

vimongo_backup.sh
#!/bin/bash# --- 配置区 ---# MongoDB容器的名字或IDCONTAINER_NAME="69013dadb912"# <-- 一定要改成你的容器名# 宿主机上存放备份的目录BACKUP_DIR="/opt/mongo-back/mongodb_backups"# 日志文件LOG_FILE="/opt/mongo-back/log/mongo_backup.log"# --- 脚本逻辑 ---# 创建备份目录(如果不存在)mkdir-p"$BACKUP_DIR"# 生成带时间戳的备份文件夹名TIMESTAMP=$(date+"%Y%m%d_%H%M%S")# 这次备份文件将直接存放在宿主机的这个路径下BACKUP_PATH="$BACKUP_DIR/backup_$TIMESTAMP"echo"[$TIMESTAMP] 开始备份容器$CONTAINER_NAME中的 MongoDB 数据库...">>$LOG_FILE# 核心命令:在容器内执行 mongodump,并将输出目录挂载到宿主机dockerexec"$CONTAINER_NAME"mongodump--out"/tmp/backup_$TIMESTAMP"# 检查容器内命令是否执行成功if[$?-eq0];then# 将容器内的临时备份文件复制到宿主机dockercp"$CONTAINER_NAME:/tmp/backup_$TIMESTAMP""$BACKUP_PATH"echo"[$TIMESTAMP] 备份成功完成,存放于:$BACKUP_PATH">>$LOG_FILE# (可选) 清理容器内的临时备份dockerexec"$CONTAINER_NAME"rm-rf"/tmp/backup_$TIMESTAMP"# (可选) 清理宿主机上的旧备份,比如只保留最近7天的find"$BACKUP_DIR"-typed-name"backup_*"-mtime+7-execrm-rf{}\;echo"[$TIMESTAMP] 已清理7天前的旧备份。">>$LOG_FILEelseecho"[$TIMESTAMP] 备份失败!容器内命令执行出错。">>$LOG_FILEfiecho"----------------------------------------">>$LOG_FILE

3 创建定时任务

crontab-e# 输入一下内容# 每天三点备份数据库03* * * /opt/mongo-back/scripts/mongo_backup.sh

4 赋执行权,查看定时任务

chmod+x /opt/mongo-back/scripts/mongo_backup.shcrontab-l

5 执行命令, 查看效果

6 数据库有认证校验的

#!/bin/bash# --- 配置区 ---# MongoDB容器的名字或IDCONTAINER_NAME="78979574f748"# <-- 一定要改成你的容器名# 宿主机上存放备份的目录BACKUP_DIR="/opt/mongo-back/mongodb_backups"# 日志文件LOG_FILE="/opt/mongo-back/log/mongo_backup.log"# --- MongoDB 认证信息 ---# 注意:在容器内部,host 通常就是 localhost 或者 127.0.0.1MONGO_HOST="localhost"MONGO_PORT="27017"MONGO_USER="admin"MONGO_PASS="admin123"MONGO_AUTH_DB="admin"# 认证数据库MONGO_DB_TO_BACKUP="test_db"# 要备份的目标数据库# --- 脚本逻辑 ---# 创建备份目录和日志目录(如果不存在)mkdir-p"$BACKUP_DIR"mkdir-p"$(dirname"$LOG_FILE")"# 生成带时间戳的备份文件夹名TIMESTAMP=$(date+"%Y%m%d_%H%M%S")# 这次备份文件将直接存放在宿主机的这个路径下BACKUP_PATH="$BACKUP_DIR/backup_$TIMESTAMP"echo"[$TIMESTAMP] 开始备份容器$CONTAINER_NAME中的数据库 '$MONGO_DB_TO_BACKUP'...">>$LOG_FILE# 构建认证URI,路径为空,使用 authSource 指定认证库MONGO_URI="mongodb://${MONGO_USER}:${MONGO_PASS}@${MONGO_HOST}:${MONGO_PORT}/?authSource=${MONGO_AUTH_DB}"# 核心命令:在容器内执行 mongodump,使用URI认证,并用 --db 指定要备份的库dockerexec"$CONTAINER_NAME"mongodump--uri="$MONGO_URI"--db="$MONGO_DB_TO_BACKUP"--out="/tmp/backup_$TIMESTAMP"# 检查容器内命令是否执行成功if[$?-eq0];then# 将容器内的临时备份文件复制到宿主机dockercp"$CONTAINER_NAME:/tmp/backup_$TIMESTAMP""$BACKUP_PATH"echo"[$TIMESTAMP] 备份成功完成,存放于:$BACKUP_PATH">>$LOG_FILE# (可选) 清理容器内的临时备份dockerexec"$CONTAINER_NAME"rm-rf"/tmp/backup_$TIMESTAMP"echo"[$TIMESTAMP] 已清理容器内的临时备份。">>$LOG_FILE# (可选) 清理宿主机上的旧备份,比如只保留最近7天的find"$BACKUP_DIR"-typed-name"backup_*"-mtime+7-execrm-rf{}\;echo"[$TIMESTAMP] 已清理7天前的旧备份。">>$LOG_FILEelseecho"[$TIMESTAMP] 备份失败!容器内命令执行出错,请检查认证信息或容器状态。">>$LOG_FILE# 可以在这里加入告警逻辑,比如发送邮件或钉钉消息fiecho"----------------------------------------">>$LOG_FILE

7 根据备份文件恢复数据

我的容器名称为mongo

  • 将宿主机的整个备份文件夹拷贝到容器的 /tmp 目录下
dockercp/opt/mongo-back/mongodb_backups/backup_20251119_030001/superior mongo:/tmp/superior_backup
  • 在容器内执行恢复命令,路径使用容器内的路径 (无认证)
dockerexecmongo mongorestore--hostlocalhost--port27017--dbsuperior--drop/tmp/superior_backup
  • 在容器内执行恢复命令,路径使用容器内的路径 (有认证)
dockerexecmongo mongorestore--hostlocalhost--port27017--dbsuperior--drop-uadmin-p'密码'--authenticationDatabaseadmin /tmp/superior_backup
http://www.jsqmd.com/news/959488/

相关文章:

  • 0基础学AI智能体,Coze和n8n该学那个?有什么区别吗?
  • 宝塔面板下PHP8.0安装Swoole扩展,从源码编译到WebSocket服务部署的完整避坑记录
  • Video2X:免费AI视频超分辨率工具,让模糊视频瞬间变高清的终极解决方案
  • Sqribble深度解析:模板驱动的云原生电子书出版流水线
  • 如何在浏览器中创建专业行为实验:jsPsych终极指南
  • ESP32开发中出现exit status 1编译错误和乱码...如何解决?
  • ML系统工程:从模型上线到生产稳定的全链路实践
  • MATLAB水文预报实战包:日产流计算+次洪过程线一键生成(含16年实测数据与单位线)
  • 从Arduino到树莓派:手把手教你用MOS管搭建双向UART电平转换电路(附常见坑点)
  • 2026年口碑好的布百叶窗帘/罗马窗帘/斑马窗帘/铝合金百叶窗帘推荐品牌厂家 - 品牌宣传支持者
  • 2003 NIST Language Recognition Evaluation数据集介绍,官网编号LDC2006S26
  • 保姆级教程:用DPABI和Matlab从脑影像中提取AAL90脑区特征(附完整代码)
  • 多维聚合与滚动计算:银行级业务可解释性实战指南
  • AI技术写作规范:如何避免虚构名词与误导性叙事
  • 二刷hot100-46.全排列
  • RTX5定时器那些“坑”:为什么osTimerStart的ticks参数不能设为0?深入源码与Event Recorder分析
  • Anthropic Layer 2.1.0:协议栈瘦身与API契约编译化实践
  • 用TensorFlow手搭RNN模型分析影评情感,含练习版与完整版Notebook
  • Arabic News Translation Text Part 1数据集介绍,官网编号LDC2004T15
  • 用Arduino和TDS传感器DIY一个家庭水质监测仪(附ESP32/ESP8266完整代码)
  • SpringBoot快速搭建登录注册模块(含Thymeleaf页面+H2数据库+完整接口)
  • 从学生到工程师:聊聊我为什么从AD转向PADS,以及Allegro到底值不值得学
  • 医院、学校、政府单位的网管看过来:一套“交钥匙”等保拓扑,照着部署就能过测评
  • SPSS交叉表实战:5分钟搞定疾病相对危险度计算(附数据准备避坑指南)
  • 周口专业的玻璃门定制厂家怎么选,长虹玻璃隔断/商用隔断铝材/玻璃隔断/轻奢客厅玻璃隔断,玻璃门定制厂家怎么选 - 品牌推荐师
  • 生产级AI智能体设计:场景化组装与决策灰度带实践
  • 二刷hot100-78.子集
  • 2026年太原经济纠纷律师推荐榜单:5位实战经验丰富律师精选 - 本地品牌推荐
  • FastAPI+Celery+Pg-vector构建LLM SaaS生产级架构
  • 本地大模型服务框架:vLLM+TGI实战部署与量化调优