Shell指令碼備份Mongodb資料庫
目錄
誠邀訪問我的個人部落格:我在馬路邊
更好的閱讀體驗點選檢視原文:Shell指令碼備份Mongodb資料庫
原創部落格,轉載請註明出處
@
專案需要對Mongodb的資料進行定期備份,以免出現什麼差錯難以追回,但是資料量比較大,本機硬碟不夠用,還要異地備份,於是乎通過通過dump遠端連結目標庫,然後將資料dump到另一個位置,暫時還在執行中,如果有錯誤再進行修改。
環境還原
- Mongodb伺服器
A
B
(Windows),備份行動硬碟C。 B
機器可以遠端A
伺服器,由於A
和B
伺服器的硬碟剩餘空間都不夠備份,在B
機器插入行動硬碟C。- 在B機器上通過VirtualBox建立
Linux虛擬機器
,與B
機器的行動硬碟C
進行共享資料夾D
。 Linux虛擬機器
建立shell指令碼,將資料備份到共享資料夾D
。Linux虛擬機器
需要安裝Mongodb資料庫,如何安裝資料庫請參考 Centos7安裝MongoDB4.0,以便執行mongodump
命令。
環境建立
Linux虛擬機器
在共享目錄<folder>
下建立匯出dump的資料夾和將dump檔案壓縮的目標資料夾,命令如下:
注:執行的時候請將下面提到的所有<folder>
替換成你的目標目錄,比如/media/sf_mongobak/
# 切換到你的目標目錄
$ cd <folder>
# 建立資料夾
$ mkdir -p dump_bak
$ mkdir -p tar_bak
編寫shell指令碼
建立好資料夾後只需要編寫shell指令碼就可以了,shell腳本里會用到上述建立的資料夾,如果寫錯了執行的時候會報錯,請注意。
準備檔案
# 切換到你的目標目錄 $ cd <folder> # 建立shell檔案 $ sudo touch mongobak.sh # 編寫檔案 $ vi mongobak.sh
建立shell指令碼
在mongobak.sh
檔案中插入如下內容,為了方便理解下面寫的路徑都是臨時編寫,請將/media/sf_mongobak
自行修改成你的目錄。
# 在檔案中編寫如下內容
## 指定到你安裝的Mongodb bin目錄下的mongodump
dump=/usr/local/mongodb/bin/mongodump
## 填寫你建立dump_bak檔案的絕對路徑
out_dir=/media/sf_mongobak/dump_bak
## 填寫你建立tar_bak檔案的絕對路徑
tar_dir=/media/sf_mongobak/tar_bak
## 記錄備份時間
sysdate=`date +%Y_%m_%d`
db_user=***
db_pass=***
## 設定刪除期限,刪除10天前的備份
days=10
## 設定最終壓縮的檔名稱,帶有日期
tar_bak="mondodb_bak_$sysdate.tar.gz"
cd $out_dir
# 刪除之前的dump檔案
sudo rm -rf $out_dir
# 建立新的資料夾存放dump檔案
sudo mkdir -p $out_dir/$sysdate
# 匯出172.18.9.123機器上的masterdata庫的所有表到$out_dir/$sysdate資料夾
$dump -h 172.18.9.123 -u $db_user -p $db_pass -d masterdata -o $out_dir/$sysdate
# 壓縮$out_dir/$sysdate到目標資料夾
sudo tar -zcvf $tar_dir/$tar_bak $out_dir/$sysdate
# 刪除指定期限錢的備份檔案
sudo find $tar_dir/ -mtime +$days -delete
# 退出
exit
注:上面插入的內容請注意空格,比如date +%Y_%m_%d
獲取時間date
和+
號之間就有空格。
匯出dump資料的時候根據自己的需求自行修改,dump命令可參考:Mongo的備份和恢復(mongodump 和mongorestore )
執行shell指令碼
給檔案新增許可權,然後shell命令執行。
# 新增許可權
$ chmod +x mongobak.sh
# 執行shell指令碼
sh +x mongobak.sh
在執行過程中遇到錯誤error running listCollections
,還有其他的錯誤一般就是mongodump
命令使用不對,這裡參考了一篇文章:Not able to run mongodump,其他的請自行百度或者Google。
進階版
以上滿足了備份的指令碼化,但是如果要做定時任務定期執行,那麼就要結合linux的crontab完成,具體使用可參考文章Linux定時任務Crontab使用
感謝
參考來源:用shell指令碼實現MongoDB資料庫自動備份
誠邀訪問我的個人部落格:我在馬路邊
更好的閱讀體驗點選檢視原文:Shell指令碼備份Mongodb資料庫
原創部落格,轉載請註明出處