一.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,是不重复的
注:
在查询的后面加上explain(),可以显示查询的详细参数,包括索引,时间等信息
四.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
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/,当然该目录需要提前建立,这个目录里面存放该数据库实例的备份数据。
实例:
2、MongoDB数据库恢复
mongorestore -h dbhost -d dbname --dir dbdirectory
参数或名:
h: MongoDB所在服务器地址
d: 需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
-dir: 备份数据所在位置,例如:/home/mongodump/itcast/
-drop: 恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用!