MongoDB 合理的備份

MongoDB 刪庫要跑路嗎?其實有合理的備份,也不一定要跑路的。

在上一節,我們聊到了 MongoDB 5.x 副本集部署,這一節來聊聊副本集的數據備份。

1 創建備份用戶

在 Primary 節點執行下面語句創建備份用戶:

db.createUser(  {    user: "backup_user",    pwd: "xxxxxx",    roles: [ { role: "backup", db: "admin" } ]  })

2 增加備份腳本​​​​​​​

mkdir -p /data/mongodb/{script,backup}vim /data/mongodb/script/backup.sh

加入如下內容:

#!/bin/bashbakdir='/data/mongodb/backup'nowtime=$(date +%Y%m%d%H%M%S)start(){  /usr/bin/mongodump --host 127.0.0.1:27001 -u backup_user -p xxxxxx --out ${bakdir}/mongobak_${nowtime}}execute(){  start  if [ $? -eq 0 ]  then    echo "back successfully!"    else    echo "back failure!"    fi}
delete(){        find $bakdir/  -name "mongobak_"   -mtime +15   -exec rm -rf {} \;}
executedeleteecho "backup end"

賦予可執行權限

chmod +x /data/mongodb/script/backup.sh

3 腳本測試

執行備份腳本,看是否能正常備份:

/data/mongodb/script/backup.sh

看結尾處是否顯示如下內容:​​​​​​​

back successfully!backup end

並查看備份目錄下是否有備份文件:

[root@node1 backup]# tree /data/mongodb/backup//data/mongodb/backup/└── mongobak_20211124145903    ├── admin    │   ├── system.users.bson    │   ├── system.users.metadata.json    │   ├── system.version.bson    │   └── system.version.metadata.json    ├── config    │   ├── external_validation_keys.bson    │   ├── external_validation_keys.metadata.json    │   ├── tenantMigrationDonors.bson    │   ├── tenantMigrationDonors.metadata.json    │   ├── tenantMigrationRecipients.bson    │   └── tenantMigrationRecipients.metadata.json    └── martin        ├── martin.bson        └── martin.metadata.json
4 directories, 12 files

4 加入到定時任務

crontab -e

加入如下內容:

0 0 * * * /data/mongodb/script/backup.sh >>/data/mongodb/backup/backup.log

5 恢復

當發生誤操作需要恢復數據時,將 Secondary 節點的備份文件拷貝到 一個新的 MongoDB 實例上,然後通過下面命令進行恢復:

mongorestore --port 27001 -uroot -pxxxxxx  mongobak_20211124145903

在末尾會出現恢復詳情,如下:​​​​​​​

......2021-11-24T15:01:45.786+0800  1 document(s) restored successfully. 0 document(s) failed to restore.

然後進行數據驗證。確定數據正常,則從新實例上查詢誤操作的數據,在 Primary 節點上進行恢復。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章