mongodb安裝、鏈接,mongodb用戶管理、建立集合、數據管理、備份恢復,副本集介紹、搭建、測試,分片介紹、搭建、測試,php的mongodb擴展、mongo擴展

 

21.26 mongodb介紹
21.27 mongodb安裝
21.28 鏈接mongodb
21.29 mongodb用戶管理
21.30 mongodb建立集合、數據管理
21.31 php的mongodb擴展
21.32 php的mongo擴展
21.33 mongodb副本集介紹
21.34 mongodb副本集搭建
21.35 mongodb副本集測試
21.36 mongodb分片介紹
21.37/21.38/21.39 mongodb分片搭建
21.40 mongodb分片測試
21.41 mongodb備份恢復

擴展內容
mongodb安全設置 http://www.mongoing.com/archives/631
mongodb執行js腳本  http://www.jianshu.com/p/6bd8934bd1caphp

 

1、mongodb介紹html

官網www.mongodb.com 
C++編寫,基於分佈式的,屬於NoSQL的一種,文檔型的數據庫
在NoSQL中mongodb是最像關係型數據庫的
MongoDB 將數據存儲爲一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔相似於 JSON 對象。字段值能夠包含其餘文檔、數組及文檔數組。
由於基於分佈式,因此很容易擴展

關於JSON http://www.w3school.com.cn/json/index.asp
JSON:JavaScript 對象表示法(JavaScript Object Notation)。
JSON 是存儲和交換文本信息的語法。相似 XML。
JSON 比 XML 更小、更快,更易解析。

MongoDB和關係型數據庫對比linux

關係型數據庫數據結構nginx

MongoDB數據結構git

2、MongoDB安裝github

epel自帶的mongodb版本爲2.6,咱們須要安裝3.4版本
官方安裝文檔可參考:    https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/web

cd /etc/yum.repos.d/
vim mongodb.repo        //建立,並加入以下內容


