Mongodb 備份與恢復

2012年2月23日 沒有評論

可以使用Mongodb自帶的mongodump和mongorestore工具來實現數據庫的備份和恢復。其用法比較簡單,可以使用如下命令來獲取幫助信息:

mongodump --help

mongorestore --help

備份使用命令mongodump,如果執行該命令不帶任何參數,會把本機上運行的在默認端口的mongodb中的除local數據庫外的所有數據庫備份下來,存放在當前執行命令的目錄下的dump(如果不存在該目錄會自動創建)目錄中,并按照數據庫的名字存放在不同的不同的目錄下,例如有個數據庫名為test,那么其備份的文件存放的位置為./dump/test目錄下。大部分情況下,我們可能不會這么干,那么可以通過-d來指定需要備份的數據,-o來指定備份存放的位置,同時可以使用-h來指定需要備份的主機地址。例如:

mongodump -h 127.0.0.1:27017 -d atagdata -o /data/dump
或
mongodump -h 127.0.0.1 --port 27017 -d atagdata -o /data/dump
備份本機上的atagdata數據庫中的所有collections到/data/dump目錄中
每個collections都是以一個文件獨立存在,存放路徑為/data/dump/atagdata/collections_name.bson

mongodump -h 192.168.1.211 --port 27017 -d atagdata -o /data/dump
備份遠程數據庫到本地

mongodump -h 127.0.0.1:27017 -d atagdata -c log_01 -o /data/dump
備份atagdata數據庫中collections名為log_01的數據

注意:備份不能一次指定多個數據庫,也不能一次指定多個collections,也就是說,要么一次備份下來所有數據庫,要么一次只備份一個指定的庫,同理,在指定了數據庫的情況下,要么全部備份該庫下的所有collections,要么只備份指定的一個collections,所以要想只備份幾個指定的庫或collections時,可以多次執行備份命令,修改其數據庫名或collections名即可。另外如果數據庫需要認證,可以使用-u和-p來指定用戶名和密碼。

上述用mongodump備份下來的文件,可以通過mongorestore來進行恢復。可以mongodb實例沒有啟動的情況下執行恢復操作,這個時候必須使用dbpath來指定存放恢復數據的目錄,另外可以使用directoryperdb來指定數據庫的數據文件是否按文件夾來區分;當然在mongodb已經啟動情況下,也是可以執行恢復操作的,這時候dbpath參數不是必須的,如果指定dbpath,那么dbpath不能指定為當前mongodb實例相同的dppath,反之mongorestore會根據當前運行的實例獲取dbpath、directoryperdb信息,把備份數據恢復當前的mongodb的dbpath中。例如:

mongorestore /data/dump/
把/data/dump/下所有數據庫恢復到當前mongodb中,數據庫名字跟備份時名字相同

mongorestore -d test /data/dump/test
恢復test數據庫到當前mongodb中test數據庫

mongorestore -d new_test /data/dump/test
恢復test數據庫到當前mongodb中,并且數據庫的名字為new_test

mongorestore -d test --drop /data/dump/test
使用drop參數,在恢復前會刪除已有的collections

mongorestore --dbpath /data/db_1 --directoryperdb --drop /data/dump/
把/data/dump/下所有數據庫恢復到/data/db_1目錄中,數據庫名字跟備份時名字相同

MongoDB Replica Set 配置

2012年2月21日 沒有評論

Replica Set 節點類型分為三種:

  • standard:常規節點,它存儲一份完整的數據副本,參與選舉投票,有可能成為primary節點;
  • passive:存儲了完整的數據副本,參與投票,不能成為primary節點;
  • arbiter:仲裁節點,只參與投票,不接收復制的數據,也不能成為primary節點。

本文配置使用2個常規節點和一個arbiter節點,arbiter節點由于不同步數據,所以負載會很小,部署對硬件沒有太大的要求。

假設192.168.1.211、192.168.1.212為常規節點,192.168.1.68為arbiter節點。三個節點上的mongodb都是用下面的配置文件,文件存放在/etc/mongodb.cnf:

dbpath = /data/db/
logpath = /data/log/m.log
logappend = true
port = 27017
fork = true
directoryperdb = true
journal = true
replSet = test
rest = true

其中replSet 的 Id 為 test,這個值對應initiate中的”_id”,使用rest參數后可以在web管理界面中顯示Replica Set中其他mongodb實例的信息。

使用命令

/usr/local/mongodb/bin/mongod --config /etc/mongodb.cnf

分別啟動三個機器上的mongodb實例,使用mongodb客戶端登陸兩個常規節點中的任何一個,執行如下命令:

rs.initiate(
	{"_id" : "test",
	 "members" : [
		{"_id" : 1, "host" : "192.168.1.211"},
		{"_id" : 2, "host" : "192.168.1.212"},
		{"_id" : 3, "host" : "192.168.1.68", "arbiterOnly" : true}
	]
});

或

