21.26 mongodb介绍
21.27 mongodb安装
21.28 连接mongodb
21.29 mongodb用户管理
21.30 mongodb创建集合、数据管理
21.31 php的mongodb扩展
21.32 php的mongo扩展
21.33 mongodb副本集介绍
21.34 mongodb副本集搭建
21.35 mongodb副本集测试
21.36 mongodb分片介绍
21.37/21.38/21.39 mongodb分片搭建
21.40 mongodb分片测试
21.41 mongodb备份恢复
扩展内容
mongodb安全设置 http://www.mongoing.com/archives/631
mongodb执行js脚本 http://www.jianshu.com/p/6bd8934bd1ca
一、mongodb介绍
官网www.mongodb.com
C++编写,基于分布式的,属于NoSQL的一种,文档型的数据库
在NoSQL中mongodb是最像关系型数据库的
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档、数组及文档数组。
因为基于分布式,所以很容易扩展
关于JSON http://www.w3school.com.cn/json/index.asp
JSON:JavaScript 对象表示法(JavaScript Object Notation)。
JSON 是存储和交换文本信息的语法。类似 XML。
JSON 比 XML 更小、更快,更易解析。
MongoDB和关系型数据库对比
关系型数据库数据结构
MongoDB数据结构
二、MongoDB安装
epel自带的mongodb版本为2.6,我们需要安装3.4版本
官方安装文档可参考: https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/
cd /etc/yum.repos.d/
vim mongodb.repo //创建,并加入如下内容
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
yum list |grep mongodb //可以看到mongodb相关的rpm包
yum install -y mongodb-org
三、MongoDB连接
配置文件 : vim /etc/mongod.conf
绑定多个ip,用逗号分隔
systemctl start mongod //启动服务
在本机可以直接运行命令mongo进入到mongodb shell中
如果mongodb监听端口并不是默认的27017,则在连接的时候需要加--port 选项,例如
mongo --port 27018
连接远程mongodb,需要加--host,例如
mongo --host 127.0.0.1
如果设置了验证,则在连接的时候需要带用户名和密码
mongo -uusername -ppasswd --authenticationDatabase 数据库名 //这个和MySQL挺像
四、MongoDB用户管理
给用户设置密码:
use admin //需要切换到admin库
db.createUser( { user: "admin", customData: {description: "superuser"}, pwd: "admin123", roles: [ { role: "root", db: "admin" } ] } )
user指定用户,customData为说明字段,可以省略,pwd为密码,roles指定用户的角色,db指定库名
use admin //切换到admin库
db.system.users.find() //列出所有用户,需要切换到admin库
show users //查看当前库下所有的用户
在创建一个用户: db.createUser({user:"tobe",pwd:"123456",roles:[{role:"read",db:"testdb"}]})
db.dropUser('tobe') //删除用户
use 库名 切换到指定库,如果库不存在,会创建该库
使用用户名和密码登陆,还需要编辑启动脚本:
vim /usr/lib/systemd/system/mongod.service,在OPTIONS=后面增--auth
systemctl daemon-reload
重启服务 systemctl restart mongod
此时不使用用户名密码登陆会报错,没有授权
登陆后即可:
mongo --host 192.168.183.3 --port 27017 -u admin -p 'admin123' --authenticationDatabase "admin"
use db1
db.createUser( { user: "test1", pwd: "123aaa", roles: [ { role: "readWrite", db: "db1" }, {role: "read", db: "db2" } ] } )
test1用户对db1库读写,对db2库只读。
之所以先use db1,表示用户在 db1 库中创建,就一定要db1库验证身份,即用户的信息跟随随数据库。比如上述 test1虽然有 db2 库的读取权限,但是一定要先在db1库进行身份验证,直接访问会提示验证失败。
此时验证身份报错,是因为test1用户是db1中的,要到db1中才可以
MongoDB用户角色
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
五、mongodb创建集合、数据管理