• 记一次失败的mongo迁移


    背景:

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

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

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

    建议: 

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

      吐血过程

          第一步:  config 服务

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

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

    1. #security:
    2. #  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主机的话,则任意进入该副本集的任意一台主机进行登录

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

    1. > rs.config();##观察members中哪一部分需要更改,会影响下面members[n]中n的值
    2. > rsc = rs.config();
    3. > rsc.members[0].host = "192.168.1.3:2777";
    4. > rs.reconfig(rsc);##如果不是primary主机,则会发生replSetReconfig should only be run on PRIMARY, but my state is REMOVED; use the \"force\" argument to override这个错误,那么则运行
    5. > rs.reconfig(rsc,{"force":true});
    6. > 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的方式

    1. > use admin;
    2. > db.auth('root','root');
    3. > sh.status(); ##分片副本集信息及状态
    4. > use config;
    5. > db.shards.remove({});
    6. > db.shards.find();
    7. [
    8. {"_id" : "shard1","host" : "shard1/192.168.1.1:27117,192.168.1.2:27117","state" : 1},
    9. {"_id" : "shard2","host" : "shard2/192.168.2.1:27117,192.168.2.2:27117","state" : 1}
    10. ]
    11. > db.shards.update({_id:"shard1"},{$set:{"host":"shard1/192.168.1.3:27117,192.168.1.2:27117"}});
    12. > db.shards.find();
    13. [
    14. {"_id" : "shard1","host" : "shard1/192.168.1.3:27117,192.168.1.2:27117","state" : 1},
    15. {"_id" : "shard2","host" : "shard2/192.168.2.1:27117,192.168.2.2:27117","state" : 1}
    16. ]
    17. > use admin;
    18. > sh.status(); ##则可以看到最新的分片副本集信息

    第四部: 帐号密码

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

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

    > 删除所有用户

    1. 查询和删除用户命令
    2. > use admin
    3. > show users; -- 查看当前库下用户
    4. > db.dropUser("zcy"); -- 删除帐号zcy
    5. > db.system.users.find(); -- 查询一下,如果还是有,执行下面的, 一次到位
    6. > db.system.users.remove({});
    7. 切换到其他库分别执行一下. mongo的用户和库有关系
    8. >use xxx;
    9. >show users;

    > 创建用户

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

    >修改配置

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

    > 重启服务

     

  • 相关阅读:
    R语言使用mlr包创建随机森林分类模型、网格搜索、交叉验证获取随机森林的最佳超参数组合(random forest classification)
    JavaScript逻辑题:一个篮球的高度为100米 每次落地弹起高度为前一次高度的0.6 问多少次之后高度小于1米?
    itk配准整理(1)
    助企上云新举措!移动云网盘服务平台正式上线
    【Visual Studio】调试报错 Run-Time Check Failure #0
    LocalDateTime的使用
    【webpack系列】从核心概念到上手配置
    使用Socks5代理和HTTP协议的爬虫技术
    linux误删系统目录的恢复
    Uniapp零基础开发学习笔记(4) -顶部导航栏titleNView的制作
  • 原文地址:https://blog.csdn.net/zhuchunyan_aijia/article/details/126226042