Mac上安装和配置MongoDB
安装MongoDB
官网地址:https://www.mongodb.com/try/download/community,下载本地版MongoDb,格式为tgz。
把解压后的文件夹放到 /usr/local 下
执行
open -e .bash_profile
配置环境变量,文件中加入
export PATH=${PATH}:/usr/local/mongodb-macos-x86_64-4.4.1/bin
保存后关闭文件,执行以下命令使环境变量生效
source .bash_profile
执行 mongod -version ,出现如下信息则证明安装成功
创建数据存储路径
由于MongoDB的默认存储路径使根目录下的 /data/db ,而这个文件夹并不会由MongoDB自动创建,所以需要我们手动创建文件夹。
但是Mac OS引入了系统完整性保护(SIP)机制,无法在/、/usr目录下新建文件,所以我们需要通过软连接的方式创建MongoDB数据存储文件夹。
新建/etc/synthetic.conf文件:
sudo vim /etc/synthetic.conf
在文件里面添加目录的映射,每一行都相当于创建一个软链接,一共包含三列。第一列表示根目录/下的目录名,第二列为一个tab键 (不能是空格),第三列为自己新建的目录:
data /Users/helios_fz/mongodb-data
上述配置相当于
ln -s /Users/helios_fz/mongodb-data /data
重启Mac,会看到根目录下多了一个/data目录。
配置用户权限
先后台启动MongoDB
mongod &
再重新打开一个终端,执行mongo。
MongoDB安装好后第一次进入是不需要密码的,也没有任何用户。现在需要创建一个帐号,该账号需要有grant权限,即:账号管理的授权权限。注意一点,帐号是跟着库走的,所以要在指定的库里授权,也必须也在指定的库里验证(auth)。
终端输入 mongo 进入MongoDB控制台,执行以下命令创建管理用户:
use admin db.createUser( {user: "admin",pwd: "admin",roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]})
上述命令中,user是用户名,pwd是密码,roles是指定用户的角色,可以用一个空数组给新用户设定空角色;在roles字段,可以指定内置角色和用户定义的角色。
role里的角色可以选:
- 数据库用户角色:read、readWrite;
- 数据库管理角色:dbAdmin、dbOwner、userAdmin;
- 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
- 备份恢复角色:backup、restore;
- 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超级用户角色:root(dbOwner 、userAdmin、userAdminAnyDatabase也间接或直接提供了系统超级用户的访问)
- 内部角色:__system
角色具体解释:
- read:允许用户读取指定数据库
- readWrite:允许用户读写指定数据库
- dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
- userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
- clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
- readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
- readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
- userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
- dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
- root:只在admin数据库中可用。超级账号,超级权限
刚建立了 userAdminAnyDatabase 角色,用来管理用户,可以通过这个角色来创建、删除用户。
创建用户之后,重启MongoDB。通过 ps -ef | grep mongo 找到MongoDB进程号,然后"kill -9 进程号"关掉数据库。
通过下列命令启动MongoDB,开启认证:
mongod --auth &
常用命令
show dbs #显示数据库列表 show collections #显示当前数据库中的集合(类似关系数据库中的表) show users #显示用户 use <db name> #切换当前数据库,如果数据库不存在则创建数据库。 db.help() #显示数据库操作命令,里面有很多的命令 db.foo.help() #显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合,并非真正意义上的命令 db.foo.find() #对于当前数据库中的foo集合进行数据查找(由于没有条件,会列出所有数据) db.foo.find( { a : 1 } ) #对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫a,且a的值为1 db.dropDatabase() #删除当前使用数据库 db.cloneDatabase("127.0.0.1") #将指定机器上的数据库的数据克隆到当前数据库 db.copyDatabase("mydb", "temp", "127.0.0.1") #将本机的mydb的数据复制到temp数据库中 db.repairDatabase() #修复当前数据库 db.getName() #查看当前使用的数据库,也可以直接用db db.stats() #显示当前db状态 db.version() #当前db版本 db.getMongo() #查看当前db的链接机器地址 db.serverStatus() #查看数据库服务器的状态
MongoDB没有创建数据库的命令,如果你想创建一个“myTest”的数据库,先运行use myTest命令,之后就做一些操作(如:db.createCollection(‘user’)),这样就可以创建一个名叫“myTest”的数据库。
其他配置
开启外部访问
mongod --bind_ip=0.0.0.0 &
开启访问认证
mongod --auth &
忘记密码后的重置
正常启动MongoDB,并进入控制台,删除之前的用户。
use admin db.system.users.find() db.system.users.remove({})
接下来就可以重复创建用户的操作了。