一、简介
MongoDB是一个介于关系数据库和非关系数据库之间的文档数据库,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是 json二进制化 的 Bson对象,因此可以存储比较复杂的数据类型。
二、特点
Mongo内部执行引擎为JS解释器,把文档存储成Bson结构,转换为JS对象,并可以通过熟悉的JS语法来操作。
Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
三、MongoDB和传统数据库对比
传统数据库:
结构化数据,定好了表结构,每一行的内容,必须符合表结构,就是说----列的个数、类型都是一样的
MongoDB:
表下面的每篇文档都可以有自己独特的结构(Json对象都可以有自己独特的属性和值)
四、安装
官网地址:https://www.mongodb.com/
下载地址:https://www.mongodb.com/download-center?jmp=nav#community #建议下载stable版本
下载命令:wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.4.tgz
备注:直接解压就可以用的
核心:
mongod 服务器端
mongos 查询路由器(集群分片时用)
mongo 客户端
二进制导出导入:
mongodump 数据库整体导出bson数据(适合做备份)
mongorestore 数据库整体导入bson
bsondump bson转换为json
数据导出导入:
mongoexport 导出json,csv,tsv格式(只是导出数据,适合于和其他数据库交互用)
mongoimport 导入json,csv,tsv(只是数据导入)
诊断工具:
mongostats
mongotop
mongosniff 用来检查mongo运行状态
五、启动
$ mkdir /mongo/{data,logs} -p #创建数据目录和日志目录
$ mv /usr/local/src/mongodb-linux-x86_64-3.2.19 /usr/local/mongodb
$ /usr/local/mongodb/bin/mongod --dbpath /mongo/data/ --logpath /mongo/logs/test.log --fork --port 27017 --bind_ip 0.0.0.0 [--smallfiles]
about to fork child process, waiting until server is ready for connections.
forked process: 1628
child process started successfully, parent exiting
$ ps -ef | grep mongo
root 1628 1 3 13:45 ? 00:00:00 /usr/local/mongodb/bin/mongod --dbpath /mongo/data/ --logpath /mongo/logs/test.log --fork --port 27017
root 1648 1428 0 13:46 pts/0 00:00:00 grep --color=auto mongo
#连接数据库
$ /usr/local/mongodb/bin/mongo
参数说明:
--dppath 数据库存储目录
--logpath 日志运行目录
--port 端口,默认时27017,可以不用写
--fork 后台运行
--bind_ip 绑定的ip地址,默认是127.0.0.1
也可以将配置写入文件中,启动的时候指定配置文件
手动创建:/etc/mongod.conf
logpath=/mongo/logs/test.log # log路径
logappend=true # 追加方式写入log
dbpath=/mongo/data/ # 数据库路径
fork = true # 守护进程
port = 27017 # 端口
noauth = true # 不进行安全验证
#auth = true # 进行安全验证
bind_ip = 0.0.0.0 # 绑定ip
smallfiles = true
profile = 1 #收集慢查询数据,1--开启,0--关闭,2--收集所有数据,不加默认为0
slowms = 200 #超过200毫秒语句为慢sql,默认为100
#启动
$ /usr/local/mongodb/bin/mongod --config /etc/mongod.conf
#远程连接
mongo ip:port
备注:
mongdb是比较耗费内存和磁盘空间(一般占3-4G)的,如果虚拟机测试,在启动的时候可以加上 --smallfiles 参数。
六、mongo开启用户名密码验证
1、mongod启动时指定 –auth 参数
$ /usr/local/mongodb/bin/mongod --dbpath /mongo/data/ --logpath /mongo/logs/test.log --fork --port 27017 --bind_ip 0.0.0.0 --smallfiles --auth
2、登陆到mongo中,设置密码和权限
> use admin
> db.createUser({
"user" : "user",
"pwd" : "password",
"roles" : [{"role" : "dbAdmin","db" : "admin"},
{"role" : "dbOwner","db" : "admin"},
{"role" : "read","db" : "admin"},
{"role" : "readWrite","db" : "admin"},
{"role" : "userAdmin","db" : "admin"},
{"role" : "root","db" : "admin"}]
})
#设置普通数据库权限
> use test
> db.createUser({
"user" : "user",
"pwd" : "password",
"roles" : [{"role" : "dbAdmin","db" : "test"},
{"role" : "dbOwner","db" : "test"},
{"role" : "read","db" : "test"},
{"role" : "readWrite","db" : "test"},
{"role" : "userAdmin","db" : "test"},
{"role" : "root","db" : "test"}]
})
3、role 类型
数据库用户角色(Database User Roles)
read:授予User只读数据的权限
readWrite:授予User读写数据的权限
数据库管理角色(Database Administration Roles):
dbAdmin:在当前dB中执行管理操作
dbOwner:在当前DB中执行任意操作
userAdmin:在当前DB中管理User
备份和还原角色(Backup and Restoration Roles):
backup
restore
跨库角色(All-Database Roles):
readAnyDatabase:授予在所有数据库上读取数据的权限
readWriteAnyDatabase:授予在所有数据库上读写数据的权限
userAdminAnyDatabase:授予在所有数据库上管理User的权限
dbAdminAnyDatabase:授予管理所有数据库的权限
集群管理角色(Cluster Administration Roles):
clusterAdmin:授予管理集群的最高权限
clusterManager:授予管理和监控集群的权限,A user with this role can access the config and local databases, which are used in sharding and replication, respectively.
clusterMonitor:授予监控集群的权限,对监控工具具有readonly的权限
hostManager:管理Server
4、连接
mongo -u user -p password --host host_ip dbname
mongo mongodb://user:password@host_ip/dbname
5、删除用户
> use admin
> db.dropUser("user")
> use test
> db.dropUser("user")