【问题标题】:How to change the shard key如何更改分片键
【发布时间】:2011-10-01 03:30:46
【问题描述】:

我知道不可能更改分片键。 但是,当我设置了不正确的分片键时,如何更改呢?

【问题讨论】:

    标签: mongodb sharding


    【解决方案1】:

    很简单,用remove + insert代替update。

    var buf = db.col.findOne({'_id': ObjectId(<id>)});
    buf['key'] = 'new key';
    db.col.remove({'_id': ObjectId(<id>)});
    db.col.insert(buf); //_id does not change!
    

    【讨论】:

      【解决方案2】:

      转储收集

      mongodump --host <hostname> --port <port> --collection <collection_name> --db <db_name>
      

      打开 mongos 并删除数据库或集合(如果您有超过 1 个集合)

      mongo --host <hostname> --port <port>
      show dbs
      use <db_name>
      db.dropDatabase() //it's only if you hade ONE database in db
      exit
      

      导入数据库

      mongorestore --host <hostname> --port <port> --collection <collection_name> --db <db_name> <path to <collection_name>.bson>
      

      打开 mongos 和分片

      mongo --host <hostname> --port <port>
      sh.status() (only to understand what is happen)
      sh.enableSharding("<db_name>")
      sh.shardCollection("<db_name>.<collection_name>",<shard key>,<option>)
      

      类似的东西 p.s.您必须在集合中有分片键的索引。搜索:“ensureIndex()”

      【讨论】:

      • 我必须使用 mongorestore,而不是 mongoimport。
      【解决方案3】:

      感谢您的过程

      我正在使用 MongoDB 3.0 并且:

      1. mongoimport 不是导入使用 mongodump 转储的 db 的工具。
      2. mongorestore 使用完全相同的参数可以正常工作

      问候

      【讨论】:

        【解决方案4】:

        转储你分片的集合..再次导入..设置新的分片键。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-07-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-07
          • 2019-02-18
          相关资源
          最近更新 更多