转载: 8天学通MongoDB——第七天 运维技术
這一篇我們以管理員的視角來看MongoDB,作為一名管理員,我們經常接觸到的主要有4個方面:
1.? 安裝部署
2.? 狀態(tài)監(jiān)控
3.? 安全認證
4.? 備份和恢復,
下面我們就一點一點的講解。
?
一:安裝部署
? ? ? ? 我之前的文章都是采用console程序來承載,不過在生產環(huán)境中這并不是最佳實踐,誰也不愿意在機器重啟后滿地找牙似找mongodb,
在mongodb里面提供了一個叫做“服務寄宿”的模式,我想如果大家對wcf比較熟悉的話很容易聽懂。好了,我們實踐一下,這里我開一下D盤
里面的mongodb。
?
這里要注意的有兩點:
? ?<1> logpath: 當我們使用服務寄宿的時候,用眼睛都能想明白肯定不會用console來承載日志信息了。
? ?<2> install: ? 開啟安裝服務寄宿,很happy啊,把管理員的手工操作降低到最小,感謝mongodb。
?
好了,console程序叫我看log日志,那我就看看,發(fā)現(xiàn)mongodb已經提示我們如何開啟mongodb,接著我照做就是了。
?
還要提醒大家一點的就是,這些命令參數(shù)很多很復雜也就很容易忘,不過沒關系,數(shù)據(jù)庫給我們提供了一個help方法,我們可以
拿mongod和mongo說事。
mongod:
?
mongo:
?
二:狀態(tài)監(jiān)控
? ? ?監(jiān)控可以讓我們實時的了解數(shù)據(jù)庫的健康狀況以及性能調優(yōu),在mongodb里面給我們提供了三種方式。
1:http監(jiān)視器
? ? ?這個我在先前的文章中也提到了,這里就不贅述了。
2:serverStatus()
? ? 這個函數(shù)可以獲取到mongodb的服務器統(tǒng)計信息,其中包括 :全局鎖,索引,用戶操作行為等等這些統(tǒng)計信息,對管理員來說非常
? ? 重要,具體的參數(shù)含義可以參考園友:http://www.cnblogs.com/xuegang/archive/2011/10/13/2210339.html
? ? 這里還是截個圖混個眼熟。
?
3:mongostat
? ? ? 前面那些統(tǒng)計信息再牛X,那也是靜態(tài)統(tǒng)計,不能讓我觀看實時數(shù)據(jù)變化,還好,mongodb里面提供了這里要說的mongodstat
監(jiān)視器,這玩意會每秒刷新,在實際生產環(huán)境中大有用處,還是截張圖,很有意思,是不是感覺大軍壓境了。
?
三:?安全認證
? ? ?作為數(shù)據(jù)庫軟件,我們肯定不想誰都可以訪問,為了確保數(shù)據(jù)的安全,mongodb也會像其他的數(shù)據(jù)庫軟件一樣可以采用用戶
驗證的方法,那么該怎么做呢?其實很簡單,mongodb提供了addUser方法,還有一個注意點就是如果在admin數(shù)據(jù)庫中添加
將會被視為“超級管理員”。
上面的admin用戶將會被視為超級管理員,“jack”用戶追加的第三個參數(shù)表示是否是“只讀用戶”,好了,該添加的我們都添加了,
我們第一次登錄時不是采用驗證模式,現(xiàn)在我們使用--reinstall重啟服務并以--auth驗證模式登錄。
好了,我們進入test集合翻翻數(shù)據(jù)看看情況,我們發(fā)現(xiàn)jack用戶始終都是沒有寫入的權限,不管是授權或者未授權。
?
四:備份和恢復
? ? ? 這玩意的重要性我想都不需要我來說了吧,這玩意要是搞不好會死人的,mongodb里面常用的手段有3種。
1: 直接copy
? ? ? ?這個算是最簡單的了,不過要注意一點,在服務器運行的情況下直接copy是很有風險的,可能copy出來時,數(shù)據(jù)已經遭到
? ? ? ? 破壞,唯一能保證的就是要暫時關閉下服務器,copy完后重開。
2:mongodump和mongorestore
? ? ? 這個是mongo給我們提供的內置工具,很好用,能保證在不關閉服務器的情況下copy數(shù)據(jù)。
為了操作方便,我們先刪除授權用戶。
?
好了,我們轉入正題,這里我先在D盤建立一個backup文件夾用于存放test數(shù)據(jù)庫。
快看,數(shù)據(jù)已經備份過來了,太爽了,現(xiàn)在我們用mongorestore恢復過去,記住啊,它是不用關閉機器的。
提一點的就是 drop選項,這里是說我將test數(shù)據(jù)恢復之前先刪除原有數(shù)據(jù)庫里面的數(shù)據(jù),同樣大家可以通過help查看。
?
3:主從復制
? ? ? ?這個我在上上篇有所介紹,這里也不贅述了。
?
? ? 其實上面的1,2兩點都不能保證獲取數(shù)據(jù)的實時性,因為我們在備份的時候可能還有數(shù)據(jù)灌在內存中不出來,那么我們
想說能不能把數(shù)據(jù)暴力的刷到硬盤上,當然是可以的,mongodb給我們提供了fsync+lock機制就能滿足我們提的需求。
fsync+lock首先會把緩沖區(qū)數(shù)據(jù)暴力刷入硬盤,然后給數(shù)據(jù)庫一個寫入鎖,其他實例的寫入操作全部被阻塞,直到fsync
+lock釋放鎖為止。
這里就不測試了。
?加鎖: ? ?db.runCommand({"fsync":1,"lock":1})
?釋放鎖: db.$cmd.unlock.findOne()
? ? ? ? ? ? ? ? ? ?
分類:?MongoDB 好文要頂?關注我?收藏該文?? 一線碼農關注 - 56
粉絲 - 6487 榮譽:推薦博客 +加關注 32 0 (請您對文章做出評價) ??上一篇:8天學通MongoDB——第六天 分片技術
??下一篇:8天學通MongoDB——第八天 驅動實踐
posted @?2012-03-08 01:22?一線碼農?閱讀(39236) 評論(14)?編輯?收藏
評論列表 #1樓2012-03-08 17:16?三人行,必有我?guī)? 學習~~,謝謝分享 支持(0)反對(0) #2樓2012-03-08 17:30?syx278250658? 等博主寫 在一起看吧 希望樓主在最后一篇添加個這一系列文章索引,方便閱讀,謝謝。 支持(0)反對(0) #3樓[樓主]?2012-03-08 17:31?一線碼農? @?三人行,必有我?guī)?br /> 謝謝支持 支持(0)反對(0) #4樓[樓主]?2012-03-08 17:34?一線碼農? @?syx278250658
不搞索引的原因是這些文章都是有類目的,比如這個系列的分類是Mongodb,在“綠色通道”的上面,應該能看見,謝謝支持。 支持(0)反對(0) #5樓2012-03-08 17:47?我想我是青蛙? 請教博主一個問題
我現(xiàn)在在使用mongodb,里面有這樣的一個設計
一個文章-------》多個評論
評論是文章的子文檔
現(xiàn)在有一個需求,我要取出十篇文章,但是我不想取出文章的子文檔。請問,應該怎么做。 支持(0)反對(0) #6樓[樓主]?2012-03-08 18:03?一線碼農? @?我想我是青蛙
使用find的第二個重載可以過濾:
> db.person.insert({"name":"hxc","address":[{"p":"anhui"}]})
> db.person.find()
{ "_id" : ObjectId("4f5882d9a6cd80a5c972f45f"), "name" : "hxc", "address" : [ { "p" : "anhui" } ] }
> db.person.find({},{"name":1})
{ "_id" : ObjectId("4f5882d9a6cd80a5c972f45f"), "name" : "hxc" }
> db.person.find({},{"address.p":0})
{ "_id" : ObjectId("4f5882d9a6cd80a5c972f45f"), "name" : "hxc", "address" : [ { } ] }
> db.person.find({},{"address":0})
{ "_id" : ObjectId("4f5882d9a6cd80a5c972f45f"), "name" : "hxc" } 支持(0)反對(0) #7樓2012-03-08 21:41?我想我是青蛙? @?一線碼農
問題已經解決,多謝博主 支持(0)反對(0) #8樓[樓主]?2012-03-08 21:41?一線碼農? @?我想我是青蛙
謝謝支持 支持(0)反對(0) #9樓2012-03-09 17:11?倚天照海- -? 碼農又更新了哈,看你你心情蠻郁悶的哈 寫了3個小時博客 突然死機了 哈哈,運氣不給力 。。 支持(0)反對(0) #10樓2012-04-12 21:27?郭遠威? 大哥,您好!請問mongoDB中數(shù)據(jù)庫大小的限制是多大?超過后怎么處理?
對內存有什么要求哦? 支持(0)反對(0) #11樓2013-06-22 22:15?游客? db.$cmd.unlock.findOne()
這個解鎖的語句應該是:
db.$cmd.sys.unlock.findOne()
這個系列已經認真學習過了,真心感謝! 支持(0)反對(0) #12樓2014-04-23 15:47?笑東風? 好東西,謝啦 支持(0)反對(0) #13樓2015-07-04 16:41?飛鴻影~? addUser在mongdb 3.0已經廢棄了,對應的函數(shù)請用createUser,createUser接受兩個參數(shù),一個user object,一個可選參數(shù)用戶角色,具體參考mongodb 3.0的文檔:http://docs.mongodb.org/manual/reference/method/js-user-management/
| 1 2 3 4 5 6 7 8 9 10 | db.createUser() Creates a?new?user. db.updateUser() Updates user data. db.changeUserPassword() Changes an existing user’s password. db.removeUser() Deprecated. Removes a user from a database. db.dropAllUsers()?? Deletes all users associated?with?a database. db.dropUser()?? Removes a single user. db.grantRolesToUser()?? Grants a role and its privileges to a user. db.revokeRolesFromUser()??? Removes a role from a user. db.getUser()??? Returns information about the specified user. db.getUsers()?? Returns information about all users associated?with?a database. |
| 1 2 3 4 5 6 7 8 9 10 | 示例: >use test >db.createUser( ???{ ?????user:?"accountUser", ?????pwd:?"password", ?????roles: [?"readWrite",?"dbAdmin"?] ???} ) |
最新版本直接使用db.fsyncUnlock()釋放鎖
轉載于:https://www.cnblogs.com/BOSET/p/7069269.html
總結
以上是生活随笔為你收集整理的转载: 8天学通MongoDB——第七天 运维技术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面试题17. 打印从1到最大的n位数
- 下一篇: event-config.h指明所在系统