文章目錄
一、MongoDB數據的導入導出
1. 通用選項
導入/導出可以操作的是本地的mongodb服務器,也可以是遠程的.
所以,都有如下通用選項:
-h host 主機
--port port 端口
-u username 用戶名
-p passwd 密碼
2. mongoexport 導出json格式的文件與mongoimport導入
-d 庫名
-c 表名
-f field1,field2...列名
-q 查詢條件
-o 導出的文件名
--type csv 導出csv格式(便於和傳統數據庫交換數據)
注意:mongoexport在bin文件下與mongo同一級目錄
注意各個文件的含義
文件 | 意義 |
---|---|
bsondump.exe | 導出bsondump結構 |
mongo.exe | 客戶端 |
mongod.exe | 服務端 |
mongodump.exe | 整體數據庫導出(備份工具) |
mongoexport.exe | 導出易識別的json文檔 |
mongofiles.exe | GridFS工具,內建的分佈式文件系統 |
mongoimport.exe | 數據導入程序 |
mongorestore.exe | 數據恢復工具 |
mongos.exe | 路由器(分片時使用) |
mongostat.exe | 監視程序 |
(1)mongoexport 導出json文件步驟
所以在使用時
- (1)第一步:導出json格式
mongoexport -d shop -c goods -o goods.json
- 輸出爲json文件,導出到當前路徑下
- 內容:
(2)mongoimport導入
- (1)第一步:刪除該庫,導入文件
- 導入格式
-d 待導入的數據庫
-c 待導入的表(不存在會自己創建)
--type csv/json(默認)
--file 備份文件路徑
- (2)第二步:導入json
mongoimport -d shop -c goods --file goods.json
結果:
(3)mongoexport導出csv格式
- (1)第一步:導出csv格式(注意:需要指定field列,否則導出失敗)
不加–type csv
mongoexport -d shop -c goods -o goods.csv -f goods_id,good_name,shop_price
結果:
加–type csv
mongoexport -d shop -c goods -o goods.csv --type csv -f goods_id,good_name,shop_price
結果:
注意:導出的_id是固定存在的;一定要指定導出字段
(4)mongoimport導入csv文件
mongoimport -d test -c goods --type csv -f goods_id,goods_name --file ./goodsall.csv
3. mongodump導出二進制bson結構的數據及其索引信息
(1)mongodump導出步驟
- 第一步:先創建兩個索引(方便查看bson文件)
db.goods.ensureIndex({goods_name:1,goods_id:1})
- 第二步:導出
mongodump -d shop -c goods
注意: 會在當前文件下創建dump;默認是導出到mongo下的dump目錄
dump裏面有個庫名的文件夾,文件夾裏面會創建兩個文件
- 導出的文件放在以database(庫名)命名的目錄下
- 每個表導出2個文件,分別是bson結構的數據文件, json的索引信息
- 如果不聲明表名, 導出所有的表
索引在json文件中
bson文件中是集合的數據
4. mongorestore 導入二進制文件(恢復)
- 第一步:先刪除庫
- 第二步:導入
mongorestore -d shop -c goods --dir ./dump/shop/goods.bson
注意–dir是兩個-
結果:
二、replaction複製集
一般情況下,我們通常在機器上安裝了一個數據庫,這是我們的數據都是存在這個數據庫中的,如果有一天,因爲一些不可控因素導致數據庫宕機或者數據庫的文件丟失,此時損失就很大了。針對於這種問題,我們希望有一個數據庫集,在我們其中一個數據庫進行插入的時候,其他數據庫也能插入數據,這樣其中一臺服務器宕機了,也能夠使我們的數據正常存取。
在MongoDB中,是通過replaction複製集來實現此功能的。(不推薦使用主從複製)
1. 創建複製集的步驟(windows)
① 第一步:關閉服務 ,關掉mongo服務
創建複製集之前,把所有的mongo服務器都關掉
② 第二步:創建3個db
③ 第三步:打開三個cmd窗口作爲3個服務端
打開三個cmd窗口用來啓動服務,作爲三個服務端(3個db);
注意:不能動這三個cmd窗口
mongod --dbpath C:\MongoDB\Server\3.4\data\db1 --logpath C:\MongoDB\Server\3.4\data\logs\mongo1.log --port 27017 --replSet rs
mongod --dbpath C:\MongoDB\Server\3.4\data\db2 --logpath C:\MongoDB\Server\3.4\data\logs\mongo2.log --port 27018 --replSet rs
mongod --dbpath C:\MongoDB\Server\3.4\data\db3 --logpath C:\MongoDB\Server\3.4\data\logs\mongo3.log --port 27019 --replSet rs
注意:其中的–replSet就表示創建的數據集的名稱,必須指定相同的名稱纔可以。
同時會出現三個日誌文件
④ 第四步:配置
小知識:mongo默認27017;可以使用–port 27018指定端口
配置
在主mongo配置;再開啓一個cmd窗口,輸入mongo或者指定端口
var rsconf = {
_id:'rs',
members:[
{_id:0,host:'127.0.0.1:27017'},
{_id:1,host:'127.0.0.1:27018'},
{_id:2,host:'127.0.0.1:27019'}
]
}
並查看該rsconf
print(rsconf)
⑤ 第五步:配置初始化
rs.initiate(rsconf)
注意: 初始化後一開始show dbs可能有問題,要重新退出再進入查看數據庫,才能生效(ctrl+c)
一開始
也可以使用rs.slaveOk()解決這一問題
現在我們看到,現在登錄客戶端已經不是哪臺機器,而是rs複製集
⑥ 第六步:驗證,主機插入數據,叢機查看
主機插入數據:
- 主機插入數據
叢機查看數據:
-
進入叢機(當前cmd窗口切換端口進入)
-
叢機默認不能查看或者輸入數據;只能作爲備份的
-
使用下面的命令可以查看數據
rs.slaveOk()
-
查看數據
-
rs.slaveOk()
相當於允許叢機查看數據
replaction複製集實現成功!