MongoDB 的配置項在設定檔中進行配置和資料庫的備份與恢複,mongodb備份與恢複
一、mongoDB命令列啟動選項配置
mongodb的命令列啟動時我們可以選擇一些選項來改變更配置置,具體的選項如下:
1、--dbpath: 每一個mongodb進行就需要一個獨立的資料存放目錄,如果你在不同的連接埠啟動了多個mongodb進行但是資料存放目錄相同就會報錯:
2、--port :就是程式的不同監聽口,預設是27017
--port=27017 修改不同的連接埠來啟動多個mongdb進程
3、--fork: 建立守護mongodb進程
4、--logpath: 指定日誌寫出的路勁
--logpath="mongodb.log"預設放在mongodb安裝的/bin目錄下
5、--config: 設定檔
--config='設定檔路勁以及設定檔'
(1)、使用設定檔會簡化啟動,因為一次配置多次使用,在目錄建立一個設定檔,設定檔建立執行個體如下:
# “#”其注釋作用
dbpath=E:\DB\mongodb\data
port=27017
fork=true
logpath=mongdb.log
logappend=true
// 預設情況下日誌是會將之前的日誌清除,在寫,如果要追加則可以使用logappend=true
配置之後啟動進程:
6、關閉服務:db.shutdownServer()
二、資料的備份 恢複:
mongo Database Backup恢複
1. 檔案備份(冷備)
直接備份mongodb的資料目錄。需要停止mongo server 拷貝資料目錄進行完整有效備份。
2. 工具備份(熱備)
mongodump 是將資料以二進位形式匯出,
而 mongoexport匯出的資料格式為 csv 或 json 格式; mongodump 可以匯出一個資料庫,或者整個 MongoDB 服務上的所有資料庫,因此 mongodump是更大範圍的備份工具。
(1)、mongodump 備份一個資料庫
mongodump -h 127.0.0.1 -d test -o E:\DB\mongodb\data\testdump.dmp
//從日誌看出,mongodump 的結果會產生一個目錄,第一層目錄為資料庫名,再下一層為每個集合對應的備份檔案。
(2)、備份資料庫中的一個集合
mongodump-h 127.0.0.1 -d test -c mytest -o E:\DB\mongodb\data.dmp
// mongodump 加上-c(全稱:collection) 參數則可備份指定集合。
(3)、備份整個執行個體
mongodump -h 127.0.0.1 -o E:\DB\mongodb\data.dmp
//mongodump 如果不指定 -d 參數,剛會備份整個 MongoDB 執行個體。在目錄 data.dmp下產生了和mongo執行個體中資料庫個數相同的目錄,目錄名分別對應 MongoDB 上執行個體上的資料庫名。
恢複:使用mongorestore 命令
(1)、恢複一個資料庫
mongorestore-d dbname E:\DB\mongo\data
-d 使用的資料庫名稱
後面直接加你剛才匯出的目錄,這樣是直接恢複所有表
如果-c 是恢複一個表
例:mongorestore -d resdb E:\DB\mongodb\data\dump.dmp\test
//就是將指定目錄下的資料匯入到resdb這個資料庫中,如果沒有則會自動建立
//匯入成功之後我們登入產看資料庫:show dbs
(2)、恢複一個集合
mongorestore -ddbname -ccollectinname E:\DB\mongo\data
例:mongorestore -h 127.0.0.1 -d test -c restesss E:\DB\mongodb\data\test\mytest.bson
// 將指定目錄下的匯出的集合mytest.bson匯入到test資料庫下的restesss集合中
// 匯入之後我們在登入產看test這個資料庫下的所有集合:db.getCollectionNames(),我們發現有匯入的集合
三、匯出匯入
1、匯出工具mongoexport
Mongodb中的mongoexport工具可以把一個collection匯出成JSON格式或CSV格式的檔案。可以通過參數指定匯出的資料項目,也可以根據指定的條件匯出資料。mongoexport具體用法如下所示:
(1)、mongoexport --help // 查看mongoexport工具使用方式
參數說明:
-h:指明資料庫宿主機的IP
-u:指明資料庫的使用者名稱
-p:指明資料庫的密碼
-d:指明資料庫的名字
-c:指明collection的名字
-f:指明要匯出那些列
-o:指明到要匯出的檔案名稱
-q:指明匯出資料的過濾條件
執行個體:test庫中存在著一個students集合:
文檔中存在著3個欄位:classid、age、name
(2)、mongoexport -d test -c students -o students.dat
命令執行完後查看,發現目錄下產生了一個students.dat的檔案
參數說明:
-d:指明使用的庫,本例中為test
-c:指明要匯出的集合,本例中為students
-o:指明要匯出的檔案名稱,本例中為students.dat
//從上面的結果可以看出,我們在匯出資料時沒有顯示指定匯出樣式,預設匯出了JSON格式的資料。如果我們需要匯出CSV格式的資料,則需要使用--csv參數,具體如下所示:
(3)、mongoexport -d test -c students --csv -f classid,name,age -o students_csv.dat
參數說明:
-csv:指明要匯出為csv格式
-f:指明需要匯出classid、name、age這3列的資料
//由上面結果可以看出,mongoexport成功地將資料根據csv格式匯出到了students_csv.dat檔案中。
2、匯入工具mongoimport
Mongodb中的mongoimport工具可以把一個特定格式檔案中的內容匯入到指定的collection中。該工具可以匯入JSON格式資料,也可以匯入CSV格式資料。具體使用如下所示:
(1)、mongoimport --help
參數說明:
-h:指明資料庫宿主機的IP
-u:指明資料庫的使用者名稱
-p:指明資料庫的密碼
-d:指明資料庫的名字
-c:指明collection的名字
-f:指明要匯入那些列
執行個體:
(2)、mongoimport -d test -c students students.dat
參數說明:
-d:指明資料庫名,本例中為test
-c:指明collection名,本例中為students
students.dat:匯入的檔案名稱
//上面示範的是匯入JSON格式的檔案中的內容,如果要匯入CSV格式檔案中的內容,則需要通過--type參數指定匯入格式,具體如下所示:
再匯入之前置出的students_csv.dat檔案
(3)、mongoimport -d test -c students --type csv --headerline --file students_csv.dat
參數說明:
-type:指明要匯入的檔案格式
-headerline:指明第一行是列名,不需要匯入
-file:指明要匯入的檔案
四、將記憶體中修改的資料刷出到磁碟
1. fsync and lock
強制重新整理所有更改到磁碟,並維護一個全域鎖。再進行拷貝資料目錄進行備份。重新整理期間影響系統效能,鎖的過程中阻塞讀。
> use admin
switched to db admin
>db.runCommand({"fsync":1,"lock":1});
{
"info" : "now locked against writes, use db.fsyncUnlock() tounlock",
"seeAlso" :
"ok" : 1
}
恢複
--repair mongod 啟動選項,mongod異常退出後,可使用repair參數啟動。修複的過程:驗證所有的資料,忽略損壞的資料,重建所有的索引。同時對資料空間做了整理。
線上修複:
> use db
switched to db db
>db.repairDatabase()
{ "ok" : 1}
>