1. 程式人生 > 資料庫 >Linux中MongoDB如何實現遠端自動備份詳解

Linux中MongoDB如何實現遠端自動備份詳解

前言

看過上一篇接手老專案的痛——MongoDB學習及叢集搭建知道,最近接手了一個後媽養的專案,專案的資料庫沒有人維護,DBA以各種理由推脫暫時不接,面對裸奔沒有備份的資料庫,我的內心很焦灼,於是花了點時間把生產環境的自動備份給搞起來。

下面話不多說了,來一起看看詳細的介紹吧

一些準備

既然都備份了,為了保險起見,備份與庫就不放在同一臺伺服器上了,於是向運維申請了一臺伺服器,同時安裝好mongo,如果不知道怎麼安裝mongo的話可以看我的上一篇文章。

安裝完之後,首先測試下是否可以遠端訪問目標mongodb,到安裝好mongo的bin目錄下

./mongo 10.100.1.101:27017 #目標mongo的ip及埠

然後建立些必要的目錄,比如備份檔案放在哪個目錄之類的。

接下來測試下利用mongodump來備份資料庫:

./bin/mongodump --host test/10.100.1.101:27017,10.100.1.102:27017 -d testdb --out /data/temp

# test為副本集名稱
# 10.100.1.101:27017,10.100.1.102:27017為副本集節點,有多個可以多個
# -d testdb是要備份的庫名,不填預設副本集下全部
# --out 儲存路徑

到這裡,mongo的備份已經實現,現在要完成的就是自動啦。

編寫指令碼

自動定時備份其實就是通過crontab命令來實現啦。但前提是我們需要編寫個定時跑的指令碼。首先我們新建個指令碼:

vi /home/local/mongod_bak.sh

然後編寫對應的指令碼,指令碼上有對應的註釋,供大家參考,這裡主要做了三個動作,首先是備份,然後將備份的檔案壓縮,然後只保留最近7天的檔案。

#!/bin/bash
sourcepath='/home/local/mongodb/bin'  #mongodb檔案路徑
targetpath='/home/local/mongodb_bak' #備份的路徑
nowtime=$(date +%Y-%m-%d-%H)
replicationname='test'  #副本集名
dbname='testdb' #庫名
port='27017' #埠
ip1='10.100.1.101' #ip
ip2='10.100.1.102'

echo "============== start backup ${nowtime} =============="
start()
{
 ${sourcepath}/mongodump --host ${replicationname}/${ip1}:${port},${ip2}:${port} -d ${dbname} --out ${targetpath}/${nowtime}
}
execute()
{
 start
 if [ $? -eq 0 ]
 then
 echo "back successfully!"
 else
 echo "back failure!"
 fi
}
 
if [ ! -d "${targetpath}/${nowtime}/" ]
then
 mkdir ${targetpath}/${nowtime}
fi
execute
echo "============== back end ${nowtime} =============="

echo "============== start zip ${nowtime} =============="
zip -r ${targetpath}/${nowtime}.zip ${targetpath}/${nowtime}
rm -rf ${targetpath}/${nowtime}
echo "============== zip end ${nowtime} =============="

echo "============== start delete seven days ago back ${nowtime} =============="
find ${targetpath} -type f -mtime +7 -name "*" -exec rm -rf {} \; 
echo "============== delete end ${nowtime} =============="

編寫完之後,給到檔案可執行許可權,並可以手動執行測試下:

chmod +x /home/local/mongod_bak.sh

定時任務

最後就是新增執行計劃了,修改/etc/crontab

crontab -e

新增執行指令碼,儲存即可。

30 1 * * * /home/local/mongod_bak.sh #表示每天凌晨1點30執行備份

這裡簡單介紹下crontab。

crontab命令常見於Unix和類Unix的作業系統之中,用於設定週期性被執行的指令。該命令從標準輸入裝置讀取指令,並將其存放於crontab檔案中,以供之後讀取和執行。

通常,crontab儲存的指令被守護程序啟用, crond常常在後臺執行,每一分鐘檢查是否有預定的作業需要執行。這類作業一般稱為cron jobs。

一些常用命令可以參考下:

#啟動服務
/sbin/service crond start 

#關閉服務
/sbin/service crond stop 

#重啟服務
/sbin/service crond restart 

#重新載入配置
/sbin/service crond reload 

#檢視crontab服務狀態
service crond status 

#手動啟動crontab服務
service crond start 

#檢視crontab服務是否已設定為開機啟動,執行命令:
ntsysv

#加入開機自動啟動:
chkconfig --level 35 crond on

#列出crontab檔案
crontab -l

#編輯crontab檔案
crontab -e

#刪除crontab檔案
$ crontab -r

#恢復丟失的crontab檔案
#假設你在自己的$HOME目錄下還有一個備份,那麼可以將其拷貝到/var/spool/cron/<username>,其中<username >是使用者名稱
#或者使用如下命令其中,<filename>是你在$HOME目錄中副本的檔名
crontab <filename>

總結

慢工出細活,有些東西一開始覺得很難很麻煩,但當你靜下心來認真研究下,還是很容易理解的,畢竟你不是第一個踩坑的,所以還是好好學習吧。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對我們的支援。