mongdb備份恢復

一、物理備份(拷貝文件)

#!/bin/sh
DATE=`date +%Y%m%d`
DEL_DATE=$(date -d '-30 days' "+%Y%m%d")
HOST=10.10.17.27
PORT=27000
USER=admin
PASSWORD=123456
DATA_DIR="/data/mongodb/navy_db/db"
BACKUP_PATH="/data/mongodbbackup/$DATE"

date +%Y%m%d%H%M >>/data/log/mongodb_bak.log
#第一步鎖表
lock()
{
echo "db.fsyncLock()"|  mongo  --host $HOST --port $PORT -u $USER -p $PASSWORD  admin
}
execute()
{
  lock
  if [ $? -eq 0 ]
  then
    echo "mongodb lock successfully!" >>/data/log/mongodb_bak.log
  else
    echo "mongodb lock fail!" >>/data/log/mongodb_bak.log
  fi
}
execute
#第二步備份
back()
{
rsync -av $DATA_DIR $BACKUP_PATH/
}
execute()
{
  back
  if [ $? -eq 0 ]
  then
    echo "mongodb back successfully!" >>/data/log/mongodb_bak.log
  else
    echo "mongodb back fail!" >>/data/log/mongodb_bak.log
  fi
}
execute
#第三部解鎖
unlock()
{
echo "db.fsyncUnlock()"|  mongo  --host $HOST --port $PORT -u $USER -p $PASSWORD  admin
}
execute()
{
  unlock
  if [ $? -eq 0 ]
  then
    echo "mongodb unlock successfully!" >>/data/log/mongodb_bak.log
  else
    echo "mongodb unlock fail!" >>/data/log/mongodb_bak.log
  fi
}
execute
#刪除歷史數據
rm -rf "/data/mongodbbackup/${DEL_DATE}/"

PS:

物理備份只能全庫恢復,不能恢復單個表


恢復步驟:

1、停止需要恢復的實例
2、備份清空/data/mongodb/navy_db/db目錄
3、拷貝/data/mongodbbackup/$DATE下面的所有文件和文件夾到/data/mongodb/navy_db/db目錄
4、chown mongod:mongod /data/mongodb/navy_db/db/ -R
5、啓動實例

二、mongodump備份

#!/bin/sh
DATE=`date +%Y%m%d`
DEL_DATE=$(date -d '-30 days' "+%Y%m%d")
HOST=10.10.17.27:27000
USER=admin
PASSWORD=123456
BACKUP_PATH="/backup/mongodbbackup/$DATE"
date +%Y%m%d%H%M >>/data/log/mongodb_bak.log
start()
{
mongodump -h $HOST -u $USER -p $PASSWORD   -o $BACKUP_PATH
}
execute()
{
  start
  if [ $? -eq 0 ]
  then
    echo "mongodb back successfully!" >>/data/log/mongodb_bak.log
  else
    echo "mongodb back fail!" >>/data/log/mongodb_bak.log
  fi
}
execute
rm -rf "/backup/mongodbbackup/${DEL_DATE}/"

恢復:

1、全庫恢復

mongorestore --host 10.10.17.27 --port  27000   /backup/mongodbbackup/20150818/

2、單集合(表的概念)恢復

 mongorestore --host 10.10.17.27 --port  27001 --db navy_db_new --collection navy_db_table_new   /backup/mongodbbackup/20150818/navy_db/navy_db_table.bson

三、複製集備份

#!/bin/sh
DATE=`date +%Y%m%d`
DEL_DATE=$(date -d '-30 days' "+%Y%m%d")
HOST="dbset/10.10.17.27:27000,10.10.17.26:27000"
USER=admin
PASSWORD=123456
BACKUP_PATH="/data/mongodbbackup/$DATE"
date +%Y%m%d%H%M >>/data/log/mongodb_bak.log
start()
{
mongodump -h $HOST -u $USER -p $PASSWORD  --oplog  -o $BACKUP_PATH
}
execute()
{
  start
  if [ $? -eq 0 ]
  then
    echo "mongodb back successfully!" >>/data/log/mongodb_bak.log
  else
    echo "mongodb back fail!" >>/data/log/mongodb_bak.log
  fi
}
execute
rm -rf "/backup/mongodbbackup/${DEL_DATE}/"

PS:

備份複製集和備份單個mongodb實例用mongodump備份的方法差不多,只是host的寫法不一樣,需要指定複製集名稱,還有就是加上 --oplog參數,來跟蹤備份時主庫上發生的所有寫操作,獲取一個pointin-time快照,否則備份的狀態將與集 羣中其他節點不匹配。在恢復時,還必須創建oplog,並指定--oplogReplay參數來應用這些操作,否則恢復的成員將不知道從何處開始同步,從 而在某個時間點上與源服務器保持一致。

恢復:

1、降複製集中要恢復的節點移除

rs.remove("10.10.17.26:27000")

2、運行mongorestore --oplogReplay命令

mongorestore --host 10.10.17.26 --port  27000 --oplogReplay  /data/mongodbbackup/20150820/

3、創建oplog

use local 
db.createCollection("oplog.rs", {"capped" : true, "size" : 10000000})

4、恢復oplog

mongorestore --host 10.10.17.26 --port  27000 -d local -c oplog.rs  /data/mongodbbackup/20150820/oplog.bson

5、將該節點加入到複製集 

 rs.add("10.10.17.26:27000")


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章