【Mongodb】數據庫備份與還原


Mongodb 備份與還原

文件快照

利用Linux LVM 邏輯卷管理,制作快照后,將快照映像掛載到文件系統上並從快照復制數據。生成的備份包含所有數據的完整副本,從而達到備份數據庫。

注意:Mongodb數據與日志目錄需要啟動在邏輯卷掛載到目錄中

快照備份

db.fsyncLock();                                             # 鎖定數據庫

vgcreate vg01 /dev/sdb                                      # 創建卷組
lvcreate --size 1G --name mongodb_bak /dev/vg01             # 創建快照

umount /dev/vg01/mongodb_bak                                # 卸載
dd if=/dev/vg01/mongodb_bak | gzip > bak/20210817.gz        # 壓縮歸檔

db.fsyncUnlock();                                           # 解鎖數據庫

快照直接還原

db.fsyncLock();                                             # 鎖定數據庫

umount /dev/vg01/mongodb_01                                 # 卸載lv

lvcreate --size 1G --name mongodb_restore /dev/vg01         # 創建lv

mkfs.ext4 /dev/vg01/mongodb_restore                         # 格式化ext4,不然還原后掛載不了           
dd if=/dev/vg01/mongodb_bak of=/dev/vg01/mongodb_restore    # 復制文件到新快照

mount /dev/vg01/mongodb_new /mongodb                        # 掛載新的快照到數據目錄

db.fsyncUnlock();                                           # 解鎖數據庫

從壓縮文件還原

umount /dev/vg01/mongodb_bak                                # 卸載lv

lvcreate --size 1G --name mdb-new vg0                       # 創建lv

gzip -d -c 20210817.gz | dd of=/dev/vg0/mdb-new             # 解壓並復制到新lv

mount /dev/vg01/mdb-new /mongodb                            # 掛載

優缺點
優點

  1. 快速
  2. 支持時間點的快照備份
  3. 提供增量備份

缺點

  1. 需要文件系統支持時間點快照(LVM)
  2. 需要開啟日志功能
  3. 快照創建整個磁盤的鏡像,因此將數據文件,配置,日志放在一個邏輯磁盤上節約空間

復制文件

備份文件

service mongod stop                                                                           # 停止mongod

echo `date +%Y%m%d%H%M%S` | xargs -I {} sh -c 'mkdir ./bak/{}; cp -a /mongodb/data ./bak/{}'  # 按日期格式歸檔

service mongod restart                                                                        # 重新啟動mongodb             

從文件還原

service mongod stop                                                                           # 停止mongod

echo bak_`date +%Y%m%d%H%M%S` | xargs -I {} sh -c 'mkdir ./bak/{};mv /mongodb/data ./bak/{}'  # 備份當前文件

cp -a bak/20210818025815/data /mongodb                                                        # 使用備份數據還原

service mongod restart                                                                        # 重新啟動mongodb

優缺點
優點

  1. 無需文件系統支持快照功能

缺點

  1. 備份拷貝前必須停止所有的對mongod的寫操作,否則將是一個無效的備份
  2. 不支持副本集時間點級(point in time recovery)恢復,並且很難管理大型分片集群
  3. 備份文件占有更多的空間(包括索引以及重復的底層文件填充和碎片)

mongodump

mongodump備份

mongodump --uri="mongodb://127.0.0.1:27017"                                                                               # 導出整個實例
mongodump --uri="mongodb://127.0.0.1:27017/database" --out=/dump/`date +%Y%m%d`                                           # 導出指定數據庫並指定位置
mongodump --uri="mongodb://127.0.0.1:27017/database" --gzip --out=/dump/`date +%Y%m%d`                                    # 導出指定數據庫並壓縮
mongodump --uri="mongodb://127.0.0.1:27017" --oplog                                                                       # 導出oplog ,需要開啟副本集
mongodump --uri="mongodb://127.0.0.1:27017/database" --excludeCollection=users                                            # 排除指定集合
mongodump --uri="mongodb://127.0.0.1:27017/database" --archive=`date +%Y%m%d`.archive                                     # 導出歸檔文件

mongodump還原

mongorestore --uri="mongodb://127.0.0.1:27017/" --db=database /dump/20210818/database/                                         # 還原指定數據庫
mongorestore --uri="mongodb://127.0.0.1:27017/" --db=database --collection=collection /dump/20210818/database/collection.bson  # 還原指定集合
mongorestore --uri="mongodb://127.0.0.1:27017/" --archive=20210818.archive                                                     # 從歸檔文件還原
mongorestore --uri="mongodb://127.0.0.1:27017/" --archive=20210818.archive --dryRun --verbose                                  # 嘗試還原
mongorestore --uri="mongodb://127.0.0.1:27017/" --gzip                                                                         # 從壓縮文件中還原
mongorestore --uri="mongodb://127.0.0.1:27017/" --gzip --nsInclude=db1.user* --nsInclude=test.*                                # 還原指定數據庫/集合

優缺點
優點

  1. 備份恢復小型mongoDB集群更簡單和效率,備份文件占有的空間更少(只備份文檔,不備份索引)
  2. 備份過程中應用可以繼續修改數據(記錄oplog,通過--oplog選項達到數據狀態一致)

缺點

  1. 備份的數據庫中不包含local數據庫,只備份數據庫的文檔不備份數據庫索引,因此恢復后必須重建索引
  2. 備份恢復大型mogoDB集群不理想(效率不高)
  3. 備份時會影響運行中的mongod的性能(產生網絡流量)
  4. 備份的數據比系統內存大時,查詢操作會引起頁錯誤
  5. mongodump不同版本的格式不能兼容,不要使用新版本的mongodump備份老版本的數據

問題及解決方法

錯誤信息 解決方法
Implicit TCP FastOpen unavailable. If TCP FastOpen is required rm -f /tmp/mongodb-27017.sock && service mongod restart

引用

MongoDB Backup Methods

mongodump

GitHub


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM