4

我有一个包含 3 个成员(2.4 版)的 mongodb 副本集,其中“admin”数据库的管理员用户没有“userAdminAnyDatabase”角色。

此角色是管理所有数据库上的用户所必需的。

我目前拥有的角色是:[“readWriteAnyDatabase”、“dbAdminAnyDatabase”、“clusterAdmin”]

我尝试为自己更新角色或创建新用户,但是我无权访问管理数据库中的 db.system.users。

我尝试设置 noauth=true 但这没有帮助。删除 keyFile 时,数据库也无法与其他成员同步(显然)并陷入 RECOVERY 状态。

我发现了一个类似的问题,它指的是一个独立的数据库(没有副本集),所以在这种情况下它并没有真正的帮助。

在系统停机时间最短的情况下添加此角色的最佳方法是什么?

4

2 回答 2

1

当您使用 mongo 2.4 时,这意味着您拥有MMAP存储引擎。

我的建议是:

  1. 在每台主机上创建相似的副本集,但端口不同,并将数据库目录设置在与当前相同的媒体上。
  2. 配置与运行相同的所有身份验证内容
  3. 停止旧的副本集成员
  4. 将数据库文件移动到新目录,不包括本地
  5. 更改新副本集上的端口
  6. 启动它

由于将文件移动到其他目录只是一个指针更改,这将需要几秒钟。

请在实施前进行测试。

欢迎任何意见!

于 2016-07-06T11:52:34.297 回答
1

我会使用mongodumpmongorestore来备份数据,然后以正确的权限重建节点并恢复数据。

但是这种方法应该有效

如果您已将自己锁定,则需要执行以下操作:

  1. 停止 MongoDB 实例
  2. 从 MongoDB 配置中删除 --auth 和/或 --keyfile 选项以禁用身份验证
  3. 无需身份验证即可启动实例
  4. 根据需要编辑用户
  5. 在启用身份验证的情况下重启实例
于 2016-07-06T03:23:12.687 回答