Skip to content

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