MONGODB大數據運維管理

數據庫管理

    備份MONGODB服務器

    執行mongodump    //默認使用本地連接127及端口連接本地數據庫

    數據庫恢復到備份之前的狀態:

    mongorestore --drop

    ##--drop選項告訴mongorestore工具,在恢復集合之前先丟棄現有的數據,如果不使用該選項,被恢復的數據將被追加到每個集合的尾部,導致數據的重複   

    備份單個數據庫

    mongodump -d  database_name  -c  post ##備份指定庫下集合

    --help

    恢復單個數據庫

    mongorestore -d blog --drop

    恢復單個集合

    mongorestore -d blog -c posts --drop


備份大數據庫

    數據庫備份系統有一個必殺技,就是時間點快照,它的速度非常快,快照完成的速度越快,數據庫服務器需要被凍結的時間就越短

    在MONGODB中創建隱藏輔助服務器是非常簡單的,並且可以使用MONGODB的複製機制來保證他與主服務器一直

    1使用日誌文件系統創建快照

    2使用隱藏的輔助服務器備份數據

    

    

    MONGODB上執行fysnc和lock,可以保證磁盤上數據庫的鏡像處於一致狀態,並保證在完成快照之前他們仍然保持一致狀態

    use admin

    db.fsyncLock()    //進入fsync和lock狀態

    查看當前鎖的狀態

    use admin 

    db.currentOp()

    釋放鎖

    db.fsyncUnlock()     //鎖釋放之前可能有短暫的延遲

    數據導入mongoDB使用mongoimport

    mongoimport 工具可加載3種文件格式的數據

    1、CSV:此種文件格式,每行代表一個文檔,字段之間由逗號分隔

    2、TSV:該文件類似CSV,它使用TAB作爲分隔符

    3、JSON:該文件格式每行都辦好一塊JSON,代表一個文檔,與其他格式不同,JSON可以支持可變模式的文檔

    mongoimport --help

MONGODB支持簡單的基於角色的身份驗證系統,通過系統可以控制用戶對數據庫的訪問以及他們被授予的訪問級別

    添加admin

    use admin

    db.createUser({

    user:"admin",

    pwd:"root123",

    roles:[{

    role:"readWrite",

    db:"admin"},

    {role:"userAdminAnyDatabase",db:"admin"}

    ]

    })

    db.auth("admin","root123")

    db.getllsers() //用戶權限相關信息

    db.serverStatus()


驗證和修復數據

    修復服務器

    使用repair命令是一個代價高昂的操作,會消耗很長世間,並且要求使用兩倍於MONGODB數據文件大小,因爲所有的數據都被克隆島新的文件並重建,本質上是對所有數據文件的重建

    mongod --dbpath /data/db  --repair

    在大型數據修復過程中,可以指定一個大的空間的驅動器,用於保存修復過程中創建的臨時文件

    mongod -f /etc/mongodb.conf --repair --repairpath /tmp/bigdata/

    

    通過validata選項可以驗證數據庫中集合的內容是否存在問題

    use dblog

    db.posts.ensureIndex({Author:1})

    db.posts.validate()

    

    修復集合的索引

    db.posts.reIndex()   //在線修復會柱塞對系統的訪問

    修復集合的數據文件

    use blog

    db.repairDatabase()  //不適合在線運行,因爲它會重建數據文件時會組賽對數據的所有請求,修復過程中所有讀寫請求都被阻塞


MONGODB的優化

    啓用和禁用MONGODB分析器

    use blog

    db.setProfilingLevel(1)  //0關閉

    db.setProfilingLevel(1,500)   //啓動毫秒級別

    db.setProfilingLevel(2)   //所有查詢啓動分析器

    查找慢查詢

    db.system.profile.find()

    

    增加分析器集合的大小

    1、關閉分析器

    use blog

    db.setProfilingLevel(0)

    2、刪除system.profile集合

    db.system.profile.drop()

    3、創建新的集合分析器

    db.createCollection("system.profile",{capped:true,size:50*1024*1024})

    4、重新啓用分析器

    db.setProfilingLevel(2)

    使用explain()分析特定的查詢

    use blog 

    db.posts.find().explain(true)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章