Centos7安装MongoDB 3.2.20

Centos7安装MongoDB 3.2.20

Ubuntu安装MongoDB 3.2.20&常用命令:https://blog.csdn.net/sunny05296/article/details/73131274
Centos7安装MongoDB 4.0.10: https://blog.csdn.net/sunny05296/article/details/100546996
Centos7安装MongoDB 3.2.20: https://blog.csdn.net/sunny05296/article/details/85298086

本文介绍Cents7以tgz解压方式安装mongodb。

官网下载对应的安装包(以mongodb-linux-x86_64-3.2.20.tgz为例)
https://www.mongodb.org/dl/linux/

创建目录并解压到指定目录
mkdir /opt/mongodb
tar -zxvf mongodb-linux-x86_64-3.2.20.tgz  -C /opt/mongodb
解压以后会生成mongodb-linux-x86_64-3.2.20目录,如果需要可以重命名

创建数据库存放路径和日志存放路径
cd /opt/mongodb/mongodb-linux-x86_64-3.2.20
mkdir data logs

创建mongodb.conf配置文件
vi /opt/mongodb/mongodb-linux-x86_64-3.2.20/mongodb.conf

port=27017  #端口号
dbpath=/opt/mongodb/mongodb-linux-x86_64-3.2.20/data/  #数据库路径
logpath=/opt/mongodb/mongodb-linux-x86_64-3.2.20/logs/mongodb.log  #日志输出文件路径
pidfilepath=/opt/mongodb/mongodb-linux-x86_64-3.2.20/mongo.pid
fork=true  #设置后台运行
logappend=true  #日志输出方式
#shardsvr=true
#directoryperdb=true
#auth=true #是否开启认证,默认无认证

然后保存退出

添加环境变量:
vi /etc/profile 增加
export PATH=$PATH:/opt/mongodb/mongodb-linux-x86_64-3.2.20/bin
保存退出,执行 source /etc/profile #使配置立即生效

启动&停止mongodb

指定配置文件启动mongodb
mongod --config /opt/mongodb/mongodb-linux-x86_64-3.2.20/mongodb.conf

停止mongodb
mongo 127.0.0.1:27017/admin --eval "db.shutdownServer()" 

查看mongdb是否启动
netstat -al | grep "27017"

mongo  #进入MongoDB数据库控制台
version() #查看版本
show dbs  #查看默认数据库, admin和local为系统默认内置数据库,如果默认没有admin数据库,说明admin用户也没有,需要先创建
use admin  #切换到admin数据库
db.shutdownServer()  #关闭MongoDB数据库
exit  #退出控制台

创建数据库
admin和local为系统默认内置数据库,如果想要创建数据库(创建mydb为例),可以直接执行下面命令:
> use mydb
查看数据库
> show dbs
命令检查当前数据库状态
> db.stats()

如果没有默认的admin库则创建admin库和管理员admin
> show dbs
local  0.000GB

