我们知道, MongoDB 的 Oplog (operations log)记录了用户的最近一段时间的操作 (时间长短主要受设置的 oplogSize 和程序的写入更新量的影响). 那么, 如果其他部门(例如 BI 团队) 需要抽取数据, 从 local.oplog.rs 中读取解析一个不错的选择.
oplog 位于 local 数据下面, 为了将权限最小化, 大家需要创建此库的权限(还可以将权限细化到集合, 再次不讨论).
习惯性的, 在 local 数据库下面创建, 但是报错了.
执行脚本
- db.createUser(
- {
- user: "testuser_local",
- pwd: "testuser_local",
- roles: [ {
- role: "read", db: "local"
- } ]
- }
- )
报错信息
- 2018-XX-XXT14:48:30.437+0800 E QUERY [thread1] Error: couldn't add user: Cannot create users in the local database :
- _getErrorWithCode@src/mongo/shell/utils.JS:25:13
- DB.prototype.createUser@src/mongo/shell/db.JS:1290:15
- @(shell):1:1
查看 MongoDB 的官网介绍, 发现确实不可以在 local 数据库下面创建账号
其解决方案是, 我们转到 admin 数据库下面, 创建账号.
此时可以创建成功.
注意:(1)在程序端配置连接字符串时, 相应的需要添加登入验证数据库参数 --authenticationDatabase admin
(2)通过 NoSQLBooster 登入时, Auth DB 选择执行创建命令的数据库名字(本实例为 admin)
Default Database 的编辑项, 选择 oplog 所在的 local 数据库
登入成功
(但是在测试过程中, 发现此工具在这个小权限下, 登入可以成功, 但是有时候执行命令时报错, 而通过 MongoDB shell 执行不报错. 还需探究根本原因)
(3) 建议数据的拉取, 在辅助节点上拉取, 减少主库的压力.
来源: http://www.linuxidc.com/Linux/2018-11/155371.htm