mongo备份手册

全备份

进入容器

1
docker exec -it mongodb bash

创建备份目录

1
mkdir -p /tmp/backup

导出所有数据库

1
mongodump -u admin --password 123456 --authenticationDatabase admin --out /tmp/backup

image-20250822095223883

  • 默认会连接本地 27017
  • 所有数据库会导出到 /tmp/backup,每个数据库生成一个文件夹,每个集合生成 .bson.metadata.json 文件。

转移备份到宿主机

1
docker cp mongodb:/tmp/backup /data/backup/mongodb

image-20250822095248756

至此所有数据库均已备份完成

选择数据库备份

进入容器

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

image-20250822095837600

转移备份到宿主机

1
docker cp mongodb:/tmp/backup/singleDatabase /data/backup/mongodb/singleDatabase

image-20250822100125681

容器外备份(需要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
  • /tmp/backup → 宿主机存储路径

image-20250822100910304

image-20250822100930176

选择数据库备份

在宿主机操作,选择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

image-20250822101012146

image-20250822101026673

备份脚本

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

image-20250822102347168

也可以通过挂载等方式,只需要把文件复制到容器里即可。

还原数据

1
2
docker exec -it mongodb bash
mongorestore -u admin --password 123456 --authenticationDatabase admin /tmp/backup
  • 可以加 --drop 选项覆盖已有数据库:
1
mongorestore --drop -u admin --password 123456 --authenticationDatabase admin /root/backup

image-20250822102711154

检查数据

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

image-20250822102751118

image-20250822102941420

还原单个数据库

复制备份

1
docker cp backup mongodb:/tmp/backup

image-20250822103519055

也可以通过挂载等方式,只需要把文件复制到容器里即可。

还原数据

1
2
docker exec -it mongodb bash
mongorestore -u admin --password 123456 --authenticationDatabase admin /tmp/backup

image-20250822103623437

检查数据

image-20250822103721941