温馨提示×

Debian如何备份MongoDB

小樊
41
2026-08-28 15:03:13
栏目: 云计算

在 Debian 系统上备份 MongoDB,常见做法有 mongodump、文件系统快照、复制集延迟节点 等。下面按常用程度给你一个完整、可操作的方案。


一、最常用:使用 mongodump 备份(推荐新手/通用)

1️⃣ 安装 MongoDB 工具

Debian 12+ 默认可能未安装 mongodump

sudo apt update
sudo apt install mongodb-database-tools

或去官方下载: https://www.mongodb.com/try/download/database-tools


2️⃣ 基本备份命令

mongodump --out /data/backup/mongo/$(date +%F)

默认备份:

  • 所有数据库
  • 本地 127.0.0.1:27017

3️⃣ 指定用户、密码、数据库

mongodump \
  --host 127.0.0.1 \
  --port 27017 \
  --username admin \
  --password '密码' \
  --authenticationDatabase admin \
  --db mydb \
  --out /data/backup/mongo/$(date +%F)

✅ 生产环境建议用 --authenticationDatabase admin


4️⃣ 压缩备份(节省空间)

mongodump --archive=/data/backup/mongo/mongo_$(date +%F).archive --gzip

恢复时:

mongorestore --archive=/data/backup/mongo/mongo_2026-01-21.archive --gzip

二、恢复数据(mongorestore)

mongorestore /data/backup/mongo/2026-01-21

或指定数据库:

mongorestore --db mydb /data/backup/mongo/2026-01-21/mydb

三、进阶:一致性备份(生产环境)

✅ 方法 1:使用 --oplog(推荐)

适用于 副本集

mongodump --oplog --out /data/backup/mongo/full

恢复:

mongorestore --oplogReplay /data/backup/mongo/full

✅ 可保证时间点一致性


✅ 方法 2:文件系统快照(LVM / ZFS)

适合 停机或锁定写操作

systemctl stop mongod
cp -a /var/lib/mongodb /data/backup/mongo/snap
systemctl start mongod

或使用 LVM:

lvcreate --size 1G --snapshot --name mongo-snap /dev/vg0/mongo

✅ 速度快
❌ 需要文件系统支持


四、定期自动备份(cron)

1️⃣ 编写备份脚本

#!/bin/bash
BACKUP_DIR=/data/backup/mongo
DATE=$(date +%F)
mongodump --out $BACKUP_DIR/$DATE
find $BACKUP_DIR -type d -mtime +7 -exec rm -rf {} \;
chmod +x /usr/local/bin/mongo_backup.sh

2️⃣ 加入 cron

crontab -e

每天凌晨 2 点执行:

0 2 * * * /usr/local/bin/mongo_backup.sh

五、备份目录建议

/data/backup/mongo/
├── 2026-01-20
├── 2026-01-21
└── latest -> 2026-01-21

六、常见错误

❌ 权限不足

Authentication failed

✅ 确认用户权限:

db.getUser("admin")

❌ Debian 上找不到 mongodump

✅ 使用:

mongodb-database-tools

七、推荐方案总结

场景 推荐
单机 / 小项目 mongodump
副本集 mongodump + --oplog
大数据量 文件系统快照
定时备份 cron + mongodump

如果你愿意,我可以:

  • ✅ 给你 一个完整的生产级备份脚本
  • ✅ 帮你 判断当前 MongoDB 是否副本集
  • ✅ 教你 如何做增量备份 / 云存储(S3)

你可以直接贴:

mongo --eval "rs.status()"

0