szs 发表于 2018-10-24 12:28:56

mongodb相关(单实例、复制集、分片集)

1、报错信息  mongos> sh.addShard("rs_one/192.168.142.48:27017,192.168.142.48:27018,192.168.142.48:27019")
  {
  "ok" : 0,
  "errmsg" : "E11000 duplicate key error collection: admin.system.version index: _id_ dup key: { : \"shardIdentity\" }",
  "code" : 11000,
  "codeName" : "DuplicateKey",
  ......
  }
  2、解决,连接rs_one主节点,删除admin.system.version集合中记录
  rs_one:PRIMARY> db.system.version.remove({"_id":"shardIdentity"})
  WriteResult({
  "writeError" : {
  "code" : 13,
  "errmsg" : "not authorized on admin to execute command { delete: \"system.version\", ordered: true, $clusterTime: { clusterTime: Timestamp(1528280178, 1), signature: { hash: BinData(0, 914ECCE14D194F41251247EAB282E1F346D4C7D0), keyId: 6563852648502525972 } }, $db: \"admin\" }"
  }
  })
  报错由于admin用户的角色是root,不具有修改admin.system.version的权限,添加对应权限
  db.grantRolesToUser("admin", [ { role: "__system", db: "admin" } ])
  3、再次删除
  rs_one:PRIMARY> db.system.version.remove({"_id":"shardIdentity"})
  WriteResult({
  "nRemoved" : 0,
  "writeError" : {
  "code" : 40070,
  "errmsg" : "cannot delete shardIdentity document while in --shardsvr mode"
  }
  })
  删除时报错,意思是说不能在分片模式下删除这张表中的这条记录,然后我们关闭rs_one,然后以非shardsvr的方式启动,删除这条记录后,再以shardsvr方式启动
  4、以非shardsvr的方式启动,删除这条记录,再以shardsvr方式启动
  1)配置文件注释掉 #shardsvr=true
  2)重新启动实例
  3)删除system.version对应记录,db.system.version.remove({"_id":"shardIdentity"})
  4)配置文件开启 shardsvr=true
  5)重新启动实例
  5、重新addShard
  ongos> sh.addShard("rs_one/192.168.142.48:27017,192.168.142.48:27018,192.168.142.48:27019")
  {
  "shardAdded" : "rs_one",
  "ok" : 1,
  "$clusterTime" : {
  "clusterTime" : Timestamp(1528284663, 7),
  "signature" : {
  "hash" : BinData(0,"qLejzYtJDR1Bpt84+Hapdi1w1/I="),
  "keyId" : NumberLong("6563903792973086740")
  }
  },
  "operationTime" : Timestamp(1528284663, 7)
  }

页: [1]
查看完整版本: mongodb相关(单实例、复制集、分片集)