[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc


yum list |grep mongodb     //能夠看到mongodb相關的rpm包
yum install -y mongodb-org

 

3、MongoDB鏈接sql

配置文件 :         vim /etc/mongod.confmongodb

綁定多個ip,用逗號分隔shell

systemctl start mongod //啓動服務

在本機能夠直接運行命令mongo進入到mongodb shell中
若是mongodb監聽端口並非默認的27017,則在鏈接的時候須要加--port 選項,例如

mongo --port 27018

鏈接遠程mongodb,須要加--host,例如

mongo --host  127.0.0.1

若是設置了驗證,則在鏈接的時候須要帶用戶名和密碼

mongo -uusername -ppasswd --authenticationDatabase 數據庫名     //這個和MySQL挺像

4、MongoDB用戶管理

(1)MongoDB庫管理

db.version()  //查看版本
use userdb  //若是庫存在就切換,不存在就建立
show dbs //查看庫,此時userdb並無出現,這是由於該庫是空的,尚未任何集合,只須要建立一個集合就能看到了 
db.createCollection('clo1') //建立集合clo1,在當前庫下面建立
db.dropDatabase() //刪除當前庫,要想刪除某個庫,必須切換到那個庫下
db.stats()  //查看當前庫的信息
db.serverStatus()   //查看mongodb服務器的狀態

(2)給用戶設置密碼:

use admin    //須要切換到admin庫
db.createUser( { user: "admin", customData: {description: "superuser"}, pwd: "admin123", roles: [ { role: "root", db: "admin" } ] } )                

user指定用戶,customData爲說明字段,能夠省略,pwd爲密碼,roles指定用戶的角色,db指定庫名

use admin     //切換到admin庫
db.system.users.find()  //列出全部用戶,須要切換到admin庫
show users  //查看當前庫下全部的用戶

在建立一個用戶:    db.createUser({user:"tobe",pwd:"123456",roles:[{role:"read",db:"testdb"}]})

db.dropUser('tobe') //刪除用戶

use 庫名   切換到指定庫,若是庫不存在,會建立該庫

使用用戶名和密碼登錄,還須要編輯啓動腳本:

vim /usr/lib/systemd/system/mongod.service,在OPTIONS=後面增--auth

systemctl daemon-reload
重啓服務    systemctl restart mongod


 

此時不使用用戶名密碼登錄會報錯,沒有受權

登錄後便可:

mongo --host 192.168.183.3 --port 27017 -u admin -p 'admin123' --authenticationDatabase "admin"

use db1
db.createUser( { user: "test1", pwd: "123aaa", roles: [ { role: "readWrite", db: "db1" }, {role: "read", db: "db2" } ] } )
test1用戶對db1庫讀寫,對db2庫只讀。
之因此先use db1,表示用戶在 db1 庫中建立,就必定要db1庫驗證身份,即用戶的信息跟隨隨數據庫。好比上述 test1雖然有 db2 庫的讀取權限,可是必定要先在db1庫進行身份驗證,直接訪問會提示驗證失敗。

此時驗證身份報錯,是由於test1用戶是db1中的,要到db1中才能夠

(3)MongoDB用戶角色

Read:容許用戶讀取指定數據庫
readWrite:容許用戶讀寫指定數據庫
dbAdmin:容許用戶在指定數據庫中執行管理函數,如索引建立、刪除,查看統計或訪問system.profile
userAdmin:容許用戶向system.users集合寫入,能夠找指定數據庫裏建立、刪除和管理用戶
clusterAdmin:只在admin數據庫中可用,賦予用戶全部分片和複製集相關函數的管理權限。
readAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的讀權限
readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的讀寫權限
userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的userAdmin權限
dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的dbAdmin權限。
root:只在admin數據庫中可用。超級帳號,超級權限

5、mongodb建立集合、數據管理

建立集合:

db.createCollection("mycol", { capped : true, size : 6142800, max : 10000 } )  //語法:db.createCollection(name,options)
name就是集合的名字,options可選,用來配置集合的參數,參數以下:
capped true/false         是否封頂,(可選)若是爲true,則啓用封頂集合。封頂集合是固定大小的集合,當它達到其最大大小,會自動覆蓋最先的條目。若是指定true,則也須要指定尺寸參數。
autoindexID  true/false 是否自動建立索引,(可選)若是爲true,自動建立索引_id字段的默認值是false。
size (可選)指定最大大小字節封頂集合。若是封頂若是是 true,那麼你還須要指定這個字段。單位B
max (可選)指定封頂集合容許在文件的最大數量。

db1庫有讀寫權限,db2只能讀

數據管理:

show collections //查看集合,或者使用show  tables
db.Account.insert({AccountID:1,UserName:"123",password:"123456"})  //Account爲集合,若是集合不存在,直接插入數據,則mongodb會自動建立集合
db.Account.update({AccountID:1},{"$set":{"Age":20}})         //更新,填加一個age字段
db.Account.find()   //查看全部文檔

db.Account.find({AccountID:1})   //根據條件查詢
db.Account.remove({AccountID:1})  //根據條件刪除
db.Account.drop() //刪除全部文檔,即刪除集合
db.mycol.drop()        刪除mycol
db.printCollectionStats()  // 而後查看集合狀態

6、PHP的mongodb擴展

mongodb.so

針對不一樣狀況使用mongodb.so或mongo.so

mongodb.so兩種安裝方法
方法一:
能夠到pecl官網上下載mongodb的擴展源碼包
cd /usr/local/src/
wget https://pecl.php.net/get/mongodb-1.3.0.tgz 
tar zxvf mongodb-1.3.0.tgz
cd mongodb-1.3.0
/usr/local/php-fpm/bin/phpize
./configure --with-php-config=/usr/local/php-fpm/bin/php-config
make && make install

會生成mongodb.so
vim /usr/local/php-fpm/etc/php.ini    //增長 extension = mongodb.so

/usr/local/php-fpm/bin/php -m

/etc/init.d/php-fpm restart


方法二:

cd /usr/local/src/
git clone https://github.com/mongodb/mongo-php-driver
cd mongo-php-driver
git submodule update --init
/usr/local/php-fpm/bin/phpize
./configure --with-php-config=/usr/local/php-fpm/bin/php-config
make && make install
vim /usr/local/php-fpm/etc/php.ini     //增長 extension = mongodb.so
/usr/local/php-fpm/bin/php -m

/etc/init.d/php-fpm restart

7、php的mongo擴展

mongo.so

到pecl官網上下載mongo的擴展源碼包
cd /usr/local/src/
wget https://pecl.php.net/get/mongo-1.6.16.tgz 
tar zxvf mongo-1.6.16.tgz
cd mongodb-1.6.16
/usr/local/php-fpm/bin/phpize
./configure --with-php-config=/usr/local/php-fpm/bin/php-config
make && make install
vim /usr/local/php-fpm/etc/php.ini //增長 extension = mongo.so
/usr/local/php-fpm/bin/php -m

/etc/init.d/php-fpm restart

測試mongo擴展,若是隻安裝了mongodb,沒有安裝mongo,使用以下代碼會報錯
參考文檔 https://docs.mongodb.com/ecosystem/drivers/php/
http://www.runoob.com/mongodb/mongodb-php.html

cd /data/wwwroot/default/   根據nginx配置文件,到指定目錄建立

 vim mongo.php

<?php
$m = new MongoClient(); // 鏈接
$db = $m->test; // 獲取名稱爲 "test" 的數據庫
$collection = $db->createCollection("runoob");
echo "集合建立成功";
?>
curl localhost/mongo.php

進入mongodb數據庫中查看是否建立test庫和runoob集合

mongo --host 192.168.183.3 --port 27017 -u admin -p 'admin123' --authenticationDatabase "admin"

vim /usr/lib/systemd/system/mongod.service
 Environment="OPTIONS=-f /etc/mongod.conf"    把以前設置的--auth去掉,不在使用用戶名和密碼認證
 curl localhost/mongo.php
 此時查看是已經建立成功的

8、MongoDB架構-副本集(副本集是集羣)

早期版本使用master-slave,一主一從或一主多從和MySQL相似,但slave在此架構中爲只讀,當主庫宕機後,從庫不能自動切換爲主
目前已經淘汰master-slave模式,改成副本集,這種模式下有一個主(primary),和多個從(secondary),只讀。支持給它們設置權重,當主宕掉後,權重最高的從切換爲主
在此架構中還能夠創建一個仲裁(arbiter)的角色,它只負責裁決,而不存儲數據
再此架構中讀寫數據都是在主上,要想實現負載均衡的目的須要手動指定讀庫的目標server

副本集架構圖

9、MongoDB副本集搭建


三臺機器,都須要安裝mongodb: 192.168.183.3(primary)   192.168.183.33(secondary) 192.168.183.133(secondary)

把/etc/yum.repos.d/目錄下的mongodb.repo傳到另外兩臺機器或在另外兩臺機器上建立,複製mongodb.repo內容:
scp mongodb.repo 192.168.183.133:/etc/yum.repos.d/
yum install -y mongodb-org


編輯三臺機器的配置文件,須要去掉配置文件中的--auth用戶認證(/usr/lib/systemd/system/mongod.service):
vim /etc/mongod.conf

bindIp: 127.0.0.1,192.168.183.3   注意bindIp後面要定義的本機ip,逗號分隔
更改或增長:
replication:        //把此行前面的#刪除
##定義oplog大小,相似Mysql主從的binlog
  oplogSizeMB: 20//前面有兩個空格
##定義副本集名稱
  replSetName: tobe//前面有兩個空格
  
systemctl restart mongod

注意防火牆及iptables規則

鏈接主,在主上運行命令mongo

想要在哪臺機器上作PRIMARY,就在哪臺機器下作一下操做,一開始設置完成後三個都會是SECONDARY,可是系統會自動設置PRIMARY

use admin
config={_id:"tobe",members:[{_id:0,host:"192.168.183.3:27017"},{_id:1,host:"192.168.183.33:27017"},{_id:2,host:"192.168.183.133:27017"}]}        配置副本集,id爲副本集名稱,members指定成員

rs.initiate(config)
rs.status() //查看狀態

若是兩個從上的狀態爲"stateStr" : "STARTUP", 則須要進行以下操做
var config={_id:"tobe",members:[{_id:0,host:"192.168.183.3:27017"},{_id:1,host:"192.168.183.33:27017"},{_id:2,host:"192.168.183.133:27017"}]}

rs.reconfig(config)
此時再次查看rs.status()會發現從的狀態變爲SECONDARY

10、MongoDB副本集測試

主上建庫,建集合

use mydb    建庫
db.acc.insert({AccountID:1,UserName:"123",password:"123456"})   建集合
show dbs
use mydb
show tables

從上查看

show dbs

若出現下圖錯誤須要執行:

rs.slaveOk()

副本集更改權重模擬主宕機

執行rs.config()能夠查看三臺機器的權重(priority),默認三臺機器權重都爲1,若是任何一個權重設置爲比其餘的高,則該臺機器立刻切換爲primary角色,因此咱們預設三臺機器的權重分別爲:183.3->3,183.33->2,183.133->1

主上執行 iptables -I INPUT -p tcp --dport 27017 -j DROP

此時第一臺應該爲PRIMARY的機器已經報錯了,而且第二臺機器變爲了PRIMARY

主上:    iptables -D INPUT -p tcp --dport 27017 -j DROP

清除規則後,第一臺機器能夠鏈接mongo,可是PRIMARY不會自動回到第一臺機器上,除非是有權重的狀況下
如下操做到新的PRIMARY機器下操做:
更改權重:
權重越高,優先級越高

cfg=rs.conf() 設置變量
cfg.members[0].priority = 3
cfg.members[1].priority = 2
cfg.members[2].priority = 1
rs.reconfig(cfg)        執行此操做設置生效

這樣的話,第二個節點將會成爲候選主節點。

此時第一臺機器切換爲PRIMARY

11、MongoDB分片介紹

分片小的單元就是副本集,分片是由多個副本集組成的
分片就是將數據庫進行拆分,將大型集合分隔到不一樣服務器上。好比,原本100G的數據,能夠分割成10份存儲到10臺服務器上,這樣每臺機器只有10G的數據。
經過一個mongos的進程(路由)實現分片後的數據存儲與訪問,也就是說mongos是整個分片架構的核心,對客戶端而言是不知道是否有分片的,客戶端只須要把讀寫操做轉達給mongos便可。
雖然分片會把數據分隔到不少臺服務器上,可是每個節點都是須要有一個備用角色的,這樣能保證數據的高可用。
當系統須要更多空間或者資源的時候,分片可讓咱們按需方便擴展,只須要把mongodb服務的機器加入到分片集羣中便可

MongoDB分片架構圖

config servers  配置服務器,也須要由副本集組成

MongoDB分片相關概念

mongos: 數據庫集羣請求的入口,,能夠設置多個,全部的請求都經過mongos進行協調,不須要在應用程序添加一個路由選擇器,mongos本身就是一個請求分發中心,它負責把對應的數據請求請求轉發到對應的shard服務器上。在生產環境一般有多mongos做爲請求的入口,防止其中一個掛掉全部的mongodb請求都沒有辦法操做。

config server: 配置服務器,存儲全部數據庫元信息(路由、分片)的配置。mongos自己沒有物理存儲分片服務器和數據路由信息,只是緩存在內存裏,配置服務器則實際存儲這些數據。mongos第一次啓動或者關掉重啓就會從 config server 加載配置信息,之後若是配置服務器信息變化會通知到全部的 mongos 更新本身的狀態,這樣 mongos 就能繼續準確路由。在生產環境一般有多個 config server 配置服務器,由於它存儲了分片路由的元數據,防止數據丟失!

shard: 存儲了一個集合部分數據的MongoDB實例,每一個分片是單獨的mongodb服務或者副本集,在生產環境中,全部的分片都應該是副本集。

12、mongodb分片搭建

分片搭建 -服務器規劃

三臺機器:
192.168.183.3
192.168.183.33
192.168.183.133
三臺機器 A B C
A搭建:mongos、config server、副本集1主節點、副本集2仲裁、副本集3從節點
B搭建:mongos、config server、副本集1從節點、副本集2主節點、副本集3仲裁
C搭建:mongos、config server、副本集1仲裁、副本集2從節點、副本集3主節點
端口分配:mongos 20000、config 21000、副本集1 2700一、副本集2 2700二、副本集3 27003
三臺機器所有關閉firewalld服務和selinux,或者增長對應端口的規則

分片搭建 – 建立目錄
分別在三臺機器上建立各個角色所須要的目錄

mkdir -p /data/mongodb/mongos/log
mkdir -p /data/mongodb/config/{data,log}
mkdir -p /data/mongodb/shard1/{data,log}
mkdir -p /data/mongodb/shard2/{data,log}
mkdir -p /data/mongodb/shard3/{data,log}

分片搭建–config server配置

mongodb3.4版本之後須要對config server建立副本集
添加配置文件(三臺機器都操做)
mkdir /etc/mongod/   建立配置文件目錄
vim /etc/mongod/config.conf //加入以下內容,config server配置文件

pidfilepath = /var/run/mongodb/configsrv.pid
dbpath = /data/mongodb/config/data
logpath = /data/mongodb/config/log/congigsrv.log
logappend = true
bind_ip = 192.168.183.3         #0.0.0.0所有監聽,三臺機器注意ip不一樣,寫每臺機器的ip
port = 21000
fork = true                #進程相關的配置
configsvr = true #declare this is a config db of a cluster;
replSet=configs #副本集名稱
maxConns=20000 #設置最大鏈接數

啓動三臺機器的config server

mongod -f /etc/mongod/config.conf      //啓動config server,三臺機器都要操做

登陸任意一臺機器的21000端口,初始化副本集

mongo --host 192.168.183.3 --port 21000

config = { _id: "configs", members: [ {_id : 0, host : "192.168.183.3:21000"},{_id : 1, host : "192.168.183.33:21000"},{_id : 2, host : "192.168.183.133:21000"}] }

rs.initiate(config)

rs.status()   能夠查看三臺機器的狀態

分片搭建–分片配置

添加配置文件(分別在三臺機器都操做,每臺機器都須要:shard1.conf,shard2.conf,shard3.conf)

日誌路徑:/data/mongodb/shard1/log

vim /etc/mongod/shard1.conf    //加入以下內容

pidfilepath = /var/run/mongodb/shard1.pid
dbpath = /data/mongodb/shard1/data
logpath = /data/mongodb/shard1/log/shard1.log
logappend = true
bind_ip = 0.0.0.0            #此處綁定的ip最好更改成本機的ip,目的是爲了更加安全
port = 27001
fork = true
httpinterface=true #打開web監控
rest=true
replSet=shard1 #副本集名稱
shardsvr = true #declare this is a shard db of a cluster;
maxConns=20000 #設置最大鏈接數

 vim /etc/mongod/shard2.conf     //加入以下內容

pidfilepath = /var/run/mongodb/shard2.pid
dbpath = /data/mongodb/shard2/data
logpath = /data/mongodb/shard2/log/shard2.log
logappend = true
bind_ip = 0.0.0.0
port = 27002
fork = true
httpinterface=true #打開web監控
rest=true
replSet=shard2 #副本集名稱
shardsvr = true #declare this is a shard db of a cluster;
maxConns=20000 #設置最大鏈接數

vim /etc/mongod/shard3.conf //加入以下內容

pidfilepath = /var/run/mongodb/shard3.pid
dbpath = /data/mongodb/shard3/data
logpath = /data/mongodb/shard3/log/shard3.log
logappend = true
bind_ip = 0.0.0.0
port = 27003
fork = true
httpinterface=true #打開web監控
rest=true
replSet=shard3 #副本集名稱
shardsvr = true #declare this is a shard db of a cluster;
maxConns=20000 #設置最大鏈接數

啓動shard1:

mongod -f /etc/mongod/shard1.conf //三臺機器都要操做

搭建shard1的副本集

做爲仲裁的節點沒法當作登陸入口
登陸3或者33任何一臺機器的27001端口初始化副本集,133之因此不行,是由於shard1咱們把133這臺機器的27001端口做爲了仲裁節點

001機器上:

mongo --port 27001
use admin
config = { _id: "shard1", members: [ {_id : 0, host : "192.168.183.3:27001"}, {_id: 1,host : "192.168.183.33:27001"},{_id : 2, host : "192.168.183.133:27001",arbiterOnly:true}] }
rs.initiate(config)

啓動shard2

mongod -f /etc/mongod/shard2.conf     //三臺機器都要操做

登陸33或者133任何一臺機器的27002端口初始化副本集,3之因此不行,是由於shard2咱們把3這臺機器的27002端口做爲了仲裁節點

mongo --port 27002
use admin
config = { _id: "shard2", members: [ {_id : 0, host : "192.168.183.3:27002" ,arbiterOnly:true},{_id : 1, host : "192.168.183.33:27002"},{_id : 2, host : "192.168.183.133:27002"}] }
rs.initiate(config)

002機器上:

啓動shard3

mongod -f /etc/mongod/shard3.conf     //三臺機器都要操做

登陸3或者133任何一臺機器的27003端口初始化副本集,33之因此不行,是由於shard3咱們把33這臺機器的27003端口做爲了仲裁節點

003機器上:

mongo --port 27003
use admin
config = { _id: "shard3", members: [ {_id : 0, host : "192.168.183.3:27003"},  {_id : 1, host : "192.168.183.33:27003", arbiterOnly:true}, {_id : 2, host : "192.168.183.133:27003"}] }
rs.initiate(config)

rs.status()  查看狀態

分片搭建–配置路由服務器mongos

添加配置文件(三臺機器都操做)

日誌路徑:    /data/mongodb/mongos/log  

vim /etc/mongod/mongos.conf     //加入以下內容

pidfilepath = /var/run/mongodb/mongos.pid
logpath = /data/mongodb/mongos/log/mongos.log
logappend = true
bind_ip = 0.0.0.0
port = 20000
fork = true
configdb = configs/192.168.183.3:21000, 192.168.183.33:21000, 192.168.183.133:21000 #監聽的配置服務器,只能有1個或者3個,configs爲配置服務器的副本集名字
maxConns=20000 #設置最大鏈接數


啓動mongos服務,注意命令,前面都是mongod,這裏是mongos
 mongos -f /etc/mongod/mongos.conf

啓動時出現:failed: Name or service not known,不算錯誤。 日誌中關注error相關的信息便可

分片搭建–啓用分片

登陸任何一臺20000端口

mongo --port 20000

 把全部分片和路由器串聯,注意ip之間不要有空格

sh.addShard("shard1/192.168.183.3:27001,192.168.183.33:27001,192.168.183.133:27001")
sh.addShard("shard2/192.168.183.3:27002,192.168.183.33:27002,192.168.183.133:27002")
sh.addShard("shard3/192.168.183.3:27003,192.168.183.33:27003,192.168.183.133:27003")

查看集羣狀態

sh.status()

rs.status()查看副本集
sh.status()查看分片

分片搭建–測試

登陸任何一臺20000端口

mongo --port 20000 

use admin
db.runCommand({ enablesharding : "testdb"}) 或者 sh.enableSharding("testdb")     //指定要分片的數據庫,若是不存在,會自動建立
db.runCommand( { shardcollection : "testdb.table1",key : {id: 1} } ) 或者  sh.shardCollection("testdb.table1",{"id":1} )     //#指定數據庫裏須要分片的集合和片鍵

use testdb
for (var i = 1; i <= 10000; i++) db.table1.save({id:i,"test1":"testval1"})    //插入測試數據

use testdb

 sh.status()  或者 db.table1.stats()    //查看table1狀態

十3、MongoDB備份恢復

(1)MongoDB備份

若是使用了分片,要到分片的端口中去備份

-d 指定庫,-c指定集合


備份指定庫,對應庫中有幾個集合,就會生成幾個集合的文件,它會在/tmp/mongobak 目錄下面生成一個testdb的目錄

mongodump --host 127.0.0.1 --port 20000  -d testdb -o /tmp/mongobak

備份全部庫

mongodump --host 127.0.0.1 --port 20000 -o /tmp/mongobak/alldatabase

指定備份集合,它依然會生成testdb目錄,再在這目錄下面生成兩個文件

mongodump --host 127.0.0.1 --port 20000 -d testdb -c table1 -o /tmp/mongobak3/

導出集合爲json文件

mongoexport --host 127.0.0.1 --port 20000 -d testdb -c table1 -o /tmp/table1.json

(2)MongoDB恢復

先把testdb庫刪除

恢復全部庫

mongorestore -h 127.0.0.1 --port 20000 --drop /tmp/mongobak/alldatabase/        //其中dir是備份全部庫的目錄名字,其中--drop可選,意思是當恢復以前先把以前的數據刪除,不建議使用

恢復指定庫

mongorestore -h 127.0.0.1 --port 20000 -d testdb --drop /tmp/mongobak/alldatabase/testdb/            //-d跟要恢復的庫名字,dir就是該庫備份時所在的目錄

恢復集合

mongorestore -d mydb -c table1 /tmp/mongobak/alldatabase/testdb/table1.bson     // -c後面跟要恢復的集合名字,後面的路徑是備份testdb庫時生成文件所在路徑,這裏是一個bson文件的路徑

導入集合

mongoimport -d testdb -c table1 --file /tmp/mongobak/alldatabase/testdb/table1.json
相關文章
相關標籤/搜索