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/bash
bakdir='/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 {} \;
}
execute
delete
echo "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 節點上進行恢復。