mongos刪除庫表的一個bug

ISSUE SUMMARY
When dropping a database / collection in a sharded cluster, even if the drop is reported as successful it is possible the database / collection may still be present in some nodes in the cluster. At this time, we do not recommend that users drop a database or collection and then attempt to reuse the namespace.

USER IMPACT
When the database/collection is not successfully dropped in a given node, the corresponding files continue to use disk space in that node. Attempting to reuse the namespace may lead to undefined behavior.

WORKAROUNDS
To work around this issue one can follow the steps below to drop a database/collection in a sharded environment:

  1. Drop the database / collection using a mongos
  2. Connect to each shard's primary and verify the namespace has been dropped. If it has not, please drop it. Dropping a database (e.g db.dropDatabase()) removes the data files on disk for the database being dropped.
  3. Connect to a mongos, switch to the config database and remove any reference to the removed namespace from the collections chunkslocksdatabases and collections:

    When dropping a database:

    use config
    db.collections.remove( { _id: /^DATABASE\./ } )
    db.databases.remove( { _id: "DATABASE" } )
    db.chunks.remove( { ns: /^DATABASE\./ } )
    db.locks.remove( { _id: /^DATABASE\./ } )
    

    When dropping a collection:

    use config
    db.collections.remove( { _id: "DATABASE.COLLECTION" } )
    db.chunks.remove( { ns: "DATABASE.COLLECTION" } )
    db.locks.remove( { _id: "DATABASE.COLLECTION" } )
  4. Connect to each mongos and run flushRouterConfig
    PS:也遭遇了,真坑,原文鏈接https://jira.mongodb.org/browse/SERVER-17397

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章