Linux中MongoDB如何實現(xiàn)遠程自動備份詳解
看過上一篇接手老項目的痛——MongoDB學(xué)習(xí)及集群搭建知道,最近接手了一個后媽養(yǎng)的項目,項目的數(shù)據(jù)庫沒有人維護,DBA以各種理由推脫暫時不接,面對裸奔沒有備份的數(shù)據(jù)庫,我的內(nèi)心很焦灼,于是花了點時間把生產(chǎn)環(huán)境的自動備份給搞起來。
下面話不多說了,來一起看看詳細的介紹吧
一些準備
既然都備份了,為了保險起見,備份與庫就不放在同一臺服務(wù)器上了,于是向運維申請了一臺服務(wù)器,同時安裝好mongo,如果不知道怎么安裝mongo的話可以看我的上一篇文章。
安裝完之后,首先測試下是否可以遠程訪問目標mongodb,到安裝好mongo的bin目錄下
./mongo 10.100.1.101:27017 #目標mongo的ip及端口
然后創(chuàng)建些必要的目錄,比如備份文件放在哪個目錄之類的。
接下來測試下利用mongodump來備份數(shù)據(jù)庫:
./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為副本集節(jié)點,有多個可以多個 # -d testdb是要備份的庫名,不填默認副本集下全部 # --out 保存路徑
到這里,mongo的備份已經(jīng)實現(xiàn),現(xiàn)在要完成的就是自動啦。
編寫腳本
自動定時備份其實就是通過crontab命令來實現(xiàn)啦。但前提是我們需要編寫個定時跑的腳本。首先我們新建個腳本:
vi /home/local/mongod_bak.sh
然后編寫對應(yīng)的腳本,腳本上有對應(yīng)的注釋,供大家參考,這里主要做了三個動作,首先是備份,然后將備份的文件壓縮,然后只保留最近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} =============="
編寫完之后,給到文件可執(zhí)行權(quán)限,并可以手動執(zhí)行測試下:
chmod +x /home/local/mongod_bak.sh
定時任務(wù)
最后就是添加執(zhí)行計劃了,修改/etc/crontab
crontab -e
添加執(zhí)行腳本,保存即可。
30 1 * * * /home/local/mongod_bak.sh #表示每天凌晨1點30執(zhí)行備份
這里簡單介紹下crontab。
crontab命令常見于Unix和類Unix的操作系統(tǒng)之中,用于設(shè)置周期性被執(zhí)行的指令。該命令從標準輸入設(shè)備讀取指令,并將其存放于crontab文件中,以供之后讀取和執(zhí)行。
通常,crontab儲存的指令被守護進程激活, crond常常在后臺運行,每一分鐘檢查是否有預(yù)定的作業(yè)需要執(zhí)行。這類作業(yè)一般稱為cron jobs。
一些常用命令可以參考下:
#啟動服務(wù) /sbin/service crond start #關(guān)閉服務(wù) /sbin/service crond stop #重啟服務(wù) /sbin/service crond restart #重新載入配置 /sbin/service crond reload #查看crontab服務(wù)狀態(tài) service crond status #手動啟動crontab服務(wù) service crond start #查看crontab服務(wù)是否已設(shè)置為開機啟動,執(zhí)行命令: ntsysv #加入開機自動啟動: chkconfig --level 35 crond on #列出crontab文件 crontab -l #編輯crontab文件 crontab -e #刪除crontab文件 $ crontab -r #恢復(fù)丟失的crontab文件 #假設(shè)你在自己的$HOME目錄下還有一個備份,那么可以將其拷貝到/var/spool/cron/<username>,其中<username >是用戶名 #或者使用如下命令其中,<filename>是你在$HOME目錄中副本的文件名 crontab <filename>
總結(jié)
慢工出細活,有些東西一開始覺得很難很麻煩,但當你靜下心來認真研究下,還是很容易理解的,畢竟你不是第一個踩坑的,所以還是好好學(xué)習(xí)吧。
好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對本站的支持。
版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
關(guān)注官方微信