上一篇提到了如何安裝、操作 MongoDB,這篇要討論如何自動備份資料庫。
雖然資料庫中本來就有一塊是負責做 concurrecy control, logging & recovery,但是如果在機器被打下來、資料庫被勒索,或是純粹只是需要搬動到另外一台機器等等,這些都是需要自己進行備份和還原的。這篇文章就是要介紹備份和還原的指令,並討論如何做到自動備份。
由於 MongoDB 是個 Schema-less 的 NoSQL 資料庫,並沒有辦法直接匯出一個 CSV 或 SQL 檔案,但我們仍然可以使用 mongodump
這個指令匯出一包東西。
通常可以這樣使用:
# mongodump -d 資料庫名稱 -o 備份檔案
mongodump -d blog -o blog-backup
這樣會在 blog-backup/blog
裡面產生幾個檔案,由於我們只有一個 collection,所以有兩個檔案:一個是 articles.bson
、另一個是 articles.metadata.json
。
.bson 檔用來存放的是實際的資料,而 .json 檔則是用來存放欄位的描述。
所以 $n$ 個 collections 會產生 $2n$ 個檔案。
如果要打包這個資料夾,建議可以用 tar
來打包,例如:
tar zcvf blog.tgz blog-backup
就可以把這個資料夾打包成一個壓縮檔。
如何把這些壓縮檔丟到別的機器去?可以參考 這篇文章 提到的 scp 方法。
假設我們到新的電腦,要把這個檔案還原回去的話,首先先解開我們打包的資料夾:
tar zxvf blog.tgz
再假設我們要把這個資料庫還原,並取一個新名字叫 blog2 的話,可以這樣操作:
mongorestore -d blog2 --directoryperdb ./blog-backup/blog
這樣就可以成功還原。如果資料庫已經存在的話,預設是不會還原並寫入的;如果要強制還原的話,可以加上 --drop
參數。
還記得透過 Certbot 安裝的憑證因為只能用三個月,所以每幾個月就要重新簽一次嗎?那時候就是用 Crontab 來達成自動排程的目的。
你也可以寫一個腳本,透過 MongoDB 自動備份出壓縮檔後,上傳到其他主機。最後再透過 Crontab 設定每個月執行一次這個腳本,這樣就達到自動異地備份的功能囉!
本篇文章同步發表在 Noob's Space。