Skip to content
On this page

Window Server 2012 R2 安装 MongoDB 踩坑

下载 MongoDB

https://www.mongodb.com/try/download/community

注意

  1. 下载社区版
  2. 下载 3.4.24 版本,其他不支持 Windows Server 2012 R2
  3. 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