
- 類型:編程控件大。191KB語(yǔ)言:中文 評(píng)分:6.6
- 標(biāo)簽:
mongodb數(shù)據(jù)管理
數(shù)據(jù)的導(dǎo)出、數(shù)據(jù)導(dǎo)入
數(shù)據(jù)導(dǎo)出 mongoexport [使用mongoexport -h查看參數(shù)]
數(shù)據(jù)導(dǎo)入 mongoimport [使用mongoimport -h查看參數(shù)]
導(dǎo)入導(dǎo)出json數(shù)據(jù)實(shí)例
mongoexport -d mydb -c user -o d:/mongdbback/user.dat--mydb是要導(dǎo)出的表所屬的數(shù)據(jù)庫(kù)--user是要導(dǎo)出的集合名c表示collection--user.dat是導(dǎo)出后的文件名mongoimport -d mydb -c user d:/mongdbback/user.dat--mydb 數(shù)據(jù)導(dǎo)入的目標(biāo)數(shù)據(jù)庫(kù)--user 數(shù)據(jù)導(dǎo)入的目標(biāo)集合--d:/mongdbback/user.dat 待導(dǎo)入的數(shù)據(jù)文件存放路徑
導(dǎo)入導(dǎo)出csv數(shù)據(jù)
CSV格式良好,主流數(shù)據(jù)庫(kù)都支持導(dǎo)出為csv的格式,所以這種格式非常利于異構(gòu)數(shù)據(jù)遷移.
mongoexport -d mydb -c user --csv -f id,name,age -o d:/mongodbback/user_csv.data--導(dǎo)出csv格式--f 指定要導(dǎo)出的列的名字mongoimport -d mydb -c user --type csv --headerline --file d:/mongodbback/user_csv.data;--mydb 數(shù)據(jù)導(dǎo)入的目標(biāo)數(shù)據(jù)庫(kù)--user 數(shù)據(jù)導(dǎo)入的目標(biāo)集合--type表示導(dǎo)入的文件格式--headerline 表明不導(dǎo)入第一行,因?yàn)榈谝恍惺橇忻?-d:/mongodbback/user_cvs.data 待導(dǎo)入的數(shù)據(jù)文件存放路徑
數(shù)據(jù)備份、數(shù)據(jù)恢復(fù)
數(shù)據(jù)備份mongodump
數(shù)據(jù)恢復(fù)mongorestore
備份實(shí)例mongodump -d mydb //備份mydb數(shù)據(jù)庫(kù)此時(shí)會(huì)在當(dāng)前目錄下默認(rèn)創(chuàng)建一個(gè)dump目錄,用于存放備份出來(lái)的文件,也可以指定備份存放的目錄使用-omongodump -d mydb -o d:/databack/恢復(fù)實(shí)例mongorestore -d mydb d:/databack/mydb/數(shù)據(jù)備份是為了發(fā)生災(zāi)難事件后可以恢復(fù)數(shù)據(jù),但是不幸總是存在的,即沒(méi)有數(shù)據(jù)備份,好在MongoDB內(nèi)建了修復(fù)功能.可以嘗試修復(fù)受損文件,如果Mongdb不正常關(guān)閉,啟動(dòng)服務(wù)時(shí)會(huì)看到一堆警告信息.修復(fù)所有數(shù)據(jù)最簡(jiǎn)單的方法就是在mongod啟動(dòng)時(shí)加上--repaire參數(shù).修復(fù)單個(gè)數(shù)據(jù)庫(kù)可以再mongodb的shell里邊執(zhí)行repaireDatabase命令,如>use testswitched to db test>db.repaireDatabase();{“ok” : 1}
克隆collection
克隆collection是將一組數(shù)據(jù)從一個(gè)數(shù)據(jù)源拷貝到多個(gè)數(shù)據(jù)源的技術(shù),是將一份數(shù)據(jù)發(fā)布到多個(gè)存儲(chǔ)站點(diǎn)上的有效方式.
遠(yuǎn)程克隆例如,將192.168.1.32上test下的user集合克隆到本地db.runCommand({cloneCollection:”test.user”, from:”192.168.1.32:27017”});本地克隆由于mongoDB沒(méi)有提供本地克隆collection的命令或方法,所以需要寫一個(gè)循環(huán)插入的方案來(lái)完成這項(xiàng)工作.例如,將user集合中的數(shù)據(jù)克隆一份到taruser中.> db.user.find().forEach( function(x){ db.taruser.insert(x); } );> db.taruser.find();
復(fù)制數(shù)據(jù)庫(kù)
使用copyDatabase(fromdb,todb,fromhost)命令來(lái)實(shí)現(xiàn)復(fù)制數(shù)據(jù)庫(kù)
遠(yuǎn)程復(fù)制數(shù)據(jù)庫(kù)> db.copyDatabase("from_db1","to_db2","192.163.1.167");本地復(fù)制數(shù)據(jù)庫(kù)> db.copyDatabase("to_db1","to_db2","localhost");
刷新磁盤
在mongoDB中使用”db.runCommand({fsync:1})”命令將內(nèi)存中尚未寫入磁盤的信息寫入磁盤,并鎖住對(duì)數(shù)據(jù)庫(kù)更新的操作,但讀擦做可以繼續(xù).
數(shù)據(jù)壓縮
repairDatabase命令是MongoDB內(nèi)置的一個(gè)方法,調(diào)用這個(gè)方法MongoDB會(huì)掃描數(shù)據(jù)庫(kù)中的所有數(shù)據(jù),并將通過(guò)導(dǎo)入/導(dǎo)出來(lái)重新整理數(shù)據(jù),整理磁盤碎片
mongoDB中可以使用db.collection.storageSize()和db.collection.totalSize()命令來(lái)搜集壓縮命令執(zhí)行前后集合所占用磁盤空間情況
> db.user.storageSize();8192> db.user.totalSize();16384> db.repairDatabase();{ "ok" : 1 }> db.user.storageSize();8035> db.user.totalSize();9384
捕獲異常
MongoDB的寫是異步的,返回給客戶端成功但寫不一定成功,db.getLastError命令有2個(gè)功能,即當(dāng)MongoDB在寫操作時(shí),默認(rèn)不會(huì)等數(shù)據(jù)寫完后才返回,這是可以通過(guò)這個(gè)命令來(lái)保證寫入是否是成功的.
查看活動(dòng)進(jìn)程
> db.currentOp();字段說(shuō)明:opid:操作進(jìn)程號(hào),可以使用db.killop(opid)op:操作類型(查詢、更新等)ns:命名空間,指操作的是哪個(gè)對(duì)象query:如果操作類型是查詢的話,將顯示具體的查詢內(nèi)容inLock:指名鎖定的類型.-1代表讀鎖,0代表無(wú)鎖.1代表寫鎖.
用戶安全和認(rèn)證
限制特定IP地址訪問(wèn)
這樣可以避免來(lái)自公網(wǎng)上的惡意攻擊.
MongDB可以指定對(duì)外服務(wù)的綁定,默認(rèn)設(shè)置為空,即綁定在本機(jī)所有可用IP上,對(duì)于商業(yè)系統(tǒng),出于安全考慮,可以綁定內(nèi)網(wǎng),減少外網(wǎng)訪問(wèn)避免攻擊.只需要啟動(dòng)時(shí)加bind_ip即可. >mongod --bind_ip 169.254.180.132 //啟動(dòng)mongodb時(shí)綁定ip169.254.180.132此時(shí)客戶端想訪問(wèn)169.254.180.132上的服務(wù)器,就需要顯示地指定連接的IP地址是169.254.180.132.eg. >mongo 169.254.180.132
設(shè)置監(jiān)聽端口
MongoDB默認(rèn)的監(jiān)聽端口是27017,為了安全,一般都會(huì)修改這個(gè)監(jiān)聽端口.
eg. >mongod --bind_ip 169.254.180.132 --port 9888 //啟動(dòng)mongodb時(shí)綁定ip 并修改端口同理.客戶端連接時(shí)需要指定ip跟端口eg. >mongo 169.254.180.132:9888
設(shè)置登錄用戶名和口令
mongodb默認(rèn)是沒(méi)有用戶名和口令的,啟動(dòng)后,可以直接用mongoDB連接,并且對(duì)所有的庫(kù)具有root權(quán)限,為了安全,必須給其設(shè)置用戶名和口令.
只需要再啟動(dòng)的時(shí)候,指定auth參數(shù).就可以阻止客戶端的訪問(wèn)和連接,如下
eg.>mongod -auth --dbpath=../data --logpath=../logs/mongodb.logs
想要登錄驗(yàn)證模塊生效,必須在admin庫(kù)中添加一個(gè)用戶,同時(shí)要指定auth參數(shù).
D:\program files\mongo\bin>mongoMongoDB shell version: 1.8.1connecting to: test> use adminswitched to db admin> db.addUser("root","root123");{ "user" : "root", "readOnly" : false, "pwd" : "81c5bca573e01b632d18a459c6cec418"}> db.auth("root","root123");1>此時(shí)建立了系統(tǒng)root用戶.
也可以對(duì)某個(gè)特定的數(shù)據(jù)庫(kù)設(shè)置用戶,這樣權(quán)限的細(xì)粒度劃分,也方便進(jìn)行用戶管理.
注意:建立指定權(quán)限的用戶只能用系統(tǒng)用戶來(lái)操作.
為mydb創(chuàng)建一個(gè)用戶名為mydbusr口令為123的用戶
D:\program files\mongo\bin>mongo -uroot -proot123 localhost:27017/adminMongoDB shell version: 1.8.1connecting to: localhost:27017/admin> show dbs;admin 0.03125GBlocal (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>