设为首页 收藏本站
查看: 1756|回复: 0

[经验分享] MongoDB安装及常用操作

[复制链接]
累计签到:29 天
连续签到:1 天
发表于 2018-10-26 07:46:38 | 显示全部楼层 |阅读模式
  一、MongoDB简介
  1、介绍
  1)MongoDB是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统,也属于NoSQL。
  2)在高负载的情况下,可以添加更多的节点,可以保证服务器性能。
  3)MongoDB旨在为WEB应用提供可扩展的高性能数据存储解决方案。
  4)MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成;MongoDB文档类似于JSON对象;字段值可以包括其他文档,数组及文档数组。
  2、MongoDB和关系型数据库对比
SQL术语/概念MongoDB术语/概念解释说明databasedatabase数据库tablecollection数据库表/集合rowdocument数据记录行/文档columnfiled数据字段/域indexindex索引table joins表连接,MongoDB不支持primary keyprimary key主键,MongoDB自动将_id字段设置为主键
DSC0000.png

DSC0001.png

  二、MongoDB安装
  如果安装epel扩展源,可以安装MongoDB2.4版本;但是我们要安装3.0版本,官方提供的源只支持64位系统。
  1、搭建yum源
  [root@centos ~]# vim /etc/yum.repos.d/mongodb-org-3.0.repo
  [mongodb-org-3.0]
  name=MongoDB Repository
  baseurl=http://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.0/x86_64
  gpgcheck=0
  enabled=1
  注意:若后续要用yum工具,要改成 enabled=0,即恢复使用原来的yum源了。
  2、安装
  [root@centos ~]# yum install -y mongodb-org
  注意:下载时候因为是国外的源,有可能会出现下载中断的情况。
  3、修改配置文件
  [root@centos ~]# vim /etc/mongod.conf                   //去掉三处注释
  fork: true
  pidFilePath: /var/run/mongodb/mongod.pid
  bindIp:
DSC0002.png

  4、修改内核以及限制参数
  [root@centos ~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
  [root@centos ~]# echo never > /sys/kernel/mm/transparent_hugepage/defrag
  [root@centos ~]# vim /etc/security/limits.conf                        //末尾添加
  mongod soft nofile 64000
  mongod hard nofile 64000
  mongod soft nproc 32000
  mongod hard nproc 32000
  5、启动MongoDB
  [root@centos ~]# service mongod start
  [root@centos ~]# ls /var/lib/mongo/                                     //查看生成的文件
journal  local.0  local.ns  mongod.lock  storage.bson  _tmp  注意:若启动失败,可以用下面命令启动,会有错误提示信息
  [root@centos ~]# mongod -f /etc/mongod.conf
  三、连接MongoDB
  1、本机直接运行下面命令进入到mongodb shell中
  [root@centos ~]# mongo
  2、若监听端口并不是默认的27017,则连接时需加--port选项,例如端口号被修改为27018:
  [root@centos ~]# mongo --port 27018
  3、远程连接MongoDB,需要加--host选项,例如
  [root@centos ~]# mongo --host 127.0.0.1
  4、如果设置了验证,则连接时需加上用户名和密码(与MySQL相似),例如
  [root@centos ~]# mongo -utpp -p123456                //用户名tpp,密码123456
  四、MongoDB用户管理
  1、mongodb用户是针对库来的,建立用户时要先进入到对应的库里
  > use test
switched to db test  2、创建用户及角色
  > db.createUser({user:"admin",pwd:"123456",roles:[{role:'dbOwner',db:'userdb'}]})
  Successfully added user: {
  "user" : "admin",
  "roles" : [
  {
  "role" : "dbOwner",
  "db" : "userdb"
  }
  ]
  }
  3、查看所有用户
  > use admin                                         //只有在admin库里才能查看到所有用户
  switched to db admin
  > db.system.users.find()                        //可以看到之前创建的admin用户
{ "_id" : "test.admin", "user" : "admin", "db" : "test", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "Ye/s***eMZ5IsVUaNRHN6A==", "storedKey" : "yocgLHpm2MUlL/VmViLZVirJBAE=", "serverKey" : "M6Rj/hxMVbgvaF9TmG4y+k7Dg3g=" } }, "roles" : [ { "role" : "dbOwner", "db" : "userdb" } ] }  4、查看当前库下所有用户
  > use test                                             //因为admin库没有用户,而test库有
  switched to db test
  > show users                                       //查看当前库下所有用户
  {
  "_id" : "test.admin",
  "user" : "admin",
  "db" : "test",
  "roles" : [
  {
  "role" : "dbOwner",
  "db" : "userdb"
  }
  ]
  }
  5、删除用户
  > db.dropUser('admin')                      //要先进入该用户所在的库
