如果你的 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