一直想试试使用 MongoDB, 今天终于决定要在 Linux 上安装了. 准备使用 apt-get 安装, 因为比较方便. 但是网上的教程有的提到了 mongodb-10gen
, 有的提到了 mongodb-org
, 不知道安装哪个. 查证后发现开发 MongoDB 的公司叫做 10gen, 现已改名为 MongoDB Inc. (Wiki). 所以基本可以判断 mongodb-10gen
是 MongoDB 以前使用的名字, 现在应该使用 mongodb-org
. 后来在 StackOverflow 上也得到了证实(StackOverflow).
安装
MongoDB 官方提供了 Ubuntu 下的安装教程(链接), 其中主要步骤摘录如下:
- Import the public key used by the package management system
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
- 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
- Reload local package database
sudo apt-get update
- Install the MongoDB packages
sudo apt-get install -y mongodb-org
至此, 安装完成.
启停控制
- 启动
sudo service mongodb start sudo service mongod start
- 停止
sudo service mongodb stop sudo service mongod stop
- 查看
sudo service mongodb status sudo service mongod status
- 访问数据库
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
权限控制
-
切换到 Collection admin:
use admin db.auth('user', 'password') # 如果是含有特殊字符的 database, 可以使用 db.getSiblingDB() db.getSiblingDB('Mmrz-Sync').dictionary.find().count();
-
创建用户 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()
-
启用认证:
sudo vim /etc/mongod.conf
添加如下内容:
security: authorization: enabled
然后重启:
sudo service mongod restart