MongoDB数据备份

MongoDB 数据备份核心要点

1. 备份方式

  • 逻辑备份:使用 mongodump 导出 BSON 文件,适合小数据量,但可能影响性能。

  • 物理备份:利用 LVM 或云盘快照直接复制底层文件,速度快,适合大型集群。

  • 云数据库:推荐使用云厂商的自动备份、按时间点恢复(PITR)及跨地域容灾功能。

2. 备份策略

  • 结合“全量备份”与“增量/差异备份”,并通过 cron 等工具实现定时自动化。

  • 务必配置异地容灾备份,防止物理灾难。

3. 关键注意事项

  • 副本集一致性:备份时必须加 --oplog 参数,防止数据不一致。

  • 分片集群一致性:物理快照需在同一时刻对所有分片和配置服务器进行。

  • 定期验证:必须定期将备份恢复到测试环境,验证其完整性与可恢复性。

备份的区别

对比维度

逻辑备份 (mongodump)

物理备份 (文件系统/磁盘快照)

云数据库备份 (控制台自动化)

工作原理

读取运行中的 mongod 实例,将数据序列化为 BSON 格式文件。

直接复制底层操作系统文件或磁盘块,不经过数据库引擎。

依托云厂商底层架构,自动执行快照及增量日志(Oplog)捕获。

备份速度

较慢(受限于 CPU、内存及磁盘 I/O 性能)。

极快(依赖底层存储系统的块级复制能力)。

较快(通常基于底层物理快照,对业务无感)。

对性能的影响

较大(会占用内存,可能逐出热数据,影响常规查询)。

极小(热备份时仅需确保开启 Journaling)。

极小(自动调度在业务低峰期执行,资源隔离)。

数据一致性保障

需手动添加 --oplog 参数以捕获备份期间的写入。

需确保日志与数据文件在同一逻辑卷,或使用 LVM 等原子快照。

自动保障,支持按时间点恢复(PITR),数据零丢失。

存储空间占用

较小(仅包含文档数据,不含索引,且支持 --gzip 压缩)。

较大(包含完整的数据文件和索引,与源数据体积相当)。

适中(支持增量备份与跨地域压缩存储,按需付费)。

适用场景

中小型部署、单节点实例、数据量较小的库。

大型数据库、分片集群、需要快速恢复的弹性场景。

企业级生产环境、需要异地容灾及合规审计的场景。

恢复操作

使用 mongorestore 重建数据,需重新创建索引(耗时较长)。

直接替换底层文件或回滚磁盘快照(恢复速度极快)。

一键恢复至新实例或指定时间点,自动化程度高。


备份前准备

下载安装mongodump

 # 下载
 wget https://fastdl.mongodb.org/tools/db/mongodb-database-tools-rhel70-x86_64-100.9.0.tgz
 ​
 # 解压下载的包
 tar -zxvf mongodb-database-tools-rhel70-x86_64-100.9.0.tgz
 ​
 # 进入解压后的目录
 cd mongodb-database-tools-rhel70-x86_64-100.9.0
 ​
 # 将工具复制到你的 MongoDB 安装目录的 bin 下
 cp bin/* /usr/local/mongodb/bin/

查看当前集群状态

 mongosh 192.168.7.101:27017
 rs.status()

确认从节点(建议在从节点备份,不影响主节点)

 # 连接从节点(推荐在 192.168.7.102 上执行备份)
 mongosh 192.168.7.102:27017
 ​
 # 确保数据完整性一致性
 rs.setReadPref("primaryPreferred")

三种备份方式

方式一:全量备份(备份所有数据库)

 mongodump --host 192.168.7.102:27017 \
           --out /data/backup/mongodb_backup_$(date +%Y%m%d_%H%M%S)

参数说明:

参数

含义

--host

要备份的服务器地址(推荐用从节点)

--out

备份文件存放目录

示例: 备份完成后会在 /data/backup/ 下生成目录 mongodb_backup_20260721_111458

方式二:备份指定数据库

 mongodump --host 192.168.7.102:27017 \
           --db zhuzi \
           --out /data/backup/mongodb_backup_$(date +%Y%m%d_%H%M%S)

参数说明:

参数

含义

--db

指定要备份的数据库名

方式三:备份指定集合(表)

 mongodump --host 192.168.7.102:27017 \
           --db zhuzi \
           --collection test \
           --out /data/backup/mongodb_backup_$(date +%Y%m%d_%H%M%S)

参数说明:

参数

含义

--collection

指定要备份的集合名

备份时带上日志(推荐)

适用于副本集: 添加 --oplog 参数保证数据一致性

 mongodump --host 192.168.7.102:27017 \
           --oplog \
           --out /data/backup/mongodb_with_oplog_$(date +%Y%m%d_%H%M%S)

备份压缩(节省空间)

 # 备份并压缩
 mongodump --host 192.168.7.102:27017 \
           --out /data/backup/backup_$(date +%Y%m%d) \
           --gzip
 ​
 # 或备份后打包
 mongodump --host 192.168.7.102:27017 \
           --out /data/backup/temp_backup
 ​
 tar -czf /data/backup/backup_$(date +%Y%m%d).tar.gz /data/backup/temp_backup
 rm -rf /data/backup/temp_backup

恢复数据

完整恢复(恢复所有数据)

 mongorestore --host 192.168.7.101:27017 /data/backup/mongodb_backup_20260721_111458

恢复指定数据库

 mongorestore --host 192.168.7.101:27017 \
              --db zhuzi \
              /data/backup/mongodb_backup_20260721_111458/zhuzi

恢复指定集合

 mongorestore --host 192.168.7.101:27017 \
              --db zhuzi \
              --collection test \
              /data/backup/mongodb_backup_20260721_111458/zhuzi/test.bson

恢复带 oplog 的备份(保持数据一致性)

 mongorestore --host 192.168.7.101:27017 \
              --oplogReplay \
              /data/backup/mongodb_backup_20260721_111458

恢复数据验证

 # 连接数据库查看
 mongosh 192.168.7.101:27017
 ​
 # 查看恢复的数据库
 show dbs
 ​
 # 切换到恢复的库
 use zhuzi
 ​
 # 查询数据
 db.test.find()

在本地机器操作远程数据库

备份和恢复都可以在单台机器上操作,而且非常灵活。

操作

命令

备份远程从节点

mongodump --host 192.168.7.102:27017 --out /本地目录

恢复到远程主节点

mongorestore --host 192.168.7.101:27017 /本地备份目录

从远程备份到远程恢复

在任意机器上执行即可

注意事项

序号

注意点

1

备份时连接从节点,避免影响主节点性能

2

定期验证备份文件,确保可以正常恢复

3

备份文件不要放在系统盘,单独挂载存储盘

4

保留至少 7 天的备份文件

5

备份前确认磁盘空间充足

6

重要数据建议每天全量备份