rs.initiate(
	{"_id" : "test",
	 "members" : [
		{"_id" : 1, "host" : "192.168.1.211"},
		{"_id" : 2, "host" : "192.168.1.212"}
	]
});

rs.addArb('192.168.1.68');

可以使用rs.conf()查看配置情況,rs.status()查看各個節點的狀態,經過一小段時間后,他們會選一臺作為PRIMARY,其他的常規節點為SECONDARY,同時在js shell中看到提示符從“>”變為對應的 “PRIMARY>” 或 “SECONDARY>” 或 “ARBITER>”。可以在PRIMARY是通過rs.stepDown()來切換PRIMARY,執行此命令后會在剩余的常規節點選一個來充當PRIMARY。

關于初始化中配置members的其他可選參數,可以到官網上查看,地址:http://www.mongodb.org/display/DOCS/Replica+Set+Configuration

MongoDB的啟動和停止腳本

2012年2月20日 1 條評論

Mongodb腳本:把命令行的內容保存到一個文件中,把該文件放在/usr/bin(或任何系統設置的PATH路徑中)下,就可以直接用該文件來啟動或停止服務了。

本人比較傾向把啟動mongodb的參數放在配置文件中,直觀且便于管理,例如把參數寫入/etc目錄下的mongodb.cnf文件中,參數設置如下:

#configuration Options for MongoDB
#
# For More Information, Consider:
# - Configuration Parameters: http://www.mongodb.org/display/DOCS/Command+Line+Parameters
# - File Based Configuration: http://www.mongodb.org/display/DOCS/File+Based+Configuration
dbpath = /data/db/
logpath = /data/log/m.log
logappend = true

#bind_ip = 127.0.0.1
port = 27017
fork = true
#auth = true
noauth = true
directoryperdb = true
journal = true

可以使用命令:

/usr/local/mongodb/bin/mongod --config /etc/mongodb.cnf

來啟動mongodb,所以啟動腳本就可以這么寫

#!/bin/sh

/usr/local/mongodb/bin/mongod --config /etc/mongodb.cnf

假設該文件命名為mongodb-start,存放于/usr/bin下,現在就可以直接用mongodb-start來啟動服務了,注意,該文件要有執行的權限。

停止mongodb服務腳步如下:

#!/bin/bash

pid=`ps -o pid,command ax | grep mongod | awk '!/awk/ && !/grep/ {print $1}'`;
if [ "${pid}" != "" ]; then
    kill -2 ${pid};
fi

其實就是通過ps、grep、awk命令找到mongod的進程號,在通過kill來關閉mongod服務,當然查詢進程號的命令還有很多,任取一種即可,例如:

ps -C mongod -f | grep mongod |tr -s ' ' | cut -d ' ' -f 2
或
ps aux | grep mongod | grep -v "grep" | awk -F" "  '{print $2}'

linux下MongoDB開機自啟動的問題

2012年2月17日 沒有評論

按照常理,把如下命令

/usr/local/mongodb/bin/mongod --dbpath=/data/db/ --fork --logpath=/data/log/m.log --directoryperdb

放在/etc/rc.local文件中就可以實現開機自啟動了,第一次重啟機器發現mongodb順利啟動了,再次重啟機器后,通過ps沒有查看到相應mongod進程,也就是啟動失敗了。原因是由于重啟機器,導致非正常停止mongod服務,mongod.lock中還記錄了上次運行的進程號,為了數據的安全需要執行 /usr/local/mongodb/bin/mongod –repair,當然如果直接把mongod.lock文件刪除也可以重新啟動了,例如:

/usr/local/mongodb/bin/mongod --repair
/usr/local/mongodb/bin/mongod --dbpath=/data/db/ --fork --logpath=/data/log/m.log --directoryperdb

或
rm -rf /data/db/mongod.lock
/usr/local/mongodb/bin/mongod --dbpath=/data/db/ --fork --logpath=/data/log/m.log --directoryperdb

注意上述啟動Mongodb都是沒有增加journal參數,如果帶了此參數就不會那么麻煩了,例如

/usr/local/mongodb/bin/mongod --dbpath=/data/db/ --fork --logpath=/data/log/m.log --directoryperdb --journal

就可以了,就算是非正常重啟機器,mongodb也會根據日志去修復數據庫的。

另外,如果mongodb的數據目錄是通過mount的NFS文件夾,自啟動好像有問題的。

分類: Linux, MongoDB 標簽:

mongodb js shell不能使用退格鍵的問題

2012年2月13日 沒有評論

在centos下安裝了mongodb,使用SecureCRT連接centos后,使用mongo來操作mongodb,在shell使用退格鍵時出現亂七八糟的字符,造成這個問題原因跟SecureCRT配置有關,修改設置為:選項 –> 會話選項?–> 終端?–> 仿真?–> 終端中選擇linux 即可。詳細如下圖:

無覓相關文章插件,快速提升流量

30选5怎么中奖