【Mongodb】資料庫備份與還原

WilsonPan發表於2021-08-18

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

相關文章