2015年1月29日 星期四

MongoDB 教學 – 如何備份與還原 MongoDB

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 就會全部備份,不需要的人請自行修改,謝謝。

轉載自《HKITBLOG