0%

MongoDB備份與還原

MongoDB備份與還原

mongoDB內建了mongodump 與mongorestore備份與還原的功能,可以直接在命令列輸入指令就執行備份與還原,使用mongodump備份出來的資料跟mongodexport的不一樣,mongodexport匯出的檔案可以選擇是csv或者json,但mongodump出來的是二進位檔案,需要透過mongodb專用的GUI軟體,或者是匯入來查看

mongodump 備份

使用mongodump只要輸入一行命令就可以進行備份,假設資料庫的名稱為test,使用者帳號與密碼也是test

1
mongodump -h 127.0.0.1 -d test -u test -p test -o ./data/mongodb_backup

這樣就可以將test資料庫的資料備份到data/mongodb_backup的資料夾中

mongorestore 還原

假設要把剛剛備份的test資料庫還原回去,就可以使用mongorestore來進行還原

1
mongorestore -h 127.0.0.1 -d test -u test -p test --directoryperdb ./data/mongo-backup/test

這邊要小心的是,因為我們原本就有test這個資料庫,如果進行還原的話,會無法成功,所以在還原之前我們必須先把資料庫刪除,或者是在命令列上加–drop,所以會變成

1
mongorestore -h 127.0.0.1 -d test -u test -p test --directoryperdb ./data/mongo-backup/test --drop

使用cron進行定時自動備份

可以使用linux內建的cron定時執行備份程式碼,首先我們必須先建立兩個資料夾,mongodb_bak_now保存的是當日的資料庫,隔天會刪掉並且備份新的資料庫內容,mongodb_bak_list則會存放每天備份的資料庫壓縮檔

mkdir -p /data/mongodb_bak/mongodb_bak_now
mkdir -p /data/mongodb_bak/mongodb_bak_list

之後我們在data/mongodb_bak內建立一個名為MongoDB_bak.sh的檔案,並進行編輯後保存

1
2
cd /data/mongodb_bak
vi MongoDB_bak.sh

MongoDB_bak.sh內容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/sh
# 臨時備份路徑
OUT_DIR=/data/mongodb_bak/mongodb_bak_now
# 壓縮後的備份存放路徑
TAR_DIR=/data/mongodb_bak/mongodb_bak_list
# 當前系統時間
DATE=`date +%Y-%m-%d`
# 要備份的資料庫
DB_NAME=voteWebSite
# 代表刪除15天前的備份,即只保留近 15 天的備份
DAYS=15
# 最終保存的數據庫備份文件
TAR_BAK="mongod_bak_$DATE.tar.gz"
cd $OUT_DIR
# 刪除mongodb_bak_now內的所以檔案
rm -rf $OUT_DIR/*
# 在mongodb_bak_now下建立名稱為當天的資料夾
mkdir -p $OUT_DIR/$DATE
# 執行備份資料庫的指令
mongodump -h 127.0.0.1 -d test -u test -p test -o $OUT_DIR/$DATE
# 壓縮格式為 .tar.gz 格式
tar -zcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE
# 刪除 15 天前的備份文件
find $TAR_DIR/ -mtime +$DAYS -delete
exit

修改MongoDB_bak.sh的文件屬性,讓系統有權限執行

1
chmod +x MongoDB_bak.sh

在crontab加入備份排程

1
vi /etc/crontab

根據需要備份的時間設定,這邊假設是root使用者,每天的18:00的時候執行data/mongodb_bak/MongoDB_bak.sh這個檔案,這樣就會每天下午六點的時候,執行我們剛剛建立的檔案

1
2
3
# m h dom mon dow user	command
00 18 * * * root /data/mongodb_bak/MongoDB_bak.sh
#

因為這邊已經改動cron的配置文件,所以我們必須讓cron服務去重新讀取這個檔案,cron的服務管理都要在/etc/init.d/中進行調用,所以先將command line切到/etc/init.d/中

1
cd /etc/init.d/

接著讓cron重新讀取配置

1
service cron reload

這樣就設定完排程囉~

MongoDB 教學 – 如何備份與還原 MongoDB
Linux下MongoDB自動備份
Ubuntu cron 定時執行任務
備份及還原MongoDB(mongodump , mongorestore)
Mongo的備份和恢復(mongodump 和mongorestore )
Ubuntu 排程設定 :Crontab 排程使用教學
Mongodb 定時備份和恢復