mongodb管理與安全認證


mongodb數據管理

數據的導出、數據導入
數據導出 mongoexport [使用mongoexport -h查看參數]
數據導入 mongoimport [使用mongoimport -h查看參數]

導入導出json數據實例

mongoexport -d mydb -c user -o d:/mongdbback/user.dat --mydb是要導出的表所屬的數據庫 --user是要導出的集合名c表示collection --user.dat是導出后的文件名 mongoimport -d mydb -c user d:/mongdbback/user.dat --mydb 數據導入的目標數據庫 --user 數據導入的目標集合 --d:/mongdbback/user.dat 待導入的數據文件存放路徑

 

導入導出csv數據

CSV格式良好,主流數據庫都支持導出為csv的格式,所以這種格式非常利於異構數據遷移.

mongoexport -d mydb -c user --csv -f  id,name,age  -o d:/mongodbback/user_csv.data --導出csv格式 --f 指定要導出的列的名字 mongoimport -d mydb -c user --type csv --headerline --file d:/mongodbback/user_csv.data; --mydb 數據導入的目標數據庫 --user 數據導入的目標集合 --type表示導入的文件格式 --headerline 表明不導入第一行,因為第一行是列名 --d:/mongodbback/user_cvs.data 待導入的數據文件存放路徑

 

數據備份、數據恢復
數據備份mongodump
數據恢復mongorestore

備份實例 mongodump -d mydb    //備份mydb數據庫
此時會在當前目錄下默認創建一個dump目錄,用於存放備份出來的文件,也可以指定備份存放的目錄使用-o mongodump -d mydb -o d:/databack/ 恢復實例 mongorestore -d mydb d:/databack/mydb/ 數據備份是為了發生災難事件后可以恢復數據,但是不幸總是存在的,即沒有數據備份,好在MongoDB內建了修復功能.可以嘗試修復受損文件,如果Mongdb不正常關閉,啟動服務時會看到一堆警告信息. 修復所有數據最簡單的方法就是在mongod啟動時加上--repaire參數. 修復單個數據庫可以再mongodb的shell里邊執行repaireDatabase命令,如 >use test switched to db test >db.repaireDatabase(); {“ok” : 1}

 

克隆collection

克隆collection是將一組數據從一個數據源拷貝到多個數據源的技術,是將一份數據發布到多個存儲站點上的有效方式.

遠程克隆 例如,將192.168.1.32上test下的user集合克隆到本地 db.runCommand({cloneCollection:”test.user”, from:”192.168.1.32:27017”}); 本地克隆 由於mongoDB沒有提供本地克隆collection的命令或方法,所以需要寫一個循環插入的方案來完成這項工作. 例如,將user集合中的數據克隆一份到taruser中. > db.user.find().forEach( function(x){ db.taruser.insert(x); } ); > db.taruser.find();

 

復制數據庫

使用copyDatabase(fromdb,todb,fromhost)命令來實現復制數據庫

遠程復制數據庫 > db.copyDatabase("from_db1","to_db2","192.163.1.167"); 本地復制數據庫 > db.copyDatabase("to_db1","to_db2","localhost");

 

刷新磁盤

在mongoDB中使用”db.runCommand({fsync:1})”命令將內存中尚未寫入磁盤的信息寫入磁盤,並鎖住對數據庫更新的操作,但讀擦做可以繼續.

 

數據壓縮

repairDatabase命令是MongoDB內置的一個方法,調用這個方法MongoDB會掃描數據庫中的所有數據,並將通過導入/導出來重新整理數據,整理磁盤碎片

mongoDB中可以使用db.collection.storageSize()和db.collection.totalSize()命令來搜集壓縮命令執行前后集合所占用磁盤空間情況

> db.user.storageSize(); 8192
> db.user.totalSize(); 16384
> db.repairDatabase(); { "ok" : 1 } > db.user.storageSize(); 8035
> db.user.totalSize(); 9384

捕獲異常

MongoDB的寫是異步的,返回給客戶端成功但寫不一定成功,db.getLastError命令有2個功能,即當MongoDB在寫操作時,默認不會等數據寫完后才返回,這是可以通過這個命令來保證寫入是否是成功的.

 

查看活動進程

> db.currentOp(); 字段說明: opid:操作進程號,可以使用db.killop(opid) op:操作類型(查詢、更新等) ns:命名空間,指操作的是哪個對象 query:如果操作類型是查詢的話,將顯示具體的查詢內容 inLock:指名鎖定的類型.-1代表讀鎖,0代表無鎖.1代表寫鎖.

 

用戶安全和認證

 

限制特定IP地址訪問

這樣可以避免來自公網上的惡意攻擊.

MongDB可以指定對外服務的綁定,默認設置為空,即綁定在本機所有可用IP上,對於商業系統,出於安全考慮,可以綁定內網,減少外網訪問避免攻擊. 只需要啟動時加bind_ip即可. >mongod --bind_ip 169.254.180.132    //啟動mongodb時綁定ip169.254.180.132
此時客戶端想訪問169.254.180.132上的服務器,就需要顯示地指定連接的IP地址是169.254.180.132. eg. >mongo 169.254.180.132

 

 

設置監聽端口

MongoDB默認的監聽端口是27017,為了安全,一般都會修改這個監聽端口.

eg.    >mongod --bind_ip 169.254.180.132 --port 9888    //啟動mongodb時綁定ip 並修改端口
同理.客戶端連接時需要指定ip跟端口 eg. >mongo 169.254.180.132:9888

 

設置登錄用戶名和口令

mongodb默認是沒有用戶名和口令的,啟動后,可以直接用mongoDB連接,並且對所有的庫具有root權限,為了安全,必須給其設置用戶名和口令.

只需要再啟動的時候,指定auth參數.就可以阻止客戶端的訪問和連接,如下

eg.>mongod -auth --dbpath=../data --logpath=../logs/mongodb.logs

想要登錄驗證模塊生效,必須在admin庫中添加一個用戶,同時要指定auth參數.

D:\program files\mongo\bin>mongo MongoDB shell version: 1.8.1 connecting to: test > use admin switched to db admin > db.addUser("root","root123"); { "user" : "root", "readOnly" : false, "pwd" : "81c5bca573e01b632d18a459c6cec418" } > db.auth("root","root123"); 1
> 此時建立了系統root用戶.

也可以對某個特定的數據庫設置用戶,這樣權限的細粒度划分,也方便進行用戶管理.

注意:建立指定權限的用戶只能用系統用戶來操作.

為mydb創建一個用戶名為mydbusr口令為123的用戶

D:\program files\mongo\bin>mongo -uroot -proot123 localhost:27017/admin MongoDB shell version: 1.8.1 connecting to: localhost:27017/admin > show dbs; admin 0.03125GB local (empty) test (empty) > use mydb; switched to db mydb > db; mydb > db.addUser("mydbusr","123"); { "user" : "mydbusr", "readOnly" : false, "pwd" : "4dbfed60224bbcd7eccbd2da993a8029" }system > show tables; system.indexes .users > db.system.users.find(); { "_id" : ObjectId("50f6acdd22bc514e46426dda"), "user" : "mydbusr", "readOnly" : false, 60224bbcd7eccbd2da993a8029" }
> db.auth("mydbusr","123"); 1
>

 

轉載請注明出處:[http://www.cnblogs.com/dennisit/archive/2013/02/22/2922906.html]

在線交談


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM