【shake】想简单问下 为什么会需要 drop collection的权限?

现在我通过源码编译报错变为:[17:55:03 CST 2023/04/12] [CRIT] (github.com/alibaba/MongoShake/v2/collector/docsyncer.StartDropDestCollection:93) Drop collection ns {server stocktransfers} of dest mongodb failed. (Unauthorized) command drop requires authentication start document replication failed: Drop collection ns {server stocktransfers} of dest mongodb failed. (Unauthorized) command drop requires authentication [17:55:03 CST 2023/04/12] [CRIT] (main.startup:145) run replication failed: start document replication failed: Drop collection ns {server stocktransfers} of dest mongodb failed. (Unauthorized) command drop requires authentication 想简单问下 为什么会需要 drop collection的权限?

展开
收起
真的很搞笑 2023-04-16 22:43:48 281 分享 版权
1 条回答
写回答
取消 提交回答
  • 这个报错的原因可能是MongoShake在同步数据时,需要先删除目标数据库中的同名集合,然后再创建新的集合并插入数据。这个过程需要MongoShake具有目标数据库的drop权限,否则会报错。可以尝试以下方法来解决这个问题:

    • 在MongoShake的配置文件中,设置auto_drop_collection为false,这样就可以避免删除目标数据库中的集合。但是这样可能会导致数据不一致或冲突,所以需要确保源数据库和目标数据库中的集合结构和索引是一致的。
    • 在MongoShake的配置文件中,设置tunnel为direct或rpc,这样就可以使用源数据库的账号和密码来连接目标数据库。但是这样需要源数据库和目标数据库具有相同的账号和密码,并且具有相同的权限。
    • 在目标数据库中,为MongoShake创建一个新的用户,并授予其drop权限。可以使用以下命令来创建用户和授权:
    # 连接到目标数据库
    mongo --host <host> --port <port> -u <user> -p <password>
    # 切换到admin数据库
    use admin
    # 创建一个新的用户
    db.createUser (
      {
        user: "mongoshake",
        pwd: "mongoshake123",
        roles: [
          { role: "readWrite", db: "writeapp" },
          { role: "dbAdmin", db: "writeapp" }
        ]
      }
    )
    # 授予drop权限
    db.grantRolesToUser (
      "mongoshake",
      [
        { role: "dropCollection", db: "writeapp" }
      ]
    )
    
    2023-10-20 13:46:53
    赞同 1 展开评论

数据库领域前沿技术分享与交流

收录在圈子:
+ 订阅
让用户数据永远在线,让数据无缝的自由流动
还有其他疑问?
咨询AI助理