1. 程式人生 > >第一部分:MongoDB備忘錄

第一部分:MongoDB備忘錄

taf slow 日誌 復制集 副本集 () nss nec ror

一、NoSQL 簡介

  Nosql的全稱是Not Only Sql,這個概念早起就有人提出,在09年的時候比較火。Nosql指的是非關系型數據庫,而我們常用的都是關系型數據庫。就像我們常用的mysql,sqlserver,oracle一樣,這些數據庫一般用來存儲重要信息,應對普通的業務是沒有問題的。但是,隨著互聯網的高速發展,傳統的關系型數據庫在應付超大規模,超大流量以及高並發的時候力不從心。而就在這個時候,Nosql得到的告訴的發展。

二、MongoDB備忘錄

1、首先說一下自己在使用MongoDB過程中踩過的坑,安裝的時候很簡單,解壓安裝完成。我安裝的版本是v3.6.5,使用中也非常簡單

最簡單的啟動指令:mongod

帶認證的啟動指令:mongod -dbpath /data/db -auth

指定配置文件啟動的指令:mongod -config /etc/mongod.conf

2、啟動後使用mongo進入shell界面,就可以操作數據庫了,下面列一些我還記住的指令,不知道的指令區runoob上查一下

查看數據庫:show dbs

使用數據庫:use <db_name>

查看集合(表):show collections

查看一條內容:db.school.findOne()

3、上面說到了使用認證方式啟動mongodb,那麽認證的前提當然是需要有用戶名和密碼了,下面記錄一下如何增加認證用戶。

