一 MongoDB的安装配置
(1)下载并安装:
MongoDB安装包下载地址:https://www.mongodb.com/download-center
[root@localhost src]# tar -zxvf mongodb-linux-x86_64-rhel62-3.4.2.tgz [root@localhost src]# mv mongodb-linux-x86_64-rhel62-3.4.2 /usr/local/mongodb [root@localhost src]# cd /usr/local/mongodb [root@localhost src]# cp /usr/local/mongodb/bin/mongo /usr/local/bin/ [root@localhost src]# cp /usr/local/mongodb/bin/mongo /usr/bin/ [root@localhost mongodb]# mkdir data [root@localhost mongodb]# mkdir logs [root@localhost mongodb]# echo > logs/mongodb.log
(2)创建属性文件mongodb.conf:
[root@localhost mongodb]# vim /usr/local/mongodb/mongodb.conf
其内容如下:
dbpath=/usr/local/mongodb/data/ logpath=/usr/local/mongodb/logs/mongodb.log logappend=true bind_ip=192.168.1.159 port=27000 fork=true
(3)添加mongodb控制脚本并设置开机自启动:
[root@localhost ~]# vim /etc/init.d/mongod
其脚本内容如下:
#!/bin/sh # #chkconfig: 2345 80 90 #description: mongodb start() { /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/mongodb.conf } stop() { /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/mongodb.conf --shutdown } restart() { stop sleep 2 start } case "$1" in start) start ;; stop) stop ;; restart) restart ;; *) echo $"Usage: $0 {start|stop|restart}" exit 1 esac
给脚本添加可执行权限并设置开机自启动:
[root@localhost ~]# chmod a+x /etc/init.d/mongod [root@localhost ~]# chkconfig mongod on
(4)启动mongodb:
- 启动:[root@localhost ~]# service mongod start
- 停止:[root@localhost ~]# service mongod stop
- 重启:[root@localhost ~]# service mongod restart
[root@localhost mongodb]# /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/mongodb.conf --rest
访问地址:http://192.168.1.159:28000/ ,MongoDB 的 Web 界面访问端口比服务的端口多1000
(5)访问数据库:
[root@localhost mongodb]# /usr/local/mongodb/bin/mongo 192.168.1.159:27000
列出所有的数据库:
> show dbs
连接到一个指定的数据库:
> use admin
显示当前数据库对象或集合:
> db
列出当前库的所有集合:
> show collections
(6)为mongodb添加账号密码认证:
由于mongodb默认安装是没有启用账号密码认证,这意味着任何人只要知道安装了mongodb的服务器地址和对应的端口就可以连接上,并可以修改里面的任何数据。因此,为了增强mongodb的安全性,我们需要给它配置上用于认证的账号、密码。
注意:下面的操作都是在未开启登录认证的情况下操作的,要是以及开启了认证,操作数据库可能需要认证权限。
首先通过无密码连接上mongodb,并添加相应权限的账号:
[root@localhost mongodb]# /usr/local/mongodb/bin/mongo 192.168.1.159:27000
1)首先来创建管理员用户:
> use admin > db.createUser( { user: "admin", customData: {description:"管理员用户"}, pwd: "admin", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
如果需要创建管理员权限的账号,需要在admin这个库中创建。新安装的mongodb没有这个库,直接use admin即可。
至于这里的权限“userAdminAnyDatabase”到底是什么权限我将在下面列出
2)接下来创建普通角色用户:
> use test_news
>db.createUser(
{ user: "tdev",
pwd: "tdev",
roles: [ { role: "readWrite", db: "test_news" },
{ role: "dbAdmin", db: "test_news" }
]
}
)
这里选择了一个其他的普通数据库——test_news,然后创建了一个具有普通读写权限的用户——tdev
mongodb内置角色:
- 数据库用户角色:read、readWrite;
- 数据库管理角色:dbAdmin、dbOwner、userAdmin;
- 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
- 备份恢复角色:backup、restore;
- 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超级用户角色:root,这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
- 内部角色:__system
角色说明:
- read:允许用户读取指定数据库
- readWrite:允许用户读写指定数据库
- dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
- userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
- clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
- readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
- readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
- userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
- dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
- root:只在admin数据库中可用。超级账号,超级权限
查看拥有的用户:
> use test_news
> show users
查看所有的用户:
> use admin > show collections > db.system.users.find()
修改用户角色信息:
> use admin
>db.system.users.update({'_id':'admin.admin'},{$set:{'roles':[ { "role": "userAdminAnyDatabase", "db": "admin" },{ "role": "dbAdminAnyDatabase", "db": "admin" },
{ "role": "readWriteAnyDatabase", "db": "admin"}]}})
可以看出,这里给admin用户新添加了一个 dbAdminAnyDatabase 和readWriteAnyDatabase角色
删除用户:
> use admin > db.system.users.remove({_id:"weather_province.admin"});
重启mongodb并启用密码认证:
[root@localhost ~]# vim /usr/local/mongodb/mongodb.conf
在文件末尾添加:
auth=true
重启mongodb:
[root@localhost ~]# service mongod restart
现在有两种方式进行用户身份的验证
第一种 (类似 MySql)
客户端连接时,指定用户名,密码,db名称
mongo --port 27017 -u "adminUser" -p "adminPass" --authenticationDatabase "admin"
第二种
客户端连接后,再进行验证
mongo --port 27017 use admin db.auth("adminUser", "adminPass") // 输出 1 表示验证成功
测试:
[root@localhost ~]# mongo 192.168.1.159:27000 > use admin > db.auth("admin","admin")
连接加密数据库
xxx.db('mongodb://your name: your pwd@ ip :27017/Article'); your name:为用户名 your pwd:为密码
二 MongoDB的基本用法
(1)显示所有数据库:
> show dbs
(2)创建数据库:
> use zifangsky
注:如果这个库不存在将会自动创建
(3)插入文档:
> db.col.insert({title: '这是标题', description: '这是描述信息', by: 'zifangsky', url: 'https://www.zifangsky.cn/', })
注:这里表示向名字为“col”的集合(collection)插入数据,mongodb里面的collection可以简单理解为关系型数据库中的表
(4)查看已插入文档:
> db.col.find()
(5)更新文档:
语法格式如下:
db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } )
参数说明:
- query : update的查询条件,类似sql update查询内where后面的
- update : update的对象和一些更新的操作符(如$,$inc…)等,也可以理解为sql update查询内set后面的
- upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入
- multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新
- writeConcern :可选,抛出异常的级别
示例如下:
> db.col.update({'title':'这是标题'},{$set:{'title':'MongoDB'}})
(6)删除文档:
语法格式如下:
db.collection.remove( <query>, { justOne: <boolean>, writeConcern: <document> } )
参数说明:
- query :(可选)删除的文档的条件
- justOne : (可选)如果设为 true 或 1,则只删除一个文档
- writeConcern :(可选)抛出异常的级别
示例如下:
> use admin > db.system.users.remove({_id:"weather_province.admin"});
(7)删除数据库:
> use zifangsky
> db.dropDatabase()
注:执行该语句之后 zifangsky 这个库将会被删除,请慎重
参考: