记一次失败的mongo迁移

背景:

     mongo 是分片+集群部署 (mongodb 集群搭建:分片+副本集_我家小宝_朱朱的博客-CSDN博客)

     云主机要过去了, 需要切换到新的主机上. 

     主机工程师把5台机器所有的复制到新的机器

建议: 

      data里面全部删除, 然后重新配置启动后, 再把原来的数据导入进来 

  吐血过程

      第一步:  config 服务

    config 配置的ip 修改成新的. 如果你的mongo有鉴权, 需要把以下配置注释掉

    我这边3台config, 都以此修改掉

#security:
#  keyFile: /data/mongodb/testKeyFile.file

 重启3台机器的config, 启动成功  ---- share的启动就无法启动,而且部分可以,部分不可以

进入初始化副本集 rs.initiate(config)  一直报错:

 

处理方式2个

1> config 不存储数据,所以就把config 下的3台的data的全部删除

2>  config 不存储数据,所以就把config 下的2台的data的全部删除, 保留一台的data. 然后在这台执行就可以 rs.initiate(config)  

我还增加操作: 

use local
db.system.replset.find()
db.system.replset.remove({})  然后在 rs.initiate(config)  

两个方式都可以,此方式使用服务能启动, 如果无法启动,就直接用1> 就可以

第二步: share1分片服务

3台机器的share1 启动也正常,开始做副本配置, 采用上面2> 正常

第三步: share2分片服务

3台机器的share2 启动就不正常了, 一直报链接旧的config地址, 很是奇怪

网上一些 \Mongodb - 复制集RS简单操作_LSYHhhhh的博客-CSDN博客_mongo rs

都是前提是在master上才能操作. 但是我们是全部换ip, 不存在master 了,所以无法调整副本级配置

最后只能删除share2的data了

网上提到:
如果都已经不存在primary主机的话,则任意进入该副本集的任意一台主机进行登录

我这边由于启动不起来, 没啥用

> rs.config();##观察members中哪一部分需要更改,会影响下面members[n]中n的值
> rsc = rs.config();
> rsc.members[0].host = "192.168.1.3:2777";
> rs.reconfig(rsc);##如果不是primary主机,则会发生replSetReconfig should only be run on PRIMARY, but my state is REMOVED; use the \"force\" argument to override这个错误,那么则运行
> rs.reconfig(rsc,{"force":true});
> rs.config();##观察members中地址是否已经变更

第三步: mongos 服务

先: > db.shards.remove({});

然后> 重新执行一次

sh.addShard("shard1/192.168.0.31:27001,192.168.0.32:27001,192.168.0.33:27001")
sh.addShard("shard2/192.168.0.32:27002,192.168.0.33:27002,192.168.0.34:27002")
sh.addShard("shard3/192.168.0.33:27003,192.168.0.34:27003,192.168.0.35:27003")
sh.addShard("shard4/192.168.0.34:27004,192.168.0.35:27004,192.168.0.31:27004")
sh.addShard("shard5/192.168.0.35:27005,192.168.0.31:27005,192.168.0.32:27005")

也可以如一下, 进行update的方式

> use admin;
> db.auth('root','root');
> sh.status(); ##分片副本集信息及状态
> use config;
> db.shards.remove({});
> db.shards.find();
[
	{"_id" : "shard1","host" : "shard1/192.168.1.1:27117,192.168.1.2:27117","state" : 1},
	{"_id" : "shard2","host" : "shard2/192.168.2.1:27117,192.168.2.2:27117","state" : 1}
]
> db.shards.update({_id:"shard1"},{$set:{"host":"shard1/192.168.1.3:27117,192.168.1.2:27117"}});
> db.shards.find();
[
	{"_id" : "shard1","host" : "shard1/192.168.1.3:27117,192.168.1.2:27117","state" : 1},
	{"_id" : "shard2","host" : "shard2/192.168.2.1:27117,192.168.2.2:27117","state" : 1}
]
> use admin;
> sh.status(); ##则可以看到最新的分片副本集信息

第四部: 帐号密码

mongodb副本集加分片集群安全认证使用账号密码登录_我家小宝_朱朱的博客-CSDN博客_mongodb 集群登录

必须先删除所有帐号后,在重新创建,否则有问题 

> 删除所有用户

查询和删除用户命令
> use admin
> show users;  -- 查看当前库下用户
> db.dropUser("zcy");  -- 删除帐号zcy
> db.system.users.find();  -- 查询一下,如果还是有,执行下面的, 一次到位
> db.system.users.remove({});

切换到其他库分别执行一下. mongo的用户和库有关系
>use xxx;
>show users;

> 创建用户

https://blog.csdn.net/zhuchunyan_aijia/article/details/113848406

>修改配置

security:
  keyFile: /data/mongodb/testKeyFile.file 

> 重启服务

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值