1. 程式人生 > >MongoDB部署及基本操作

MongoDB部署及基本操作

MongoDB

MongoDB

第1章 MongoDB部署:

1.1 下載地址:

?   MongoDB官網:https://www.mongodb.com/

?   CentOS6.X版本軟件下載地址:https://www.mongodb.org/dl/linux/x86_64-rhel62

1.2 安裝前的準備:

檢查該版本是否支持你的操作系統

? 更多詳情查看: https://docs.mongodb.com/manual/installation/

技術分享圖片

1.1.1 root用戶下關閉大頁內存:

[root@web04 tools]# cat /etc/rc.local
#!/bin/bash
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
  echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

其他系統關閉參照官方文檔:
https://docs.mongodb.com/manual/tutorial/transparent-huge-pages/

1.1.2 為什麽要關閉呢?

Transparent Huge Pages (THP) is a Linux memory management system
that reduces the overhead of Translation Lookaside Buffer (TLB)
lookups on machines with large amounts of memory by using larger memory pages.
However, database workloads often perform poorly with THP,
because they tend to have sparse rather than contiguous memory access patterns.
You should disable THP on Linux machines to ensure best performance with MongoDB.

1.2 MongoDB安裝:

創建用戶並修改密碼:

groupadd -g 800 mongod
useradd  -u 801 -g mongod  mongod
echo 123456 |passwd --stdin  mongod

創建目錄結構:

mkdir -p /mongodb/bin
mkdir -p /mongodb/conf
mkdir -p /mongodb/log
mkdir -p /mongodb/data

解壓軟件並上傳到指定位置:

tar xf mongodb-linux-x86_64-3.2.8.tgz
cd /server/tools/mongodb-linux-x86_64-3.2.8
cp * /mongodb/bin/

配置文件內容:

systemLog:
   destination: file
   path: "/mongodb/log/mongod.log"
   logAppend: true
storage:
   journal:
      enabled: true
   dbPath: "/mongodb/data"
processManagement:
   fork: true
net:
   port: 27017
security:
   authorization: enabled

修改程序目錄屬主:

chown -R mongod.mongod /mongodb/

設置用戶環境變量:

su - mongod
vi .bash_profile
export PATH=/mongodb/bin:$PATH
source .bash_profile

第2章 管理MongoDB:

2.1 啟動MongoDB:

mongod --dbpath=/mongodb/data --logpath=/mongodb/log/mongodb.log --port=27017 --logappend --fork

2.2 參數說明:

參數

參數說明

--dbpath

數據存放路徑

--logpath

日誌文件路徑

--logappend

日誌輸出方式

--port

啟用端口號

--fork

在後臺運行

--auth

是否需要驗證權限登錄(用戶名和密碼)

--bind_ip

限制訪問的ip

--shutdown

關閉數據庫

2.3 登錄數據庫:

mongo
MongoDB shell version: 3.2.8
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
    http://docs.mongodb.org/
Questions? Try the support group
    http://groups.google.com/group/mongodb-user
>
>

2.3.1 配置文件:

[mongod@web04 conf]$ vim mongodb.conf
logpath=/mongodb/log/mongodb.log
dbpath=/mongodb/data
port=27017
logappend=1
fork=1
[mongod@web04 conf]$ pkill mongod
[mongod@web04 conf]$ mongod -f /mongodb/conf/mongodb.conf
about to fork child process, waiting until server is ready for connections.
forked process: 1562
child process started successfully, parent exiting

2.3.2 yaml格式配置文件:

systemLog:
   destination: file
   path: "/application/mongodb/log/mongod.log"
   logAppend: true
storage:
   journal:
      enabled: true
   dbPath: "/application/mongodb/data"
processManagement:
   fork: true
net:
   port: 27017

2.4 MongoDB多種關閉方式:

mongod -f /mongodb/conf/mongodb.conf shutdown
或者登陸到mongodb中,use到admin庫下:
admin> db.shutdownServer()

admin> db.adminCommand({shutdown:1})

第3章 MongoDB基本操作:

3.1 常用的命令種類:

db   ----> 數據庫和數據庫對象管理類
rs.  ----> 復制集有關管理命令
show ----> 查詢數據庫一些基本狀態
sh.  ----> 集群有關管理類命令


3.1.1 在客戶端指定數據庫進行連接(默認連接本機的test)

[mongod@web04 conf]$ mongo 10.0.0.18/admin
MongoDB shell version: 3.2.8
connecting to: 10.0.0.18/admin
>

3.1.2 切庫:

> use test
switched to db test

3.1.3 查看當前數據庫版本:

> db.version()
3.2.8

3.1.4 顯示當前數據庫:

> db
test
> db.getName()
test

3.1.5 查看當前數據庫狀態:

> db.stats()
{
    "db" : "jiang",
    "collections" : 1,
    "objects" : 0,
    "avgObjSize" : 0,
    "dataSize" : 0,
    "storageSize" : 4096,
    "numExtents" : 0,
    "indexes" : 1,
    "indexSize" : 4096,
    "ok" : 1
}

3.1.6 顯示所有數據庫:

> show databases
jiang  0.000GB
local  0.000GB
> show dbs
jiang  0.000GB
local  0.000GB

第4章 數據管理:

4.1 創建集合(相當於create table)

