前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >初识 MongoDB 服务

初识 MongoDB 服务

作者头像
老七Linux
发布2018-05-31 10:05:31
6850
发布2018-05-31 10:05:31
举报
文章被收录于专栏:Laoqi's Linux运维专列
一、了解 MongoDB

之前认识了两种相同类型的缓存技术(关系型数据库)memcached 和 Redis, MongoDB是与之前两款完全不同的一个类型的缓存技术!称之为:文档型数据库!

提到文档,一个新概念JSON,MongoDB的文档类似于JSON对象!

代码语言:javascript
复制
JSON:JavaScript 对象表示法(JavaScript Object Notation)。
JSON 是存储和交换文本信息的语法。类似 XML。
JSON 比 XML 更小、更快,更易解析。

来看一下JSON文档:

代码语言:javascript
复制
{
"employees": [
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName":"Carter" }
]
}
MongoDB 特点:
  • C++编写,基于分布式的,属于NoSQL的一种。
  • 在NoSQL中是最像关系型数据库的 MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档、数组及文档数组。
  • 因为基于分布式,所以很容易扩展。
MongoDB和关系型数据库对比:
mark
mark
关系型数据库数据结构:
mark
mark
MongoDB数据结构:
mark
mark
总结:

文档型数据库,类似于JSON,且是分布式结构,支持横向扩展!

二、安装MongoDB

MongoDB支持yum安装,但是版本比较老,所以我们使用创建一个新的扩展源来安装。

代码语言:javascript
复制
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
代码语言:javascript
复制
systemctl start mongod  //启动服务
代码语言:javascript
复制
vim /etc/mongod.conf    //查看配置文件

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1,192.168.59.131  # Listen to local interface only, comment to listen on all interfaces.
如上添加IP 的时候一定需要用 逗号 分开!

[[email protected] ~]# systemctl restart mongod
[[email protected] ~]# mongo --host 192.168.59.131 --port 27017

然后就可以使用配置的IP地址去连接!
  • 在本机可以直接运行命令mongo进入到mongodb shell中
  • 如果mongodb监听端口并不是默认的27017,则在连接的时候需要加–port 选项,例如
代码语言:javascript
复制
mongo --port 27018
  • 连接远程mongodb,需要加–host,例如
代码语言:javascript
复制
mongo --host  127.0.0.1
  • 如果设置了验证,则在连接的时候需要带用户名和密码
代码语言:javascript
复制
mongo -uusername -ppasswd --authenticationDatabase db   //这个和MySQL挺像
四、MongoDB用户管理
代码语言:javascript
复制
use admin   //需要切换到admin库

创建一个新的用户并指定角色和密码等!

代码语言:javascript
复制
db.createUser( { user: "admin", customData: {description: "superuser"}, pwd: "admin122", roles: [ { role: "root", db: "admin" } ] } )

user指定用户,customData为说明字段,可以省略,pwd为密码,roles指定用户的角色,db指定库名

再次增加一个测试用户:

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

关于 MongoDB 角色:

代码语言:javascript
复制
Read:允许用户读取指定数据库

readWrite:允许用户读写指定数据库

dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户

clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。

readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限

readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限

userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限

dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。

root:只在admin数据库中可用。超级账号,超级权限

列出所有用户,需要切换到admin库

代码语言:javascript
复制
db.system.users.find()

查看当前库下所有的用户

代码语言:javascript
复制
show users

删除用户

代码语言:javascript
复制
db.dropUser('admin')

若要用户生效,还需要编辑启动脚本

代码语言:javascript
复制
vim /usr/lib/systemd/system/mongod.service

在OPTIONS=后面增--auth

Environment="OPTIONS=--auth -f /etc/mongod.conf"

[[email protected] ~]# systemctl daemon-reload

[[email protected] ~]# systemctl restart mongod

[[email protected] ~]# ps aux | grep mongod
mongod     5258  5.1  4.0 971176 40728 ?        Sl   17:45   0:00 /usr/bin/mongod --auth -f /etc/mongod.conf
root       5283  0.0  0.0 112668   968 pts/0    R+   17:45   0:00 grep --color=auto mongod

使用授权的用户登录格式如下:

代码语言:javascript
复制
mongo -u "admin" -p "asd9577" --authenticationDatabase "admin"

如果不使用账号和密码的方式再去登录就会报错:

代码语言:javascript
复制
> show users
2017-10-17T17:48:50.903+0800 E QUERY    [thread1] Error: not authorized on admin to execute command { usersInfo: 1.0 } :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.getUsers@src/mongo/shell/db.js:1539:1
shellHelper.show@src/mongo/shell/utils.js:752:9
shellHelper@src/mongo/shell/utils.js:659:15
@(shellhelp2):1:1

可以看到受限!

创建一个账户可以同时针对两个库授权: test1用户对db1库读写,对db2库只读。

代码语言:javascript
复制
db.createUser( { user: "test1", pwd: "123aaa", roles: [ { role: "readWrite", db: "db1" }, {role: "read", db: "db2" } ] } )

之所以先use db1,表示用户在 db1 库中创建,就一定要db1库验证身份,即用户的信息跟随随数据库。比如上述 test1虽然有 db2 库的读取权限,但是一定要先在db1库进行身份验证,直接访问会提示验证失败。

代码语言:javascript
复制
use db2
db.auth("test1", "123aaa")

但是当我I们再次使用db1 去验证那一定是可以的!

代码语言:javascript
复制
> db.auth("test1","123aaa")
1
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016/10/17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、了解 MongoDB
    • MongoDB 特点:
      • MongoDB和关系型数据库对比:
        • 关系型数据库数据结构:
          • MongoDB数据结构:
            • 总结:
            • 二、安装MongoDB
            • 三、连接MongoDB
            • 四、MongoDB用户管理
            相关产品与服务
            云数据库 Redis
            腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档