MongoDB 安装配置及用户权限
参考: http://www.runoob.com/
mongodb/mongodb-linux-install.html
介绍:
a MongoDB是由C++语言编写的一个基于分布式文件存储的开源数据库系统,它的目的在于为WEB应用提供可扩展的高性能数据存储解决方案。
b MongoDB是一个介于
关系型数据库和非关系型数据库之间的产品,是非关系型数据库当中功能最丰富,最像关系型数据库的。它支持的数据结构非常松散,会将数据存储为一个文档,数据结构由键值对(key=>value)组成,是类似于json的bson格式,字段值可以包含其它文档、数组和文档数组,因此可以存储比较复杂的数据类型。
c MongoDB最大的特点就是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系型数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
d MongoDB的主要特点(来自于网上,主要为了我们初步了解)
d.1 MongoDB提供了一个面向文档存储,操作起来比较简单和容易的非关系型数据库。
d.2 你可以在MongoDB记录中设置任何属性的索引来实现更快的排序。
d.3 你可以通过本地u或者网络创建数据镜像,这使得MongoDB含有更强的扩展性。
d.4 如果负载的增加(需要更多的存储空间和更强的处理能力),它可以分布在计算机网络中的其它节点上,这就是所谓的分片。
d.5 MongoDB支持丰富的查询表达式,查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象和数组。 d.6 MongoDB使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段。 d.7 MongoDB中的Map/Reduce主要是用来对数据进行批量处理和聚合操作,Map函数调用emit(key,value)遍历集合中所有的记录,将key于value传递给Reduce函数进行处理。另外Map函数和Reduce函数是使用JavaScript编写的,所以可以通过db.runCommand和mapreduce命令来执行MapReduce操作。 d.8 GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
d.9 MongoDB允许在服务端执行脚本,可以用JavaScript编写某个函数,直接在服务端执行,也可以吧函数的定义存储在服务端,下次直接调用即可。
d.10 MongoDB支持各种编程语言:RUBY、PYTHON、JAVA、C++、PHP、C#等多种语言并且MongoDB的安装也非常简单
f MongoDB官网:http://www.mongodb.org/
g MongoDB学习网站:http://www.runoob.com/mongodb
一、MongoDB的安装
下载社区版
https://www.mongodb.com/download-center#community
tar -zxvf mongodb-linux-x86_64-3.2.8.tgz
建立两个目录:
/u01/mongnodb/
/u01/mongodb/data/db
/u01/mongodb/logs
修改别名
vim /etc/hosts
127.0.0.1 bogon
启动
./bin/mongod --dbpath /u01/mongodb/data/db
输入命令lsof -i :27017,监测端口已经在使用中,所以说启动已经完成。
二、MongoDB配置
MongoDB的启动参数,可以在命令行指定,也可以通过配置文件
./mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/log/mongod.log --fork --auth
或者
./mongo --config=/u01/mongnodb/mongno.conf
cat /u01/mongnodb/mongno.conf
#Data file Path
#dbpath=/u01/mongodb/mongodb-linux-x86_64-rhel70-3.4.9/bin/mongod --dbpat
dbpath = /u01/mongodb/data/db
#Log file path
logpath = /u01/mongodb/mongodb-linux-x86_64-rhel70-3.4.9/logs/mongodb.log
logAppend=true
#绑定IP
#bind_ip=127.0.0.1
#port
port = 27017
# 以守护进程方式启动
fork = true
#日志输出方式,使用追加的方式写日志
logappend = true
#PID File
pidfilepath=/u01/mongodb/mongodb-linux-x86_64-rhel70-3.4.9/mongodb.pid
#关闭http接口,默认关闭27018端口访问
#nohttpinterface = true
#声明这是一个集群分片
#shardsvr = true
#设置每个数据库将被保存在一个单独的目录
#directoryperdb=true
#开启认证
#auth = true
#设置开启简单的rest API ,置后打开28017网页端口
#rest = true
##分片配置
sharding:
##指定config server
configDB: 10.96.29.2:29017,10.96.29.2:29018,10.96.29.2:29019
三、MongoDB用户授权和管理
1、mongodb安装好后第一次进入是不需要密码的,也没有任何用户,通过shell命令可直接进入,cd到mongodb目录下的bin文件夹,执行命令./mongo即可
# ./bin/mongo
1)显示数据库
> show dbs
admin 0.000GB
local 0.000GB
2)使用/创建admin的库。权限管理就要使用admin数据库
> use admin
switched to db admin
3)我第一次登陆时只有一个system.version表,system.users都没有,没关系可以建一个用户就有了。
system.user表,这张表是用来存放超级管理员的
> show collections
system.users
system.version
4)查询system.user表中含有数据否
> db.system.users.find()
{ "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "Fyaf2IGrGbC+kDyTZpe/tg==", "storedKey" : "Um7slisABOWPosz8h0XsxV18b68=", "serverKey" : "AwpUC8YlyvpGnncuxUaYzHKEkuw=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }
{ "_id" : "svideo.vdb", "user" : "vdb", "db" : "svideo", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "C8xTDX0YZqOxybT/2lkvgw==", "storedKey" : "9Vty4qpDso2F5793zIOoscobefk=", "serverKey" : "q8d+EwCuQcCLeTTGIAHC3djnKmw=" } }, "roles" : [ { "role" : "dbOwner", "db" : "svideo" } ] }
2、添加管理用户(mongoDB 没有无敌用户root,只有能管理用户的用户 userAdminAnyDatabase),
db.createUser({
user:'admin',
pwd:'123456',
roles:[
{role:'userAdminAnyDatabase',db:'admin'},
{role:'dbAdminAnyDatabase',db:'admin'},
{role:'clusterMonitor',db:'admin'}
]
})
use mydb
db.createUser({
user:'vdb',
pwd:'123456',
roles:[{role:'dbOwner',db:'svideo'}]
})
角色:
userAdminAnyDatabase
dbOwner
readWrite
3、添加完管理用户后,关闭MongoDB,并使用权限方式再次开启MongoDB,这里注意不要使用kill直接去杀掉mongodb进程,(如果这样做了,请去data/db目录下删除mongo.lock文件),可以使用db.shutdownServer()关闭
> db.shutdownServer()
2017-09-15T21:23:01.223+0800 I NETWORK [thread1] trying reconnect to 127.0.0.1:27017 (127.0.0.1) failed
2017-09-15T21:23:01.223+0800 W NETWORK [thread1] Failed to connect to 127.0.0.1:27017, in(checking socket for error after poll), reason: Connection refused
2017-09-15T21:23:01.223+0800 I NETWORK [thread1] reconnect 127.0.0.1:27017 (127.0.0.1) failed failed
server should be down...
4、添加好用户后,就可以使用权限方式启动MongoDB
./mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/log/mongod.log --fork --auth
或者
./mongo --config=/u01/mongnodb/mongno.conf
在mongno.conf指定参数 auth = true
5、进入mongo shell,使用admin数据库并进行验证,如果不验证,是做不了任何操作的。
> use admin
> db.auth("admin","123456") #认证,返回1表示成功
6、验证之后还是做不了操作,因为admin只有用户管理权限,下面创建用户,用户都跟着库走,
> use mydb
> db.createUser({user: "app",pwd: "123456",roles: [{ role: "readWrite", db: "mydb" }]})
7、使用创建的用户root登录进行数据库操作:
mongo 127.0.0.1/mydb -uapp -p
mongo 127.0.0.1/mydb -uvdb -p
或者使用:
./mongo -u username -p password --port port --authenticationDatabase databaseName
./mongo databaseName -u username -p password --port port
然后就可以进行增删改查各种数据操作…
Mongodb的关闭:
前台运行:(不以守护进程方式启动)
如果没有使用--fork,直接可以前台退出终端关闭。通过这种方式,Mongodb将会自己做清理退出,把没有写好的数据写完成,并最终关闭数据文件。要注意的是这个过程会持续到所有操作都完成。
后台运行:(以守护进程方式启动 fork = true)
如果使用--fork在后台运行mongdb服务,那么就要通过向
服务器发送shutdownServer()消息来关闭。
1、普通命令:
$ ./mongod
> use admin
> db.shutdownServer()
Mongodb启动帮助
mongod --help
如果启动时指定端口号了,不是默认的27017, 连接时也必须指定端口
mongo 127.0.0.1:27019
参考:
http://www.runoob.com/mongodb/mongodb-linux-install.html
MongoDB Authentication slow my TPS?
http://www.mongoing.com/archives/4623