一.Mongodb的简单介绍 NoSQL简介
NoSQL(Not Only SQL ),意即“不仅仅是SQL” ,指的是非关系型的数据库 。是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。
关系型数据库中的表都是存储一些结构化的数据,每条记录的字段的组成都一样,即使不是每条记录都需要所有的字段,但数据库会为每条数据分配所有的字段。而非关系型数据库以键值对(key-value)存储,它的结构不固定,每一条记录可以有不一样的键,每条记录可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。
** NoSql数据库优缺点**
在优势方面主要体现在下面几点:- 简单的扩展 快速的读写 低廉的成本 灵活的数据模型
在不足方面主要有下面几点: 不提供对SQL的支持 支持的特性不够丰富 现有的产品不够成熟
MongoDB简介
MongoDB是用C++语言编写的非关系型数据库。特点是高性能、易部署、易使用,存储数据十分方便,主要特性有: 面向集合存储,易于存储对象类型的数据 模式自由 支持动态查询 支持完全索引,包含内部对象 支持复制和故障恢复 使用高效的二进制数据存储,包括大型对象 文件存储格式为BSON(一种JSON的扩展)
MongoDB基本概念 文档(document)是MongoDB中数据的基本单元,非常类似于关系型数据库系统中的行(但是比行要复杂的多)。 集合(collection)就是一组文档,如果说MongoDB中的文档类似于关系型数据库中的行,那么集合就如同表。 MongoDB的单个计算机可以容纳多个独立的数据库,每一个数据库都有自己的集合和权限。 MongoDB自带简洁但功能强大的JavaScript shell,这个工具对于管理MongoDB实例和操作数据作用非常大。 每一个文档都有一个特殊的键”_id”,它在文档所处的集合中是唯一的,相当于关系数据库中的表的主键。
二.mongodb的安装和配置 安装环境centos7
1.下载包 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.12.tgz
2、解压tar -zxvf mongodb-linux-x86_64-3.2.12.tgz
3、移动到指定位置mv mongodb-linux-x86_64-3.2.12/ /usr/local/mongodb
4、在/usr/local/mongodb下创建文件夹
存放数据 mkdir /data 存放日志mkdir /logs
5、在/usr/local/mongodb/bin下新建配置vi mongodb.conf
dbpath = /usr/local/mongodb/data/db #数据文件存放目录 logpath = /usr/local/mongodb/logs/mongodb.log #日志文件存放目录 port = 27017 #端口 fork = true #以守护程序的方式启用,即在后台运行
bind_ip =127.0.0.1 #绑定ip verbose = vvvvv 日志级别,可以写1个v,最多5个v,v越多越详细
mongod 为服务端 mongo 为客户端
6、环境变量配置vim /etc/profile export MONGODB_HOME=/usr/local/mongodb export PATH=$PATH:$MONGODB_HOME/bin 保存后,重启系统配置source /etc/profile
7、启动在/usr/local/mongodb/bin下mongod -f mongodb.conf 或 ./mongod -f mongodb.conf 启动后查看
8、关闭mongod -f ./mongodb.conf --shutdown 或./mongod -f ./mongodb.conf --shutdown
9..连接使用mongod 客户端连接mongod服务,出现警告,安装时最好不要用root用户安装, 使用admin用户退出,并查看退出日志
三.mongodb的基本使用增删改查
1.创建库和表 表是一个集合,里面的数据是json格式的,前面的id是全局id,是不重复的
2.数据的查找 find()
使用for循环插入多条数据
count()查询数量
条件查询,skip跳过前三条,查询2个,按id排序
注: 在查询的后面加上explain(),可以显示查询的详细参数,包括索引,时间等信息
3.数据更新 update()
更新多个字段数据的其中一个
复制一条空数据,有时候会出现还是空数据
后面加上true,如果是空自动插入一条数据
4.更新多条数据 这样只能更新一条
使用{$set:{c:2}},false,true即可
5.删除数据 删除为了安全,必须给参数
删除表
四.mongostat工具
实时采集
参数介绍 inserts 每秒插入数量 query 每秒查询数量 update 每秒更新数量 delete 每秒删除数量 getmore 查询大数据的时候不能一次显示完,每次获取以后更多的数据 command 执行命令的数量 flushes 每秒虚拟映射的次数,每次内存数据刷到硬盘上 vsize 占据内存大小 res qr | qw 读队列和写队列,重要 ar | aw 当前客户端活跃的数量 netIn 输入流量 netOut 输出流量 conn 当前的连接数量
五.mongoDB相关安全设置 1.创建用户 角色类型:内建类型(read,readWrite,dbAdmin,dbOwner,userAdmin) 添加管理用户(mongoDB 没有无敌用户root,只有能管理用户的用户 userAdminAnyDatabase)
注:添加完用户后可以使用show users或db.system.users.find()查看已有用户 use mydb
db.system.users.remove({user:"root"}) db.system.users.find()
2、添加完管理用户后,关闭MongoDB,并使用权限方式再次开启MongoDB,这里注意不要使用kill直接去杀掉mongodb进程,(如果这样做了,请去data/db目录下删除mongo.lock文件),可以使用db.shutdownServer()关闭
谨记:先在不开启认证的情况下,创建用户,之后关闭服务,然后再开启认证,才生效。
开启权限认证 vim mongodb.conf auth = true
重新启动 [root@server1 bin]# mongo 127.0.0.1:27017
查看日志,认证开启
3.进入mongo shell,使用admin数据库并进行验证,如果不验证,是做不了任何操作的。验证之后还是做不了操作,因为admin只有用户管理权限,下面创建student用户,用户都跟着库走。 [root@server1 bin]# mongo 127.0.0.1:27017
4.使用创建的用户student登录进行数据库操作
5、删除用户 db.dropUser("user") 删除指定用户 db.dropAllUsers() 删除当前数据下所有用户
六.mongodb的备份恢复 1、MongoDB数据库备份 mongodump -h dbhost -d dbname -o dbdirectory 参数说明: -h: MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017 -d: 需要备份的数据库实例,例如:test -o: 备份的数据存放位置,例如:/home/mongodump/,当然该目录需要提前建立,这个目录里面存放该数据库实例的备份数据。 实例:
备份mydb库
删除testdb表
2、MongoDB数据库恢复 mongorestore -h dbhost -d dbname --dir dbdirectory
参数或名: h: MongoDB所在服务器地址 d: 需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2 -dir: 备份数据所在位置,例如:/home/mongodump/itcast/ -drop: 恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用!