Mongodb在replicaset的secondary上補建索引

mchdba發表於2014-03-06

1 問題簡述

mongodb replicaset故障,故設定成primary單機,這時在單機上面加了index tid_1,然後設定replicaset,但是

這個時候secondary沒有tid_1,此時怎麼辦?primary上面有索引tid_1, secondary沒有。

2 辦法是有的,就是重新在主庫上面再建一遍索引。
db.tickets.getIndexes();

use ssodatabase;

3 找到原來的建索引的語句
db.tickets.ensureIndex({ "tid" : 1 },{ "name" : "tid_1" });
修改成
db.tickets.ensureIndex({ "tid" : 1 },{ "name" : "tid_2" });

4 primary上執行
PRIMARY> 
PRIMARY> db.tickets.ensureIndex({ "tid" : 1 },{ "name" : "tid_2" });
PRIMARY>

5 check主庫的indexes,沒有任何變化
PRIMARY> db.tickets.getIndexes();
[
        {
                "v" : 1,
                "key" : {
                        "_id" : 1
                },
                "ns" : "ssodatabase.tickets",
                "name" : "_id_"
        },
        {
                "v" : 1,
                "key" : {
                        "tid" : 1
                },
                "ns" : "ssodatabase.tickets",
                "name" : "tid_1"
        }
]
PRIMARY>

別慌,去secondary上去看看。


6 check secondary庫的indexes,有變化了
SECONDARY> db.tickets.getIndexes();
[
        {
                "v" : 1,
                "key" : {
                        "_id" : 1
                },
                "ns" : "ssodatabase.tickets",
                "name" : "_id_"
        },
        {
                "v" : 1,
                "key" : {
                        "tid" : 1
                },
                "ns" : "ssodatabase.tickets",
                "name" : "tid_2"
        }
]
SECONDARY>

看到多了tid_2,表示建成功了,而且primary和secondary都只有一個關於tid的key的index,雖然index的名字不一樣。

 

索引MongoDB與MySQL等關係型資料庫還是大大不同的,secondary庫沒有index沒有關係,在primary上面重新create即可。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26230597/viewspace-1102524/,如需轉載,請註明出處,否則將追究法律責任。

相關文章