21.26 mongodb介绍
l官网www.mongodb.com, 当前最新版3.4
lC++编写,基于分布式的,属于NoSQL的一种
l在NoSQL中是最像关系型数据库的
lMongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档、数组及文档数组。
l关于JSON http://www.w3school.com.cn/json/index.asp
l因为基于分布式,所以很容易扩展
epel自带的mongodb版本为2.6,我们需要安装3.4版本
官方安装文档cd /etc/yum.repos.d/
vim mongodb-org-3.4.repo[mongodb-org-3.4]name=MongoDB Repositorybaseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/gpgcheck=1enabled=1gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc[root@aminglinux-149 ~]# yum list |grep mongodb[root@aminglinux-149 ~]# cd /etc/yum.repos.d/[root@aminglinux-149 yum.repos.d]# vim mongodb-org-3.4.repo[root@aminglinux-149 yum.repos.d]# yum list |grep mongodb//可以看到mongodb相关的rpm包http://fedora.cs.nctu.edu.tw/epel/7/x86_64/repodata/c1ddcd6a3c6455e6d367639727ce3a67c45f2f91ae8621563d174d8a722eaf31-primary.xml.gz: [Errno 14] HTTP Error 404 - Not Found正在尝试其它镜像。To address this issue please refer to the below wiki article https://wiki.centos.org/yum-errorsIf above article doesn't help to resolve this issue please use https://bugs.centos.org/.http://my.fedora.ipserverone.com/epel/7/x86_64/repodata/de34af7e1d9f800981fa2af3a2cd888a3397d80ab50da8b91a4acee99512cdb7-updateinfo.xml.bz2: [Errno 14] HTTP Error 404 - Not Found正在尝试其它镜像。collectd-write_mongodb.x86_64 5.8.1-1.el7 epel mongodb.x86_64 2.6.12-6.el7 epel mongodb-org.x86_64 3.4.18-1.el7 mongodb-org-3.4mongodb-org-mongos.x86_64 3.4.18-1.el7 mongodb-org-3.4mongodb-org-server.x86_64 3.4.18-1.el7 mongodb-org-3.4mongodb-org-shell.x86_64 3.4.18-1.el7 mongodb-org-3.4mongodb-org-tools.x86_64 3.4.18-1.el7 mongodb-org-3.4mongodb-server.x86_64 2.6.12-6.el7 epel mongodb-test.x86_64 2.6.12-6.el7 epel nodejs-mongodb.noarch 1.4.7-1.el7 epel php-mongodb.noarch 1.0.4-1.el7 epel php-pecl-mongodb.x86_64 1.1.10-1.el7 epel poco-mongodb.x86_64 1.6.1-3.el7 epel syslog-ng-mongodb.x86_64 3.5.6-3.el7 epel [root@aminglinux-149 yum.repos.d]# yum install -y mongodb-org已加载插件:fastestmirror, langpacksLoading mirror speeds from cached hostfile * base: mirrors.aliyun.com * epel: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirror.bit.edu.cn正在解决依赖关系--> 正在检查事务---> 软件包 mongodb-org.x86_64.0.3.4.18-1.el7 将被 安装--> 正在处理依赖关系 mongodb-org-tools = 3.4.18,它被软件包 mongodb-org-3.4.18-1.el7.x86_64 需要--> 正在处理依赖关系 mongodb-org-shell = 3.4.18,它被软件包 mongodb-org-3.4.18-1.el7.x86_64 需要--> 正在处理依赖关系 mongodb-org-server = 3.4.18,它被软件包 mongodb-org-3.4.18-1.el7.x86_64 需要--> 正在处理依赖关系 mongodb-org-mongos = 3.4.18,它被软件包 mongodb-org-3.4.18-1.el7.x86_64 需要--> 正在检查事务---> 软件包 mongodb-org-mongos.x86_64.0.3.4.18-1.el7 将被 安装---> 软件包 mongodb-org-server.x86_64.0.3.4.18-1.el7 将被 安装---> 软件包 mongodb-org-shell.x86_64.0.3.4.18-1.el7 将被 安装---> 软件包 mongodb-org-tools.x86_64.0.3.4.18-1.el7 将被 安装已安装: mongodb-org.x86_64 0:3.4.18-1.el7 作为依赖被安装: mongodb-org-mongos.x86_64 0:3.4.18-1.el7 mongodb-org-server.x86_64 0:3.4.18-1.el7 mongodb-org-shell.x86_64 0:3.4.18-1.el7 mongodb-org-tools.x86_64 0:3.4.18-1.el7 完毕!
21.28 连接mongodb
systemctl start mongod //启动服务[root@aminglinux-149 yum.repos.d]# systemctl start mongod
在本机可以直接运行命令mongo进入到mongodb shell中
MongoDB shell version v3.4.18connecting to: mongodb://127.0.0.1:27017MongoDB server version: 3.4.18Welcome to the MongoDB shell.For interactive help, type "help".For more comprehensive documentation, see http://docs.mongodb.org/Questions? Try the support group http://groups.google.com/group/mongodb-userServer has startup warnings: 2018-11-19T16:58:05.058+0800 I CONTROL [initandlisten] 2018-11-19T16:58:05.058+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.2018-11-19T16:58:05.058+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.2018-11-19T16:58:05.058+0800 I CONTROL [initandlisten] 2018-11-19T16:58:05.058+0800 I CONTROL [initandlisten] 2018-11-19T16:58:05.058+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.2018-11-19T16:58:05.058+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'2018-11-19T16:58:05.058+0800 I CONTROL [initandlisten] >
如果mongodb监听端口并不是默认的27017,则在连接的时候需要加--port 选项,例如
mongo --port 27018连接远程mongodb,需要加--host,例如mongo --host 127.0.0.1如果设置了验证,则在连接的时候需要带用户名和密码mongo -uusername -ppasswd --authenticationDatabase db //这个和MySQL挺像指定ip和端口
21.29 mongodb用户管理
use admin//需要切换到admin库
db.createUser( { user: "admin", customData: {description: "superuser"}, pwd: "admin122", roles: [ { role: "root", db: "admin" } ] } )user指定用户,customData为说明字段,可以省略,pwd为密码,roles指定用户的角色,db指定库名 use admin //切换到admin库db.system.users.find() //列出所有用户,需要切换到admin库show users //查看当前库下所有的用户db.dropUser('admin') //删除用户若要用户生效,还需要编辑启动脚本vim /usr/lib/systemd/system/mongod.service,在OPTIONS=后面增--auth重启服务systemctl restart mongodmongo -u "admin" -p "admin122" --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库进行身份验证,直接访问会提示验证失败。use db2db.auth("test1", "123aaa")用户角色:
Read:允许用户读取指定数据库readWrite:允许用户读写指定数据库dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profileuserAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。root:只在admin数据库中可用。超级账号,超级权限db.version() //查看版本
use userdb //如果库存在就切换,不存在就创建show dbs //查看库,此时userdb并没有出现,这是因为该库是空的,还没有任何集合,只需要创建一个集合就能看到了 db.createCollection('clo1') //创建集合clo1,在当前库下面创建db.dropDatabase() //删除当前库,要想删除某个库,必须切换到那个库下db.stats() //查看当前库的信息db.serverStatus() //查看mongodb服务器的状态