方法一:

> db.createCollection('t1')
{ "ok" : 1 }
> show tables
t1

方法二:當插入一個文檔的時候,一個集合就會自動創建

> db.t2.insert({name:"daya"})
WriteResult({ "nInserted" : 1 })
> show tables  
t1
t2

4.2 查看創建好的合集(庫中的表):

> db.getCollectionNames()
[ "t1", "t2" ]
4.3 查看表中內容:> db.t2.find()
{ "_id" : ObjectId("5ad69e4014cea9ca81c9ae44"), "name" : "daya" }

4.4 批量插入一萬行數據:

> for(i=0;i<10000;i++){ db.log.insert({"uid":i,"name":"mongodb","age":6,"date":new Date()}); }
WriteResult({ "nInserted" : 1 })

4.5 查詢集合中有多少行數據:

> db.log.find().count()
10000

4.6 刪除所有合集:

> db.log.remove({})
WriteResult({ "nRemoved" : 10000 })

4.7 查詢集合存儲信息:

> db.log.stats()          # 查看數據狀態
> db.log.dataSize()          # 集合中數據的原始大小
> db.log.totalIndexSize()          # 集合中索引數據的原始大小
> db.log.totalSize()          # 集合中索引+數據壓縮存儲之後的大小
> db.log.storageSize()          # 集合中數據壓縮存儲的大小


第5章 MongoDB用戶管理:

MongoDB數據庫默認是沒有用戶名及密碼的,即無權限訪問控制,為了方便數據庫的管理和安全,需要創建數據庫用戶

5.1 用戶的權限:

用戶中權限的說明

權限

說明

Read

允許用戶讀取指定數據庫

readWrite

允許用戶讀寫指定數據庫

dbAdmin

允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.profile

userAdmin

允許用戶向system.users集合寫入,可以找指定數據庫裏創建、刪除和管理用戶

clusterAdmin

只在admin數據庫中可用,賦予用戶所有分片和復制集相關函數的管理權限。

readAnyDatabase

只在admin數據庫中可用,賦予用戶所有數據庫的讀權限

readWriteAnyDatabase

只在admin數據庫中可用,賦予用戶所有數據庫的讀寫權限

userAdminAnyDatabase

只在admin數據庫中可用,賦予用戶所有數據庫的userAdmin權限

dbAdminAnyDatabase

只在admin數據庫中可用,賦予用戶所有數據庫的dbAdmin權限。

root

只在admin數據庫中可用。超級賬號,超級權限

5.2 用戶創建語法:

{
user: "<name>",
pwd: "<cleartext password>",
customData: { <any information> },
roles: [
{ role: "<role>",
db: "<database>" } | "<role>",
...
]
}

user字段:用戶的名字;

pwd字段:用戶的密碼;

cusomData字段:為任意內容,例如可以為用戶全名介紹;

roles字段:指定用戶的角色,可以用一個空數組給新用戶設定空角色;

roles 字段:可以指定內置角色和用戶定義的角色。

5.3 創建超級管理員用戶:

> db.createUser(
...   {
...     user: "root",
...     pwd: "root",
...     roles: [ { role: "root", db: "admin" } ]
...   }
... )

5.3.1 註意:

1. 創建管理員角色用戶的時候,必須到admin下創建

2. 刪除的時候也要到響應的庫下操作

5.3.2 查看創建完成的用戶:

> show users
{
    "_id" : "admin.root",
    "user" : "root",
    "db" : "admin",
    "roles" : [
        {
            "role" : "root",
            "db" : "admin"
        }
    ]
}

5.3.3 驗證用戶:

> db.auth('root', 'root')
1

5.3.4 用戶創建完成後在配置文件中開啟用戶驗證:

cat >>/mongodb/conf/mongodb.conf<<-'EOF'
security:
   authorization: enabled
EOF

5.3.5 重啟數據庫

mongod -f /mongodb/conf/mongodb.conf
mongod -f /mongodb/conf/mongodb.conf --shutdown

5.3.6 登錄數據庫:

方法一:
mongo 10.0.0.18/admin -uroot –proot
方法二:
mongo 10.0.0.18/admin
> db.auth('root', 'root')
1

5.4 自定義數據庫

5.4.1 創建app數據庫的管理員

> use app
switched to db app
> db.createUser(
...   {
...     user: "admin",
...     pwd: "admin",
...     roles: [ { role: "dbAdmin", db: "app" } ]
...   }
... )
Successfully added user: {
    "user" : "admin",
    "roles" : [
        {
            "role" : "dbAdmin",
            "db" : "app"
        }
    ]
}
> db.auth('admin','admin')
1

5.4.2 創建zabbix用戶,可讀可寫權限

> db.createUser(
... {
...   user: "zabbix",
...   pwd: "zabbix",
...   roles: ["readWrite"]
... }
... )
Successfully added user: { "user" : "zabbix", "roles" : [ "readWrite" ] }
> db.auth('zabbix', 'zabbix')
1

5.4.3 創建一個zabbix庫的只讀用戶test1用戶

> db.createUser(
... {
...   user: "test1",
...   pwd: "test1",
...   roles: ["read"]
... }
... )

5.4.4 刪除用戶:

> use zabbix
switched to db zabbix
> db.dropUser("test1")
true


MongoDB部署及基本操作