Appearance
Window Server 2012 R2 安装 MongoDB 踩坑
下载 MongoDB
https://www.mongodb.com/try/download/community
注意
- 下载社区版
- 下载
3.4.24
版本,其他不支持 Windows Server 2012 R2 3.4.24
的 MongoDB 需要3.6.1
版本的pymongo
才可以正常使用
因为云服务器带宽低,下载版本也总是提示不支持,来回折腾了一段时间。
安装 MongoDB
3.4.24
版本的 MongoDB 没有 mongod.cfg
文件,如果有需要请自己创建。
启动 MongoDB
一开始创建了一个 mongod.cfg
文件使用以下命令启动:
bash
mongod --config "C:/ProgramData/teng_xin/mongo/mongod.cfg" --install --serviceName "MongoDB"
启动好后,本地可以链接,也可以进行访问,但是远程通过域名来访问云服务器的时候会超时,在我搜索了一番后发现要使用以下命令启动:
bash
mongod -dbpath "C:\ProgramData\teng_xin\mongo\data" -logpath "C:\ProgramData\teng_xin\mongo\mongo.log" -install -serviceName "MongoDB"
注意
需要注意的是:mongo.log
文件不能存在,否则会报错。
执行完命令后即可在 服务
中看到,设置为开机启动即可。
给 MongoDB 添加用户
创建用户命令:
js
db.createUser({
user: '',
pwd: '',
customData: {},
roles: [{ role: '', db: '' }],
});
- user:新建用户名
- pwd:新建用户密码
- customData:存放一些用户相关的自定义数据,该属性可忽略
- roles:配置用户的权限,数组类型
用户 role(权限)说明
权限名称 | 说明 |
---|---|
read | 允许用户读取指定数据库 |
readWrite | 允许读写指定数据库的权限 |
dbAdmin | 数据库管理权限,允许用户在指定数据库中执行管理函数,如索引创建,删除,查看统计等 |
userAdmin | 数据库用户的管理权限,包括创建用户,授权的管理 |
clusterAdmin | 只在 admin 数据库中可创建,拥有所有分片或副本集相关函数的管理权限 |
readAnyDatabase | 只在 admin 数据库中可创建,允许用户读取所有数据库权限 |
readWriteAnyDatabase | 只在 admin 数据库中可创建,允许用户读写所有数据库的权限 |
userAdminAnyDatabase | 只在 admin 数据库中可创建,拥有所有数据库的 userAdmin 权限 |
dbAdminAnyDatabase | 只在 admin 数据库中可创建,拥有所有数据库的 dbAdmin 权限 |
root | 只在 admin 数据库中可创建,超级用户角色 |
dbOwner | 某数据库的所有者,拥有该库的所有权限,包括的 readWriter,dbAdmin 和 userAdmin 权限 |
将 MongoDB 服务删除,重新执行以下命令开启账号验证:
bash
# Windows 上删除服务
sc stop ServiceName
sc delete ServiceName
# 重新开启 MongoDB 服务
mongod --auth -dbpath "C:\ProgramData\teng_xin\mongo\data" -logpath "C:\ProgramData\teng_xin\mongo\mongo.log" -install -serviceName "MongoDB"
角色操作
js
// 创建用户并授权
use admin // use命令切换数据库时,如果该数据库不存在,则会自动创建该数据库
db.createUser({user:"user_name",pwd:"password",roles:[{"role":role_priviliges,"db":"db_name"}]})
// 创建管理员用户,管理员通常没有数据库的读写权限,只有操作用户的权限,管且员需要在admin数据库下创建
db.createUser({user:"admin",pwd:"123456",roles:[{role:'userAdminAnyDatabase',db:"admin"}]})
Successfully added user: {
"user" : "admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
// 创建普通读写用户账号
db.createUser({user:"zhangsan",pwd:"123456",roles:[{role:'readWrite',db:"test"}]})
// 更新角色
db.updateUser("zhangsan",{roles:[{"role":"read","db":'test'}]})
// changeUserPassword修改密码
use db_name
db.changeUserPassword('user_name','password')
// updateUser修改密码
db.updateUser("用户名",{"pwd":"新密码"})
// 添加角色
use db_name
db.grantRolesToUser("user_name",[{role:"role_priviliges",db:"admin"}])
// 回收权限
use db_name
db.revokeRolesFromUser("user_name",[{role:"role_priviliges",db:"admin"}])
// 删除用户
db.dropUser("user_name")
// 查看admin库中的所有用户信息,开启auth认证
db.system.users.find()
// 用户认证
db.auth('admin','123456');
访问 MongoDB
bash
mongodb://user:pwd@address:port/
Mongo Shell 使用
登录数据库
js
// 方式一
mongo
use admin
db.auth('admin', '123456')
js
// 方式二
mongo admin -u admin -p 123456
备份 MongoDB
bash
mongodump --port 27018 --db project --out ./backup/data
恢复 MongoDB
bash
mongorestore -u user -p pwd ./backup/data