如果你的 MongoDB 数据量特别大(例如几十 GB、TB 级别),普通的 mongodump/mongorestore 会显得缓慢且资源消耗大,不适合生产级别大数据集。下面是当前 MongoDB 社区和企业广泛使用的几种备份方案对比和推荐:
工具 | 是否官方 | 适合场景 | 优点 | 缺点 |
---|---|---|---|---|
mongodump / mongorestore | ✅ 是官方 | 小数据量、开发测试、结构迁移 | 简单易用,文档丰富 | 速度慢、资源占用高、大数据不适合 |
mongodb-consistent-backup | ✅ 官方(老工具) | 副本集或分片集的大数据备份 | 支持一致性快照,适合副本集 | 停止维护(可替代用 mongodump + oplog) |
Percona Backup for MongoDB | ❇️ 第三方(Percona 出品) | 🚀 TB级数据备份利器 | 支持并发、压缩、分片、增量备份 | 初始学习成本略高 |
mongodump --oplog + rsync/snapshot | ✅ + 通用 | 半热备份,有一定容错 | 灵活组合方式 | 维护复杂 |
文件系统快照 + Oplog | ❌(系统级) | 企业环境,需高 IO 磁盘/文件系统支持 | 几乎不影响业务,速度最快 | 需要快照技术支持,如 LVM、ZFS |
公司的数据量达到了2T以上,这里只能使用PBM进行备份
https://www.percona.com/downloads
选择对应的版本即可,如果是4.0建议选择2.0.x版本
所有节点使用yum安装好了以后,编写一个启动服务/etc/systemd/system/pbm-agent.service
[Unit]
Description=Percona Backup for MongoDB Agent
Wants=network.target
After=network.target mongod.service[Service]
Type=simple
# 推荐使用有权限访问MongoDB的用户,且该用户对备份目录有读写权限
# 如果 mongod 以 'mongod' 用户运行,这里也用 'mongod'
User=mongod # 核心命令:指定 pbm-agent 的路径和 MongoDB 连接 URI
# 这个 URI 必须能让 agent 连接到整个副本集
ExecStart=/usr/local/bin/pbm-agent --mongodb-uri="mongodb://user:passwd@localhost:27017/?replicaSet=rs0" # 2.0.x以上可以写集群地址Restart=always
RestartSec=5[Install]
WantedBy=multi-user.target
然后修改所有节点的pbm配置文件/etc/pbm-config.yaml
storage:type: filesystemfilesystem:path: /data/pbm_back # 备份目录,所有节点都需要有# Point-in-Time Recovery配置,开启pitr其实就没有必要使用增量备份了,相当于开启了自动持续增量备份
pitr:enabled: trueoplogSpanMin: 10 # oplog至少保留10天compression: gzip# 备份压缩
backup:compression: gzipcompressionLevel: 6
完成执行如下命令,启动服务,所有节点都需要
pbm config --file /etc/pbm-config.yamlsystemctl daemon-reload
# 启动服务
systemctl start pbm-agent
在备份节点上执行备份命令进行第一次全备测试
pbm backup# 完成后执行,查看备份结果,如图表示成功
pbm list
接下来将命令加入crontab一周备份一次即可
[root@localhost pbm_all]# crontab -l
# mongo全量备份+PITR
0 0 * * 6 /usr/local/bin/pbm backup >> /data/pbm_all/logs/backup.log 2>&1