推薦的 MongoDB 安裝文檔


簡介:mongodb

MongoDB 是一個由 C++ 語言編寫的基於分佈式文件存儲的數據庫,是目前最像關係型數據庫的非關係型數據庫。shell

最近寫爬蟲, 思來想去以爲仍是用 MongoDB 比較方便。數據庫

1、安裝vim

# 官方文檔:https://docs.mongodb.com/manual/administration/install-community/安全

一、添加 YUM 源分佈式

shell > vim /etc/yum.repos.d/mongodb-org-3.6.repo
[mongodb-org-3.6]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc

二、直接安裝就行了ide

shell > yum -y install mongodb-org

or

shell > yum -y install mongodb-org-3.6.4 mongodb-org-server-3.6.4 mongodb-org-shell-3.6.4 mongodb-org-mongos-3.6.4 mongodb-org-tools-3.6.4

# 這裏遇到個小問題, 記錄一下ui

# https://repo.mongodb.org/yum/redhat/6/mongodb-org/3.6/x86_64/repodata/repomd.xml: [Errno 14] problem making ssl connection
# Cannot retrieve repository metadata (repomd.xml) for repository: mongodb-org-3.6. Please verify its path and try again

# yum 報錯, 網上說把該 .repo 的 enabled 設爲 0, 而後執行 yum -y install ca-certificates, 以後再設爲 1, 就能夠安裝了
# 我這裏試了沒成功, 後來把 .repo 中的 https 改成 http 就能夠了url

2、配置spa

shell > grep -vP '^#|^$' /etc/mongod.conf 
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log
storage:
  dbPath: /data/mongo_data
  journal:
    enabled: true
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile
  timeZoneInfo: /usr/share/zoneinfo
net:
  port: 27007
  bindIp: 0.0.0.0  # Listen to local interface only, comment to listen on all interfaces.

# 修改了 dbPath、port、bindIp

shell > mkdir /data/mongo_data && chown -R mongod.mongod /data/mongo_data

# 數據目錄不建立, 沒法啓動

3、啓動

shell > /etc/init.d/mongod start
shell > chkconfig --level 35 mongod on

4、客戶端鏈接

shell > mongo --port 27007

# 這裏會看到一些警告信息, 照着改一改就行了

shell > echo never > /sys/kernel/mm/transparent_hugepage/defrag
shell > echo never > /sys/kernel/mm/transparent_hugepage/enabled

# 關閉透明大頁, 記得加入 /etc/rc.local

shell > vim /etc/security/limits.conf
*                -       nproc           64000
*                -       nofile          64000

# 進程數、文件描述符, ulimit -u 64000、ulimit -n 64000 (好像還不行...)
# 官方文檔:https://docs.mongodb.com/manual/reference/ulimit/#recommended-settings

5、安全

# 認證類型:https://docs.mongodb.com/manual/security/
# 配置管理:https://docs.mongodb.com/manual/reference/configuration-options/

(我)選擇(的是)基於角色的訪問控制

# 相關文檔:https://docs.mongodb.com/manual/core/authorization/

一、建立用戶、分配角色

# 相關文檔:https://docs.mongodb.com/manual/reference/method/
# 默認角色:https://docs.mongodb.com/manual/core/security-built-in-roles/

shell > db.createUser({"user": "root", "pwd": "73osZMb", "roles": [{"role": "root", "db": "admin"}]})
Successfully added user: {
    "user" : "root",
    "roles" : [
        {
            "role" : "root",
            "db" : "admin"
        }
    ]
}

# 這樣就建立一個用戶爲 root、密碼、角色爲 root (超級用戶)、受權 db 爲 admin。
# 關於系統有哪些角色、每種角色的功能, 還需參考上面提供的官方文檔

二、開啓受權

shell > vim /etc/mongod.conf

security:
  authorization: enabled

# 開啓受權, /etc/init.d/mongod restart

三、驗證

shell > mongo --port 27007
MongoDB shell version v3.6.4
connecting to: mongodb://127.0.0.1:27007/
MongoDB server version: 3.6.4
> show dbs
2018-05-11T15:21:35.653+0800 E QUERY    [thread1] Error: listDatabases failed:{
    "ok" : 0,
    "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0, $db: \"admin\" }",
    "code" : 13,
    "codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:65:1
shellHelper.show@src/mongo/shell/utils.js:820:19
shellHelper@src/mongo/shell/utils.js:710:15
@(shellhelp2):1:1

# 提示認證失敗

> use admin
switched to db admin
> db.auth("root", "73osZMb")
1
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB

# 嘗試 root 角色權限

> use spider
> db.sp_douban.insertOne({"id": 1, "name": "警察故事"})
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5af5450510d201ef1d48d3a4")
}
> db.sp_douban.findOne()
{ "_id" : ObjectId("5af5450510d201ef1d48d3a4"), "id" : 1, "name" : "警察故事" }
> db.sp_douban.deleteOne({"id": 1})
{ "acknowledged" : true, "deletedCount" : 1 }
> db.sp_douban.find()

# 能夠開到該用戶能夠建立數據庫、建立表、插入、查詢、刪除

# 好, 先這樣, 搞爬蟲去!

相關文章
相關標籤/搜索