记一次手误造成mongo数据库主副集全部变成的副集的处理

系统环境:CentOS6.5

软件:mongodb2.8

原来是想到现在的数据进行添加副本集,方便读写的,没想到悲剧了,现在连原来的主数据都变成了从的数据库,怎么也换不过去

尝试了两个解决办法:

1 . 登录的原的主mongodb ,用rs.remove()的办法把后来添加的副本集从member里移掉,失败了。

真的悲剧了,怎么都remove不掉,因为原来的master已经变成了slave,不能remove其它成员

2 . 更改config,修改member 0 的优先级,抢占master。

执行也是失败,因为当前不是master 。

无奈,只能另找其它办法,因为对mongo数据的并不太熟悉。

后来看了一下网上的文章:https://segmentfault.com/q/1010000000532867 也是关于这个问题的。

大概想到了解决方法:关掉此mongo的服务,将此实例中的local配置目录移除,再重新启动,再用rs.initiate(cfg)的方法配置为master ,搞掂。原来的数据还在哈哈

step 1 . 关闭数据库:./bin/mongod --shutdown --dbpath /data/mongo/datacore

step 2 . 删除或移动原来的副本集数据中的local : #mv /data/mongo/datacore /tmp
         这里不删除,怕是有一些重要的配置在里面哈

step 3 . 启动mongo , 重做配置

[[email protected] 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
[[email protected] 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>

哈哈,终于成功了。

这也许是一个比较笨的方法,因为现在对mongodb并不熟悉。

如果大家有好的办法,也可以说一下哈

时间: 2024-11-04 13:39:35

记一次手误造成mongo数据库主副集全部变成的副集的处理的相关文章

BUG::Cocos V3.2 渲染类中为什么出现同样的两次排序,难道有什么不同吗?手误??----小心开源代码中的陷阱

{ // Don't sort _queue0, it already comes sorted std::sort(std::begin(_queueNegZ), std::end(_queueNegZ), compareRenderCommand); std::sort(std::begin(_queuePosZ), std::end(_queuePosZ), compareRenderCommand); } // helper static bool compareRenderComman

mongo数据多进程导入mysql数据库(YII2实现)

<?php /**  * Created by PhpStorm.  * User: huanghe  * Date: 2016/2/29  * Time: 14:24  */ namespace console\controllers; use yii\console\Controller; use Yii; use yii\mongodb\Query; /**  * command controller  */ class ToolsController extends Controller

android手机端保存xml数据

[java] view plaincopy 1.前面写的这个不能继续插入数据,今天补上,当文件不存在的时候就创建,存在就直接往里面添加数据. [java] view plaincopy [java] view plaincopy 2.代码如下: [java] view plaincopy <pre name="code" class="java">package com.mqp.doc2xml; import java.io.File; import j

SQl Server误编辑删除数据,操作撤回

SQl Server误编辑删除数据,操作撤回 操作撤回 select?*?into?..?遇到大表咋办? 建议用? begin?tran ??update?...??--更新 ??select?...??--确认 ? ? commit?tran?--提交 或 rollback?tran?--回滚

SQL 数据库主键 ,外键

主键 数据库主键是指表中一个列或列的组合,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键,通过它可强制表的实体完整性.当创建或更改表时可通过定义 PRIMARY KEY约束来创建主键.一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值.由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列. 主键的作用 主键的主要作用如下: (1)保证实体的完整性: (2)加快数据库的操作速度: (3) 在表中添加新记录时,数据库会自

在部署有OGG的数据库主机上打数据库patch遇到的问题libclntsh.so.11.1 active

在部署有OGG的数据库主机上打数据库patch遇到的问题$ORACLE_HOME/lib/libclntsh.so.11.1 active 如下是报错提示: [[email protected] 17579684]$ /u01/app/oracle/product/11.2.0/dbhome_1/OPatch/opatch apply Oracle Interim Patch Installer version 11.2.0.3.10 Copyright (c) 2015, Oracle Cor

数据库主键

在我们的数据库设计中,不可逃避的就是数据库表的主键,可能有很多朋友没有深入思考过,主键的设计对整个数据库的设计影响很大,因此我们不得不要重视起来. 主键的必要性 : 在有些数据库中,虽然主键不是必需的,但最好为每个表都设置一个主键,不管是单主键还是复合主键.它存在代表着表结构的完整性,表的记录必须得有唯一区分的字段,主键主要是用于其他表的外键关联,以及本记录的修改与删除. 主键的无意义性 : 在开发过程中,读者可能会看到将一些表使用有意义的字段表示主键,例如"用户登录信息表"将&quo

数据库主键和外键

1 什么是主键 外键 学生表(学号,姓名,性别,班级)   学号是一个主键 课程表(课程号,课程名,学分) 课程号是一个主键 成绩表(学号,课程号,成绩) 学号和课程号的属性组构成一个主键 成绩表中的学号不是成绩表的主键,不过是学生表的主键,成绩表的外键,同理课程号也是成绩表的外键 定义:如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键 以一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表 2 外键的作用 外键用于保持数据一致性,完整性 主要目的

数据库主键自增插入显示值

SQL Server 2008 数据库主键自增插入显示值 前几天在工作的时候遇到在删除数据库中表的数据的时候,删除之后,重新添加的数据没有得到原来的数据的id值(表中id为主键,且设置为自增) ,使用的是SQL Server 2008 ,现在已解决,和大家分享一下! 具体情况: 1.建立表t_test,设置主键自增,如下图 2.向表中插入数据 由于表中的主键字段id为自增在插入的时候不需要指定显示插入,所以Sql 语句为 <span style="font-size:24px;"