利用 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: 如果資料庫存在就刪除重新建立 (小心使用)
執行畫面如下:
還原 MongoDB 發生錯誤
如果沒有設定預設環境編碼,還原資料庫時會出現以下錯誤:
terminate called after throwing an instance of 'std::runtime_error' what(): locale::facet::_S_create_c_locale name not valid Aborted (core dumped)
只要設定一下 LC_ALL 這個環境變數即可排除,如下:
export LC_ALL="en_US.UTF-8"
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 就會全部備份,需要的人請自行享用,謝謝。