true  五、MongoDB库管理
  1、查看版本
  > db.version()
  3.0.7
  2、创建库
  > use userdb                                //如果库存在就切换
  switched to db userdb
  > db.createCollection('mycol')       //创建集合mycol,当创建了集合后,我们才可以看到userdb库
  { "ok" : 1 }
  3、查看库
  > show dbs
  admin   0.078GB
  local   0.078GB
  userdb  0.078GB
  4、删除当前所在库
  > db.dropDatabase()
  { "dropped" : "userdb", "ok" : 1 }
  > show dbs
  admin  0.078GB
  local  0.078GB
  5、查看当前库状态信息
  > use admin
  switched to db admin
  > db.stats()
  {
  "db" : "admin",
  "collections" : 4,
  "objects" : 10,
  "avgObjSize" : 67.2,
  "dataSize" : 672,
  "storageSize" : 28672,
  "numExtents" : 4,
  "indexes" : 3,
  "indexSize" : 24528,
  "fileSize" : 67108864,
  "nsSizeMB" : 16,
  "extentFreeList" : {
  "num" : 0,
  "totalSize" : 0
  },
  "dataFileVersion" : {
  "major" : 4,
  "minor" : 22
  },
  "ok" : 1
  }
  6、查看mongodb服务器的状态
  > db.serverStatus()
  六、MongoDB创建集合
  语法:db.cretateCollection(name,option)
  > use mydb
  switched to db mydb
  > db.createCollection('myclo',{capped:true,autoIndexID:true,size:6142800,max:10000})
  { "ok" : 1 }
  语法说明:
  name:集合的名字
  option:用来配置集合的参数(都为可选)
  1)capped true/false:如果为true,则启用封顶集合,封顶集合是固定大小的集合,当它达到其最大值,会自动覆盖最早的条目;如果为false,则也需要指定尺寸参数。
  2)autoIndexID true/false:如果为true,自动创建索引_id字段的默认值是false。
  3)size:指定最大大小字节封顶集合;如果封顶是true,那么还需指定这个字段,单位为B。
  4)max:指定封顶集合允许在文件的最大数量。
  七、MongoDB数据管理
  1、查看集合
  > show collections                   //也可以使用show tables
  myclo
  system.indexes
  2、插入文档数据
  > db.Account.insert({AccountID:1,UserName:"123",password:"123456"})
WriteResult({ "nInserted" : 1 })  > db.Account.insert({AccountID:2,UserName:'aaa',password:'123456'})
WriteResult({ "nInserted" : 1 })  注意:如果Account集合不存在,直接插入数据,mongodb会自动创建该集合
  3、更新文档数据
  > db.Account.update({AccountID:1},{"$set":{"Age":20}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })  4、查看所有文档
  > db.Account.find()
  { "_id" : ObjectId("5666000a6ee7f810bc23f731"), "AccountID" : 1, "UserName" : "123", "password" : "123456", "Age" : 20 }
  { "_id" : ObjectId("566601e16ee7f810bc23f732"), "AccountID" : 2, "UserName" : "aaa", "password" : "123456" }
  5、根据条件查询文档
  > db.Account.find({AccountID:2})
{ "_id" : ObjectId("566601e16ee7f810bc23f732"), "AccountID" : 2, "UserName" : "aaa", "password" : "123456" }  > db.Account.find({"UserName":"aaa"})
{ "_id" : ObjectId("566601e16ee7f810bc23f732"), "AccountID" : 2, "UserName" : "aaa", "password" : "123456" }  6、根据条件删除文档
  > db.Account.remove({AccountID:1})
WriteResult({ "nRemoved" : 1 })  > db.Account.find()
{ "_id" : ObjectId("566601e16ee7f810bc23f732"), "AccountID" : 2, "UserName" : "aaa", "password" : "123456" }  7、删除集合
  > db.Account.drop()
true  > show collections
  myclo
  system.indexes
  8、查看集合状态
  > use mydb                                 //先进入该库
switched to db mydb  > db.printCollectionStats()
  myclo
  {
  "ns" : "mydb.myclo",
  "count" : 0,
  "size" : 0,
  "numExtents" : 1,
  "storageSize" : 6144000,
  "lastExtentSize" : 6144000,
  "paddingFactor" : 1,
  "paddingFactorNote" : "paddingFactor is unused and unmaintained in 3.0. It remains hard coded to 1.0 for compatibility only.",
  "userFlags" : 1,
  "capped" : true,
  "max" : 10000,
  "maxSize" : 6144000,
  "nindexes" : 1,
  "totalIndexSize" : 8176,
  "indexSizes" : {
  "_id_" : 8176
  },
  "ok" : 1
  }
  ---
  system.indexes
  {
  "ns" : "mydb.system.indexes",
  "count" : 1,
  "size" : 112,
  "avgObjSize" : 112,
  "numExtents" : 1,
  "storageSize" : 8192,
  "lastExtentSize" : 8192,
  "paddingFactor" : 1,
  "paddingFactorNote" : "paddingFactor is unused and unmaintained in 3.0. It remains hard coded to 1.0 for compatibility only.",
  "userFlags" : 0,
  "capped" : false,
  "nindexes" : 0,
  "totalIndexSize" : 0,
  "indexSizes" : {
  },
  "ok" : 1
  }
  ---
  参考文章
  MongoDB用户与角色管理的介绍:http://bbs.51cto.com/thread-1146654-1.html


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-626518-1-1.html 上篇帖子: mongodb 启动步骤 下篇帖子: 搭建高可用MongoDB集群——副本集部署
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表