5.非關係型資料庫(Nosql)之mongodb:建立集合,備份與匯入匯出, 資料還原,匯入匯出
1固定集合
固定集合值得是事先建立而且大小固定的集合
2固定集合的特徵:固定集合很像環形佇列,如果空間不足,最早文件就會被刪除,為新的文件騰出空間。一般來說,固定集合適用於任何想要自動淘汰過期屬性的場景,沒有太多的操作限制。
3建立固定集合使用命令:
db.createCollection(“collectionName”,{capped:true,size:100000,max:100});
size:指定集合大小,單位為KB,max指定文件的數量
當指定文件數量上限時,必須同時指定大小。淘汰機制只有在容量還沒有滿時才會依據文件數量來工作。要是容量滿了,淘汰機制依據容量來工作。
4建立一個集合:
>db.createCollection("cap1",{capped:true,size:1000,max:100});
{ "ok" : 1 }
>
5插入資料
> for(var i=1;i<=100;i++){
...db.cap1.insert({name:"dongxue",age:i});
... }
WriteResult({ "nInserted" : 1 })
> db.cap1.find().count();
53(大小之所以是53是因為大小超過了1000)
6固定集合的應用場景:聊天記錄,日誌資訊
淘汰機制:當滿足size指定集合大小,不能再繼續往固定集合中加資料。
固定集合的容量優先
當文件達到100條時,再新增的時候會替換先前的
7備份與匯入匯出。
MongoDB提供了備份和回覆的功能,分別是MongoDB
備份資料使用下面的命令:
mongodump –h dbhost –d dbname –o dbdirectory
-h:MonDB所在伺服器地址,例如:127.0.0.1,當然也可以指定埠號:127.0.0.1:27017,當然該目錄需要提前建立,在備份完成後,系統自動在dump目錄下建立一個beifeng目錄,這個目錄裡面存放該資料庫例項的備份資料。
mongodump -h localhost:27017 -d toto -o f:/beifeng
-h:用來指定要輸出的資料庫所在的ip地址和埠號
-d:指定要備份的資料庫
-o:表示要備份到的檔案目錄
執行後的效果圖:
7另外啟動一個mongodb的客戶端,目的是將資料庫中toto資料庫刪掉
C:\Users\to-to>mongo MongoDB shell version: 2.6.4 connecting to: test > use toto; switched to db toto > db.help(); DB methods: db.adminCommand(nameOrDocument) - switches to 'admin' db, and runs command [ just calls db.r unCommand(...) ] db.auth(username, password) db.cloneDatabase(fromhost) db.commandHelp(name) returns the help for the command db.copyDatabase(fromdb, todb, fromhost) db.createCollection(name, { size : ..., capped : ..., max : ... } ) db.createUser(userDocument) db.currentOp() displays currently executing operations in the db db.dropDatabase() db.eval(func, args) run code server-side db.fsyncLock() flush data to disk and lock server for backups db.fsyncUnlock() unlocks server following a db.fsyncLock() db.getCollection(cname) same as db['cname'] or db.cname db.getCollectionNames() db.getLastError() - just returns the err msg string db.getLastErrorObj() - return full status object db.getMongo() get the server connection object db.getMongo().setSlaveOk() allow queries on a replication slave server db.getName() db.getPrevError() db.getProfilingLevel() - deprecated db.getProfilingStatus() - returns if profiling is on and slow threshold db.getReplicationInfo() db.getSiblingDB(name) get the db at the same server as this one db.getWriteConcern() - returns the write concern used for any operations on this db, inherit ed from server object if set db.hostInfo() get details about the server's host db.isMaster() check replica primary status db.killOp(opid) kills the current operation in the db db.listCommands() lists all the db commands db.loadServerScripts() loads all the scripts in db.system.js db.logout() db.printCollectionStats() db.printReplicationInfo() db.printShardingStatus() db.printSlaveReplicationInfo() db.dropUser(username) db.repairDatabase() db.resetError() db.runCommand(cmdObj) run a database command.if cmdObj is a string, turns it into { cmdObj : 1 } db.serverStatus() db.setProfilingLevel(level,<slowms>) 0=off 1=slow 2=all db.setWriteConcern( <write concern doc> ) - sets the write concern for writes to the db db.unsetWriteConcern( <write concern doc> ) - unsets the write concern for writes to the db db.setVerboseShell(flag) display extra information in shell output db.shutdownServer() db.stats() db.version() current version of the server > db.dropDatabase(); { "dropped" : "toto", "ok" : 1 } > |
8資料還原
mongorestore -h localhost:27017 -d toto -directoryperdb F:/beifeng/toto -h:MongoDB所在伺服器地址,例如:127.0.0.1,當然也可以指定埠號:127.0.0.1:27017 -d:需要備份的資料庫例項,例如toto -o:備份的資料存放位置,當然該目錄需要提前建立,在備份完成後,系統自動在dump目錄下建立一個test目錄,這個目錄裡面存放資料庫例項的備份資料。 |
C:\Users\to-to>mongorestore -h localhost:27017 -d toto -directoryperdb F:/beifeng/toto connected to: localhost:27017 2014-10-15T23:19:11.071+0800 F:/beifeng/toto\c3.bson 2014-10-15T23:19:11.071+0800going into namespace [toto.c3] 2014-10-15T23:19:14.009+0800Progress: 5740200/5400000010%(bytes) 2014-10-15T23:19:17.010+0800Progress: 10125000/5400000018%(bytes) 2014-10-15T23:19:20.010+0800Progress: 15660000/5400000029%(bytes) 2014-10-15T23:19:23.011+0800Progress: 22528800/5400000041%(bytes) 2014-10-15T23:19:26.013+0800Progress: 29586600/5400000054%(bytes) 2014-10-15T23:19:29.013+0800Progress: 36752400/5400000068%(bytes) 2014-10-15T23:19:32.000+0800Progress: 43372800/5400000080%(bytes) 2014-10-15T23:19:35.001+0800Progress: 50284800/5400000093%(bytes) 1000000 objects found 2014-10-15T23:19:36.579+0800Creating index: { key: { _id: 1 }, name: "_id_", ns: "toto.c3" } 2014-10-15T23:19:36.641+0800Creating index: { unique: true, key: { age: 1 }, name: "age_1", ns: "toto.c3" } 2014-10-15T23:19:41.440+0800 F:/beifeng/toto\cap1.bson 2014-10-15T23:19:41.440+0800going into namespace [toto.cap1] 2014-10-15T23:19:41.440+0800Created collection toto.cap1 with options: { "create" : "cap1", "cap ped" : true, "size" : 4096, "max" : 100 } 53 objects found 2014-10-15T23:19:41.440+0800Creating index: { key: { _id: 1 }, name: "_id_", ns: "toto.cap1" } 2014-10-15T23:19:41.440+0800 F:/beifeng/toto\cap2.bson 2014-10-15T23:19:41.440+0800going into namespace [toto.cap2] 2014-10-15T23:19:41.440+0800Created collection toto.cap2 with options: { "create" : "cap2", "cap ped" : true, "size" : 4096, "max" : 100 } file F:/beifeng/toto\cap2.bson empty, skipping 2014-10-15T23:19:41.456+0800Creating index: { key: { _id: 1 }, name: "_id_", ns: "toto.cap2" } C:\Users\to-to> |
9匯入匯出:
用到的應用mongoexport,mongoimport
mongoexport –h dhost –d dbname –c collectionName –o output 引數說明: -h資料庫地址 -d指明使用的庫 -c指明要匯出的集合 -o指明要匯出的檔名 dname:表示要匯出的資料庫 collectionName:表示匯出哪個集合 output:表示匯出到的位置。 |
C:\Users\to-to>mongoexport -h localhost:27017 -d toto -c c3 -o f:/beifen/c3.txt connected to: localhost:27017 exported 1000000 records C:\Users\to-to> 同樣可以資料匯出到doc中 |
資料匯入: mongoimport -h localhost:27017 -d toto -c ccc f:/beifen/c3.txt C:\Users\to-to>mongo MongoDB shell version: 2.6.4 connecting to: test > use toto switched to db toto > show tables; c3 cap1 cap2 ccc system.indexes > db.ccc.find(); { "_id" : ObjectId("543e7473256769913d467e75"), "name" : "zhangsan", "age" : 1 } { "_id" : ObjectId("543e7473256769913d467e76"), "name" : "zhangsan", "age" : 2 } { "_id" : ObjectId("543e7473256769913d467e77"), "name" : "zhangsan", "age" : 3 } { "_id" : ObjectId("543e7473256769913d467e78"), "name" : "zhangsan", "age" : 4 } { "_id" : ObjectId("543e7473256769913d467e79"), "name" : "zhangsan", "age" : 5 } { "_id" : ObjectId("543e7473256769913d467e7a"), "name" : "zhangsan", "age" : 6 } { "_id" : ObjectId("543e7473256769913d467e7b"), "name" : "zhangsan", "age" : 7 } { "_id" : ObjectId("543e7473256769913d467e7c"), "name" : "zhangsan", "age" : 8 } { "_id" : ObjectId("543e7473256769913d467e7d"), "name" : "zhangsan", "age" : 9 } { "_id" : ObjectId("543e7473256769913d467e7e"), "name" : "zhangsan", "age" : 10 } { "_id" : ObjectId("543e7473256769913d467e7f"), "name" : "zhangsan", "age" : 11 } { "_id" : ObjectId("543e7473256769913d467e80"), "name" : "zhangsan", "age" : 12 } { "_id" : ObjectId("543e7473256769913d467e81"), "name" : "zhangsan", "age" : 13 } { "_id" : ObjectId("543e7473256769913d467e82"), "name" : "zhangsan", "age" : 14 } { "_id" : ObjectId("543e7473256769913d467e83"), "name" : "zhangsan", "age" : 15 } { "_id" : ObjectId("543e7473256769913d467e84"), "name" : "zhangsan", "age" : 16 } { "_id" : ObjectId("543e7473256769913d467e85"), "name" : "zhangsan", "age" : 17 } { "_id" : ObjectId("543e7473256769913d467e86"), "name" : "zhangsan", "age" : 18 } { "_id" : ObjectId("543e7473256769913d467e87"), "name" : "zhangsan", "age" : 19 } { "_id" : ObjectId("543e7473256769913d467e88"), "name" : "zhangsan", "age" : 20 } Type "it" for more > 上面自動隱式建立了一個ccc集合。 |
9 mongodb安全認證
每個mongodb例項中的資料庫都可以有許多使用者,如果開啟了安全性檢查,只有資料庫認證使用者才能執行讀或者寫操作。在認證的上下文中,MongoDB會將普通的資料作為admin
資料庫處理。Admin資料庫中的使用者被視為超級使用者(即:管理員)
在認證之後,管理員可以讀寫所有資料庫,執行特定的管理員命令,執行listDatabase和shutdown.
在開啟安全檢查之前,一定要至少一個管理員賬號。
最少得保證有一個管理員賬號(admin 資料庫當中的使用者都是管理員)
use admin
db.addUser(“username”,”password”);
2.有了管理員賬號,就可以為其它的資料庫分配使用者。
2.1 首先要跳轉到被分配的資料庫
3.需要重新啟動mongodb服務,開啟安全檢查
4.接下來的客戶端連線mongodb,需要登入才能執行相應的操作。
C:\Users\to-to>mongo localhost:27017/admin MongoDB shell version: 2.6.4 connecting to: localhost:27017/admin > db admin |