当前位置: 首页 > 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.rkmt.cn/news/1471160.html

相关文章:

  • 用Arduino和TDS传感器DIY一个家庭水质监测仪(附ESP32/ESP8266完整代码)
  • 从学生到工程师:聊聊我为什么从AD转向PADS,以及Allegro到底值不值得学
  • 医院、学校、政府单位的网管看过来:一套“交钥匙”等保拓扑,照着部署就能过测评
  • BERT中文微调实战:从Tokenizer陷阱到分层调参的工业级避坑指南
  • 魔方派开发板烧录无法进行,报错:QSaharaServer.exe ... -s ...\prog_firehose_ddr.elf;ERR : Download Firehose e...如何解决?
  • Rust 结构体
  • 南通璞声汽车音响改装告诉你怎么选改装店
  • 模板驱动型文档自动化:告别重复填表,实现高保真批量生成
  • Synopsys ICC 2024版实战:高效查询与调试命令手册(含help/printvar/man技巧)
  • Anthropic直连协议:API网关层的归零革命
  • 别再手动转换了!用ArcGIS Pro 3.0一键搞定Excel里的经纬度坐标(附WGS84/2000坐标系选择指南)
  • 手把手教你用ISO12233测试卡和Imatest,搞定安防摄像头出厂前的分辨率验收
  • 力扣算法面试150题——链表——个人笔记
  • 电商大促AB测试实战:分层正交设计与业务决策驱动
  • 模型上线后性能下滑?五步构建AI生产化健康监测闭环
  • TestSigma终极指南:5分钟掌握AI驱动的自动化测试平台核心功能
  • 别再为版本头疼!手把手教你让CarSim 2020.0与MATLAB R2015a/R2016b成功“握手”
  • JUNIPER QFX5210-64C-CH网络交换机
  • RTX5软件定时器入门:手把手教你用osTimerNew创建单次定时器(附Event Recorder调试技巧)
  • 2026年靠谱的自动报警灭火装置/工业设备自动灭火装置稳定供货厂家推荐 - 品牌宣传支持者
  • C语言本身是用什么语言写的
  • TSG软件数据融合实战:如何将光谱、钻孔照片与地化数据整合到一个工程里?
  • 2026年靠谱的办公家具定做/商丘现代办公家具/办公家具定制/办公家具口碑好的厂家推荐 - 品牌宣传支持者
  • 交流直流lem莱姆传感器ltc350:闭环磁通门技术电流传感器/S技术解析与选型全推荐 - 优质品牌商家
  • 别再轮询了!用STM32F407的USART空闲中断+DMA搞定不定长数据,效率翻倍
  • VC++6.0创建C语言文件指南
  • COM3D2.MaidFiddler:实时编辑女仆数据的终极工具指南
  • NITZ 网络时间与时区同步架构
  • 2026年比较好的钢筋桁架楼承板/包头Z型钢/镀锌楼承板/包头楼承板优质厂家推荐榜 - 行业平台推荐
  • 第五章:让主角动起来——玩家角色创建