1. 程式人生 > >5.非關係型資料庫(Nosql)之mongodb:建立集合,備份與匯入匯出, 資料還原,匯入匯出

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.exemongorestore.exe檔案。

備份資料使用下面的命令:

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資料庫中的使用者被視為超級使用者(即:管理員)

在認證之後,管理員可以讀寫所有資料庫,執行特定的管理員命令,執行listDatabaseshutdown.

在開啟安全檢查之前,一定要至少一個管理員賬號。

  1. 最少得保證有一個管理員賬號(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