1. 程式人生 > >Shell指令碼備份Mongodb資料庫

Shell指令碼備份Mongodb資料庫

目錄

誠邀訪問我的個人部落格:我在馬路邊
更好的閱讀體驗點選檢視原文:Shell指令碼備份Mongodb資料庫
原創部落格,轉載請註明出處

@

專案需要對Mongodb的資料進行定期備份,以免出現什麼差錯難以追回,但是資料量比較大,本機硬碟不夠用,還要異地備份,於是乎通過通過dump遠端連結目標庫,然後將資料dump到另一個位置,暫時還在執行中,如果有錯誤再進行修改。


環境還原

  • Mongodb伺服器A
    (Linux),備份機器B(Windows),備份行動硬碟C。
  • B機器可以遠端A伺服器,由於AB伺服器的硬碟剩餘空間都不夠備份,在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資料庫
原創部落格,轉載請註明出處