記一次手誤造成mongo數據庫主副集全部變成的副集的處理

系統環境:CentOS6.5 

軟件:mongodb2.8


原來是想到現在的數據進行添加副本集,方便讀寫的,沒想到悲劇了,現在連原來的主數據都變成了從的數據庫,怎麼也換不過去j_0065.gif


嘗試了兩個解決辦法: 

  1 . 登錄的原的主mongodb ,用rs.remove()的辦法把後來添加的副本集從member裏移掉,失敗了。

   wKiom1b8xtPQ0rdxAACX14VhqQ4864.png真的悲劇了,怎麼都remove不掉,因爲原來的master已經變成了slave,不能remove其它成員


2 . 更改config,修改member 0 的優先級,搶佔master。


wKiom1b8x5uRpplbAAA888DL9gA707.png

執行也是失敗,因爲當前不是master 。


無奈,只能另找其它辦法,因爲對mongo數據的並不太熟悉。

後來看了一下網上的文章:https://segmentfault.com/q/1010000000532867 也是關於這個問題的。

大概想到了解決方法:關掉此mongo的服務,將此實例中的local配置目錄移除,再重新啓動,再用rs.initiate(cfg)的方法配置爲master ,搞掂。原來的數據還在哈哈j_0057.gif

step 1 . 關閉數據庫:./bin/mongod --shutdown --dbpath /data/mongo/datacore


step 2 . 刪除或移動原來的副本集數據中的local : #mv /data/mongo/datacore /tmp
         這裏不刪除,怕是有一些重要的配置在裏面哈

step 3 . 啓動mongo , 重做配置

[root@xxxxx mongodb]#/usr/local/mongodb/bin/mongod --directoryperdb --rest -replSet msbuset1 --dbpath=/data/mongo/datacore --port 27018 --fork --logpath /data/mongo/logs/datacorefile.log --logappend --maxConns 1600
[root@xxxxx mongodb]# ./bin/mongo --port 27017
MongoDB shell version: 2.4.9
connecting to: 127.0.0.1:27017/test
>
> show dbs;
eventDev        0.203125GB
local   0.078125GB
message 0.203125GB
ossDev  0.203125GB
p2f     0.203125GB
snsDev  0.203125GB
snsUser 0.203125GB
test    0.203125GB
todo    0.203125GB
> rs.stats()
Thu Mar 31 13:33:21.757 TypeError: Object function () { return "try rs.help()"; } has no method 'stats'
> rs.status()
{
        "startupStatus" : 3,
        "info" : "run rs.initiate(...) if not yet done for the set",
        "ok" : 0,
        "errmsg" : "can't get local.system.replset config from self or any seed (EMPTYCONFIG)"
}
> cfg={_id:'msbuset0',members:[{_id:0,host:'${mongo_add_master}:27017',priority:10}]}
{
        "_id" : "msbuset0",
        "members" : [
                {
                        "_id" : 0,
                        "host" : "${mongo_add_master}:27017",
                        "priority" : 10
                }
        ]
}
> rs.initiate(cfg)
{
        "ok" : 0,
        "errmsg" : "couldn't initiate : can't find self in the replset config"
}
> cfg={_id:'msbuset0',members:[{_id:0,host:'192.168.22.198:27017',priority:10}]}
{
        "_id" : "msbuset0",
        "members" : [
                {
                        "_id" : 0,
                        "host" : "192.168.22.198:27017",
                        "priority" : 10
                }
        ]
}
> rs.initiate(cfg)
{
        "info" : "Config now saved locally.  Should come online in about a minute.",
        "ok" : 1
}
>
>
>
>
>
>
>
>
>
> rs.status()
{
        "set" : "msbuset0",
        "date" : ISODate("2016-03-31T05:36:34Z"),
        "myState" : 1,
        "members" : [
                {
                        "_id" : 0,
                        "name" : "192.168.22.198:27017",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 234,
                        "optime" : Timestamp(1459402537, 5),
                        "optimeDate" : ISODate("2016-03-31T05:35:37Z"),
                        "self" : true
                }
        ],
        "ok" : 1
}
msbuset0:PRIMARY>

wKiom1b8yp7iE2vMAABA_kFTO9Q135.png

哈哈,終於成功了。


這也許是一個比較笨的方法,因爲現在對mongodb並不熟悉。

如果大家有好的辦法,也可以說一下哈


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