mongo备份手册
全备份
进入容器
1
| docker exec -it mongodb bash
|
创建备份目录
导出所有数据库
1
| mongodump -u admin --password 123456 --authenticationDatabase admin --out /tmp/backup
|

- 默认会连接本地 27017
- 所有数据库会导出到
/tmp/backup
,每个数据库生成一个文件夹,每个集合生成 .bson
和 .metadata.json
文件。
转移备份到宿主机
1
| docker cp mongodb:/tmp/backup /data/backup/mongodb
|

至此所有数据库均已备份完成
选择数据库备份
进入容器
1
| docker exec -it mongodb bash
|
创建备份目录
1
| mkdir -p /tmp/backup/singleDatabase
|
导出单个数据库
1
| mongodump -u admin -p 123456 --authenticationDatabase admin -d regen --out /tmp/backup/singleDatabase
|

转移备份到宿主机
1
| docker cp mongodb:/tmp/backup/singleDatabase /data/backup/mongodb/singleDatabase
|

容器外备份(需要mongo环境)
全备份
在宿主机操作,选择IP,端口 :
1 2 3
| mkdir -p /data/backup/mongodb/hostBackup
mongodump -h 127.0.0.1 -p 27017 -u admin --password 123456 --authenticationDatabase admin --out /data/backup/mongodb/hostBackup
|


选择数据库备份
在宿主机操作,选择IP,端口 :
1 2 3
| mkdir -p /data/backup/mongodb/hostSingleBackup
mongodump -h 127.0.0.1 -p 27017 -u admin --password 123456 --authenticationDatabase admin -d test1 --out /data/backup/mongodb/hostSingleBackup
|


备份脚本
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 61 62 63 64 65 66 67
| #!/bin/bash # ============================================================================== # 脚本名称:mongo-docker-backup.sh # 版本:v1.0 # 创建日期:2025-08-19 # 作者:regen # ============================================================================== # 脚本功能: # 本脚本用于自动化备份运行在 Docker 容器中的 MongoDB 数据。 # - 检测指定容器是否存在且正在运行 # - 在容器内执行 mongodump,将备份临时存放在容器内 /tmp/backup # - 将备份文件拷贝到宿主机指定目录,并按时间戳生成子目录 # - 清理容器内临时备份 # # 使用说明: # 1. 确保 Docker 已安装且 MongoDB 容器正在运行 # 2. 修改脚本中的 CONTAINER_NAME、MONGO_USER、MONGO_PASS、BACKUP_BASE_DIR 等配置项 # 3. 运行脚本:bash mongodb-docker-backup.sh # 4. 脚本执行完成后,备份文件将保存在 $BACKUP_BASE_DIR 下 # # 依赖条件: # - Docker 环境已正常运行 # - 容器内安装有 mongodump 命令(通常 MongoDB 官方镜像自带) # - 容器内用户具有备份权限 # # 注意事项: # - 脚本使用 set -euo pipefail,出现错误会立即退出 # - BACKUP_BASE_DIR 需要有写入权限 # - 定期清理历史备份,避免占用过多磁盘空间 # ============================================================================== set -euo pipefail
# ==== 配置区 ==== CONTAINER_NAME="mongodb" # MongoDB 容器名 MONGO_USER="admin" # MongoDB 用户名 MONGO_PASS="Z3ACxCMS" # MongoDB 密码 BACKUP_BASE_DIR="/data/backup/mongo" # 备份存放根目录
# ==== 日期格式 ==== DATE=$(date +%Y%m%d_%H%M%S) BACKUP_DIR="$BACKUP_BASE_DIR/mongo_backup_$DATE"
# ==== 检查容器是否存在并运行 ==== if ! docker ps --format '{{.Names}}' | grep -qw "$CONTAINER_NAME"; then echo "错误:容器 $CONTAINER_NAME 未运行!" exit 1 fi
# ==== 创建本地备份目录 ==== mkdir -p "$BACKUP_DIR"
# ==== 执行备份 ==== echo "[$(date)] 开始备份 MongoDB 容器数据..." docker exec "$CONTAINER_NAME" bash -c "mongodump --username='$MONGO_USER' --password='$MONGO_PASS' --authenticationDatabase=admin --out /tmp/backup" \ || { echo "[$(date)] 错误:mongodump 执行失败!"; exit 1; }
# ==== 拷贝备份到本地 ==== docker cp "$CONTAINER_NAME":/tmp/backup "$BACKUP_DIR"
# ==== 清理容器内临时备份 ==== docker exec "$CONTAINER_NAME" rm -rf /tmp/backup
echo "[$(date)] 备份完成,保存路径:$BACKUP_DIR"
echo "[$(date)] 备份任务完成。"
|
mongo恢复手册
还原全部数据库
包括业务数据以及用户数据。
复制备份
1
| docker cp backup mongodb:/tmp/backup
|

也可以通过挂载等方式,只需要把文件复制到容器里即可。
还原数据
1 2
| docker exec -it mongodb bash mongorestore -u admin --password 123456 --authenticationDatabase admin /tmp/backup
|
1
| mongorestore --drop -u admin --password 123456 --authenticationDatabase admin /root/backup
|

检查数据
可以看到业务数据和用户数据均已恢复。


还原单个数据库
复制备份
1
| docker cp backup mongodb:/tmp/backup
|

也可以通过挂载等方式,只需要把文件复制到容器里即可。
还原数据
1 2
| docker exec -it mongodb bash mongorestore -u admin --password 123456 --authenticationDatabase admin /tmp/backup
|

检查数据