> use admin
switched to db admin
> db.createUser(
...   {
...     user: "dba",
...     pwd: "dba",
...     roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
...   }
... )
Successfully added user: {
    "user" : "dba",
    "roles" : [
        {
            "role" : "userAdminAnyDatabase
", "db" : "admin" } ] }
  • user:用戶名
  • pwd:密碼
  • db : 數據庫名字
  • roles:指定用戶的角色,可以用一個空數組給新用戶設定空角色;在roles字段,可以指定內置角色和用戶定義的角色。

role裏的角色可以選:

Built-In Roles(內置角色):
1. 數據庫用戶角色:read、readWrite;
2. 數據庫管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 備份恢復角色:backup、restore;
5. 所有數據庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超級用戶角色:root  
// 這裏還有幾個角色間接或直接提供了系統超級用戶的訪問(dbOwner 、userAdmin、userAdminAnyDatabase)
7. 內部角色:__system
具體角色:
read:允許用戶讀取指定數據庫
readWrite:允許用戶讀寫指定數據庫
dbAdmin:允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.profile
userAdmin:允許用戶向system.users集合寫入,可以找指定數據庫裏創建、刪除和管理用戶
clusterAdmin:只在admin數據庫中可用,賦予用戶所有分片和復制集相關函數的管理權限。
readAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀權限
readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀寫權限
userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的userAdmin權限
dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的dbAdmin權限。
root:只在admin數據庫中可用。超級賬號,超級權限

開啟用戶權限

新建mongodb.conf文件,並加入“auth=true”

從配置文件啟動mongodb服務

./bin/mongod -f mongodb.conf

用戶驗證

[caideyang@localhost mongodb3.2.10]$ ./bin/mongo 
MongoDB shell version: 3.6.1
connecting to: test
> use admin
switched to db caideyang
> db.auth(‘admin‘,‘admin‘)
1
>

mongodb.conf配置文件

#數據庫數據存放目錄
dbpath=/usr/local/mongodb304/data
#數據庫日誌存放目錄
logpath=/usr/local/mongodb304/logs/mongodb.log 
#以追加的方式記錄日誌
logappend = true
#端口號 默認為27017
port=27017 
#以後臺方式運行進程
fork=true 
 #開啟用戶認證
auth=true
#關閉http接口,默認關閉http端口訪問
nohttpinterface=true
#mongodb所綁定的ip地址
bind_ip = 127.0.0.1,192.168.1.140
#啟用日誌文件,默認啟用
journal=true 
#這個選項可以過濾掉一些無用的日誌信息,若需要調試使用請設置為false
quiet=true

其他配置參數含義

--quiet # 安靜輸出
--port arg  # 指定服務端口號,默認端口27017
--bind_ip arg   # 綁定服務IP,若綁定127.0.0.1,則只能本機訪問,不指定默認本地所有IP
--logpath arg   # 指定MongoDB日誌文件,註意是指定文件不是目錄
--logappend # 使用追加的方式寫日誌
--pidfilepath arg   # PID File 的完整路徑,如果沒有設置,則沒有PID文件
--keyFile arg   # 集群的私鑰的完整路徑,只對於Replica Set 架構有效
--unixSocketPrefix arg  # UNIX域套接字替代目錄,(默認為 /tmp)
--fork  # 以守護進程的方式運行MongoDB,創建服務器進程
--auth  # 啟用驗證
--cpu   # 定期顯示CPU的CPU利用率和iowait
--dbpath arg    # 指定數據庫路徑
--diaglog arg   # diaglog選項 0=off 1=W 2=R 3=both 7=W+some reads
--directoryperdb    # 設置每個數據庫將被保存在一個單獨的目錄
--journal   # 啟用日誌選項,MongoDB的數據操作將會寫入到journal文件夾的文件裏
--journalOptions arg    # 啟用日誌診斷選項
--ipv6  # 啟用IPv6選項
--jsonp # 允許JSONP形式通過HTTP訪問(有安全影響)
--maxConns arg  # 最大同時連接數 默認2000
--noauth    # 不啟用驗證
--nohttpinterface   # 關閉http接口,默認關閉27018端口訪問
--noprealloc    # 禁用數據文件預分配(往往影響性能)
--noscripting   # 禁用腳本引擎
--notablescan   # 不允許表掃描
--nounixsocket  # 禁用Unix套接字監聽
--nssize arg (=16)  # 設置信數據庫.ns文件大小(MB)
--objcheck  # 在收到客戶數據,檢查的有效性,
--profile arg   # 檔案參數 0=off 1=slow, 2=all
--quota # 限制每個數據庫的文件數,設置默認為8
--quotaFiles arg    # number of files allower per db, requires --quota
--rest  # 開啟簡單的rest API
--repair    # 修復所有數據庫run repair on all dbs
--repairpath arg    # 修復庫生成的文件的目錄,默認為目錄名稱dbpath
--slowms arg (=100) # value of slow for profile and console log
--smallfiles    # 使用較小的默認文件
--syncdelay arg (=60)   # 數據寫入磁盤的時間秒數(0=never,不推薦)
--sysinfo   # 打印一些診斷系統信息
--upgrade   # 如果需要升級數據庫 * Replicaton 參數

--------------------------------------------------------------------------------

--fastsync  # 從一個dbpath裏啟用從庫復制服務,該dbpath的數據庫是主庫的快照,可用於快速啟用同步
--autoresync    # 如果從庫與主庫同步數據差得多,自動重新同步,
--oplogSize arg # 設置oplog的大小(MB) * 主/從參數

--------------------------------------------------------------------------------

--master    # 主庫模式
--slave # 從庫模式
--source arg    # 從庫 端口號
--only arg  # 指定單一的數據庫復制
--slavedelay arg    # 設置從庫同步主庫的延遲時間 * Replica set(副本集)選項:

--------------------------------------------------------------------------------

--replSet arg   # 設置副本集名稱 * Sharding(分片)選項

--------------------------------------------------------------------------------
--configsvr # 聲明這是一個集群的config服務,默認端口27019,默認目錄/data/configdb
--shardsvr  # 聲明這是一個集群的分片,默認端口27018
--noMoveParanoia    # 關閉偏執為moveChunk數據保存

備份還原數據庫

備份

[caideyang@localhost mongodb3.2.10]$ ./bin/mongodump --port=27017 -ucdy -ppasswd --db=caideyang -o /home/caideyang/backup/
2016-10-30T15:58:58.082+0800    writing caideyang.score to 
2016-10-30T15:58:58.083+0800    writing caideyang.user to 
2016-10-30T15:58:58.084+0800    done dumping caideyang.score (4 documents)
2016-10-30T15:58:58.085+0800    done dumping caideyang.user (2 documents)
[caideyang@localhost ~]$ tree backup/
backup/
└── caideyang
    ├── score.bson
    ├── score.metadata.json
    ├── user.bson
    └── user.metadata.json

1 directory, 4 files

還原

[caideyang@localhost mongodb3.2.10]$ ./bin/mongorestore --port=27017 -ucdy -ppasswd --db=caideyang ../backup/caideyang/
2016-10-30T16:04:43.914+0800    building a list of collections to restore from ../backup/caideyang dir
2016-10-30T16:04:43.918+0800    reading metadata for caideyang.score from ../backup/caideyang/score.metadata.json
2016-10-30T16:04:43.918+0800    reading metadata for caideyang.user from ../backup/caideyang/user.metadata.json
2016-10-30T16:04:43.918+0800    restoring caideyang.score from ../backup/caideyang/score.bson
2016-10-30T16:04:43.918+0800    restoring caideyang.user from ../backup/caideyang/user.bson
2016-10-30T16:04:43.930+0800    error: multiple errors in bulk operation:
  - E11000 duplicate key error collection: caideyang.user index: _id_ dup key: { : ObjectId(‘5815a5fa5fee222be4c321c9‘) }
  - E11000 duplicate key error collection: caideyang.user index: _id_ dup key: { : ObjectId(‘5815a63a5fee222be4c321ca‘) }

2016-10-30T16:04:43.930+0800    restoring indexes for collection caideyang.user from metadata
2016-10-30T16:04:43.936+0800    finished restoring caideyang.user (2 documents)
2016-10-30T16:04:43.988+0800    restoring indexes for collection caideyang.score from metadata
2016-10-30T16:04:43.989+0800    finished restoring caideyang.score (4 documents)
2016-10-30T16:04:43.989+0800    done
[caideyang@localhost mongodb3.2.10]$

註:部分內容引用自 https://www.jianshu.com/p/5844fdfa9511

第一部分:MongoDB備忘錄