一直想试试使用 MongoDB, 今天终于决定要在 Linux 上安装了. 准备使用 apt-get 安装, 因为比较方便. 但是网上的教程有的提到了 mongodb-10gen, 有的提到了 mongodb-org, 不知道安装哪个. 查证后发现开发 MongoDB 的公司叫做 10gen, 现已改名为 MongoDB Inc. (Wiki). 所以基本可以判断 mongodb-10gen 是 MongoDB 以前使用的名字, 现在应该使用 mongodb-org. 后来在 StackOverflow 上也得到了证实(StackOverflow).


安装

MongoDB 官方提供了 Ubuntu 下的安装教程(链接), 其中主要步骤摘录如下:

  1. Import the public key used by the package management system
    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
    
  2. Create a list file for MongoDB. (Ubuntu 12.04)
    echo "deb [ arch=amd64 ] http://repo.mongodb.org/apt/ubuntu precise/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
    
  3. Reload local package database
    sudo apt-get update
    
  4. Install the MongoDB packages
    sudo apt-get install -y mongodb-org
    

至此, 安装完成.


启停控制

  1. 启动
    sudo service mongodb start
    sudo service mongod start
    
  2. 停止
    sudo service mongodb stop
    sudo service mongod stop
    
  3. 查看
    sudo service mongodb status
    sudo service mongod status
    
  4. 访问数据库
    mongo
    


这里有个注意点, 貌似较老的 Ubuntu 版本比如 Ubuntu12.04 中需要键入 mongod, 而较新的版本比如 Ubuntu18.04 中需要键入的是 mongodb, 请按照需求尝试.
 
另外访问数据库使用的是 mongo.


配置文件地址: /etc/mongod.conf
log 文件地址: /var/log/mongodb (查看 /etc/mongod.conf 中的实际记载)
数据实际存放地址: /var/lib/mongodb (查看 /etc/mongod.conf 中的实际记载)
手动启动 mongoDB: sudo -f mongod /etc/mongod.conf


限制 MongoDB 内存使用:

vim /etc/mongod.conf

# edit
wiredTiger:
  engineConfig:
    configString: cache_size=64M

权限控制

  1. 切换到 Collection admin:

    use admin
    db.auth('user', 'password')
    
    # 如果是含有特殊字符的 database, 可以使用 db.getSiblingDB()
    db.getSiblingDB('Mmrz-Sync').dictionary.find().count();
    
  2. 创建用户 admin (也可是其他名字):

    db.createUser({
        user: "admin",
        pwd: "admin",
        roles: [
            { role: "userAdminAnyDatabase", db: "admin" },
            { role: "dbAdminAnyDatabase", db: "admin" },
            { role: "readWriteAnyDatabase", db: "admin" }
        ]
    })
    

    此处如果给的角色(role)不够, 可以使用如下命令追加:

    db.grantRolesToUser(
        "<username>", [{ role: "<role>", db: "<database>" }]
    )
    

    需要注意, 对于一个用户, 即使赋予了 "Any" 的权限, 它的登录也必须在赋予权限的 Collection 中完成.
    一些可能用到的 role: dbOwner, readWrite.



    比如我刚才建立的 admin 用户, 是在 Collection admin 中创见的, 虽然他具有 "readWriteAny" 等权限, 但是我想使用 admin 帐号在 Collection test 中追加或者查看数据, 仍然要先 use admin, db.auth("admin", "admin")完成登录, 然后 use test 再进行相关操作, 直接在 test 中使用 db.auth() 将无法成功.

    最后查看用户情况:

    use admin
    db.system.users.find().pretty()
    
  3. 启用认证:

    sudo vim /etc/mongod.conf
    

    添加如下内容:

    security:
        authorization: enabled
    

    然后重启:

    sudo service mongod restart
    
Comments
Write a Comment