> use admin
> db.createUser(
  {
    user: "admin",
    pwd: "1q2w3e",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

创建成功以后,可以查看显示用户
> show users
{
        "_id" : "admin.admin",
        "user" : "admin",
        "db" : "admin",
        "roles" : [
                {
                        "role" : "userAdminAnyDatabase",
                        "db" : "admin"
                }
        ]
}

roles可以设置管理多库,参考:
db.createUser(
  {
    user: "admin",
    pwd: "1q2w3e",
    roles: [
       { role: "dbOwner", db: "testdb1" },
       { role: "userAdminAnyDatabase", db: "admin" }
    ]
  }
)

成功创建,再查询admin中的集合(表),有数据了:
> show collections;
system.users
system.version

> show users
{
        "_id" : "admin.admin",
        "user" : "admin",
        "db" : "admin",
        "roles" : [
                {
                        "role" : "userAdminAnyDatabase",
                        "db" : "admin"
                }
        ]
}

> db.system.users.find();
{ "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "ZwSoqvD48zwB5paHmo3NRw==", "storedKey" : "mawy8xjVKn9sU9KA6zbKFRaGRtQ=", "serverKey" : "w8cTPs/M6tGg9sJ2mUNf6vJXM04=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }
> db.system.version.find();
{ "_id" : "authSchema", "currentVersion" : 5 }

修改用户
> db.updateUser("admin",
  { user: "admin",  
    pwd: "1q2w3e",  
    roles: [ { role: "userAdminAnyDatabase", db: "admin" },
             { role: "dbOwner", db: "testdb" }
    ]
  }
)

mongodb内置的role用户角色:
1. 数据库用户角色:read、readWrite;
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 备份恢复角色:backup、restore;
5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase;
6. 超级用户角色:root;
7. 内部角色:__system;
注意:这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)。

role用户角色说明:
read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限
root:只在admin数据库中可用。超级账号,超级权限

创建用户
注意:db.addUser("test","1q2w3e") 方法在高版本的mongodb中已废除,改为使用db.createUser
> use testdb --切换到testdb库
> db.createUser({user: "test",pwd: "1q2w3e",roles: [ "readWrite", "dbAdmin" ]});
> db.createUser({user: "test",pwd: "1q2w3e",roles: [ "read", "dbAdmin" ]});
> db.createUser({user: "test",pwd: "1q2w3e",roles: [{ role: "readWrite", db: "test" }]}); --指定db读写
> db.createUser({user: "test",pwd: "1q2w3e",roles: [{ role: "read", db: "test" }]}); --指定db只读

修改密码
db.changeUserPassword("test","newpassword");
db.updateUser("test",{pwd:"newpassword"});

修改用户权限
db.grantRolesToUser("test", [{role:"readWrite", db:"testdb"},{role:"read", db:"testdb2"}])   # 修改权限
db.revokeRolesFromUser("test",[{role:"read", db:"testdb2"}])   # 删除权限

删除用户
db.dropUser('usertest')
show users

删除数据库
use testdb
db.dropDatabase()

查看全局所有账户
use admin
db.auth('admin','1q2w3e') --开启auth认证以后,必须认证之后才能查询,否则查询失败。如果未开启则可忽略
db.system.users.find().pretty()

查看当前库admin下的账户
use admin
show users

查看当前库testdb下的账户
use testdb
show users

创建表
> db.createCollection("test01")
> db.createCollection("test02",{capped:true, size:10000}) { "ok" : 1 }
插入数据
> db.test01.insert({ID:1,UserName:"Frank",info:"China",Age:15,Email:"[email protected]",CreateDate:"2017-06-05 14:36:95"})

更多mongodb的常用命令,请参考:https://blog.csdn.net/sunny05296/article/details/73131274


开启认证
mongodb默认是不认证的,默认没有账号,只要能连接上服务就可以对数据库进行各种操作。
mongodb认为安全最好的方法就是在一个可信的环境中运行它,保证之后可信的机器才能访问它,可能这些对一些要求高的环境,安全还不够。
mongodb也提供用户认证,需要在启动时加上--auth开启认证。但开启认证前,需要先添加账号。

注意:
启用认证后,请确保在admin数据库中拥有userAdmin或userAdminAnyDatabase角色的用户。
该用户可以管理用户和角色,例如:创建用户,授予或撤销用户角色,以及创建或修改定义角色。可以在启用访问控制之前或之后创建用户。
如果在创建任何用户之前启用访问控制,MongoDB将提供本地主机异常,允许在管理数据库中创建用户管理员。
创建后,必须作为用户管理员进行身份验证,以根据需要创建其他用户。

提前创建好用户和库,开启认证以后需要认证通过后才能执行查询
> use admin
> db.auth("admin","1q2w3e") --需要认证才能有权限
> show dbs

> use testdb
> db.auth('test','1q2w3e');
> show dbs
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章