开发者社区 > 数据库 > 正文

【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的权限?

展开
收起
cuicuicuic 2023-04-16 22:43:48 180 0
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 展开评论 打赏

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

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载