MongoDB 教學 – 如何備份與還原 MongoDB
在 MySql 之中,我們常用 mysqldump 命令來備份資料,至於 MongoDB,其實也帶有基本的資料庫匯出匯入工具,就是 mongodump 與 mongorestore 這兩個命令列工具。Document Database 不同於 Relational Database,所匯出的資料並不是可以直接閱讀的 SQL 本文檔,而是一般的二進位檔案。實際上這些工具都只能用作備份資料量比較小的環境中,如果資料庫的容量已經是數 TB,不管是 MySQL 還是 MongoDB,這樣傳統的備份方法就不適用,還是要用到 Replication 或 Sharding 這些 Online Backup 的方式比較好。
利用 mongodump 命令來備份 Mongo 資料庫
透過以下命令進行資料庫備份:
mongodump -h 127.0.0.1 -d my-mongo -o ./mongo-backup
mongodump 常用參數說明如下:
-h: 要備份的 MongoDB 連線位置
-d: 要備份的 Database 名稱
-u: 資料庫使用者名稱
-p: 資料庫密碼
執行完成後會在 mongo-backup 目錄下產生備份檔案,以資料庫名稱作為資料夾進行分類。執行畫面如下:
利用 mongorestore 命令來還原 Mongo 資料庫
要還原剛剛備份的資料庫可以透過以下命令
mongorestore -h 127.0.0.1 -d my-mongo-new –directoryperdb ./mongo-backup/my-mongo
常用參數說明如下:
-h: 要備份的 MongoDB 連線位置
-d: 要備份的 Database 名稱
-u: 資料庫使用者名稱
-p: 資料庫密碼
–directoryperdb: 指定要還原的資料庫檔案來源目錄名稱
–drop: 如果資料庫存在就刪除及重新建立 (小心使用)
執行畫面如下:
Linux 建立每日備份 Shell Script
#!/bin/sh
# Definded Dump Configuartion
rollingDays=7
dumpFilename=”mongodb”
dumpTmpDir=”/tmp/mongo-dump-tmp”
backupPath=”/root/mongo-backup”
username=”username”
password=”password”
hostname=”127.0.0.1″
database=”my-mongo”
#Start Dumpping…….
today=`date “+%Y-%m-%d”`
echo “Today: ${today}”
echo “Start Dumpping…….”
# Make backup directory
if ! [ -d “${backupPath}” ] ; then
echo “make dir : ${backupPath}”
mkdir -p “${backupPath}”
fi
if ! [ -d “${dumpTmpDir}” ] ; then
echo “make dir : ${dumpTmpDir}”
mkdir -p “${dumpTmpDir}”
fi
# Make parameter
dn=”-h ${hostname}”
if [ “${username}” != “” ] && [ “${password}” != “” ] ; then
dn=”${dn} -u ${username} -p ${password}”
fi
if [ “${databse}” != “” ] ; then
dn=”${dn} -d ${database}”
fi
# Run backup script
rm -rf -R ${dumpTmpDir}
command=”mongodump ${dn} -o ${dumpTmpDir}”
echo $command
$command
if [ $? == 0 ] ; then
cd “${dumpTmpDir}”
/bin/tar -zcvf “${backupPath}/${dumpFilename}-${today}.tar.gz” *
find ${backupPath}/${dumpFilename}-* -mtime +{rollingDays} -exec rm -f {} \;
fi
rm -rf -R ${dumpTmpDir}
上述 Script 如果不給 $database 就會全部備份,不需要的人請自行修改,謝謝。