暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL一主两从和级联架构要怎样切换?

159

下个月就过年了,给大家拜个早年哈,小编也争取过年前多更新几期

在生产环境,我们可能会有一主多从(如下图左边的这种场景)的情况,多个从库提供查询。

有时候,可能会调整架构,比如把一主两从改成主从从。

主从从这种架构我们称为级联(如下图右边的这种场景):

我们来简单过一下原理,可能有点绕,如果看不懂没事,可结合下方视频理解,包括了实验(是DBA体系课的复制部分,整章是开放免费试看的)。

https://www.imooc.com/learn/1397


1 位点复制:一主两从架构切换成级联架构

如果我们要把左边的一主两从架构切换成右边的级联架构。

可以先停掉S2的复制;

再停S1的复制,这时候记录S1的位点以及对应主库M的位点;

说明S1这个时候的数据,跟对应主库的那个位点的数据,是一样的;

这个时候就可以启动S1的复制了;

再开启S2的同步,通过start slave UNTIL,同步到S1刚才记录的主库位点,命令举例:

    start slave UNTIL MASTER_LOG_FILE ="mysql-bin.000049",  MASTER_LOG_POS=1277;


    在停掉S2的同步;

    把复制直接挂到S1上,位点就是刚才S1停掉复制的时候,本身记录的位点信息,然后启动复制。命令举例:

      stop slave;


      change master to master_host='192.168.152.30',
      MASTER_USER='repl',
      MASTER_PASSWORD='xxxxxx',
      master_log_file='mysql-bin.000050',
      master_log_pos=1281;


      start slave;


      其实还有一个方法,就是同时(比如xshell多端口执行命令)在S1和S2执行stop slave;

      如果对应主库位点都一致,那直接查看S1自己的位点,然后S2接到S1上就行。


      2 位点复制:级联架构改成一主两从架构

      如果要把右边的级联架构改成左边的一主两从架构。

      S1先停掉复制;

      再查看S1当前位点以及对应主库的位点信息,此时因为复制已经停掉的,所以位点信息也一直是静态的;

      在S2中,执行:

        show slave status\G


        查看此时对应S1的位点;

        如果这里看到的S1位点信息和刚才S1自己看到的位点信息一致;

        就说明S2已经追到S1停止复制的那个位点了;

        就可以停止S2的复制;

        再启动S1的复制;

        再把S2的复制接到M上;

        接的位点,就是刚才S1看到主库M上对应的位点信息。

        命令如下:

          change master to master_host='192.168.152.70',
          MASTER_USER='repl',
          MASTER_PASSWORD='xxxxxx',
          master_log_file='mysql-bin.000049',
          master_log_pos=1277;


          start slave;



          3 GTID复制:架构调整

          从库直接change master到新的主库就行,不需要自己去找位点,命令如下:

            stop slave;


            change master to
            master_host='192.168.152.70',
            master_user='repl',
            master_password='xxxxxx',
            MASTER_AUTO_POSITION=1;


            start slave;


            4 一个实战问题

            前几天,社群一个朋友问:

            A->B->C级联复制,B库崩溃,怎么设置A->C的主从复制?


            这个问题,要分是不是GTID。

            如果是GTID,其实change master就行。

            如果是基于位点的复制,那需要想办法找到C实例最后一个写入事务对应A的位点。

            这个可以解析奔溃前后A的Binlog,找到对应的事务,具体怎么判断,可以看事务内容,也可以对比事务的时间戳。

            找到位点之后,就 change master 主库A 下一个事务位点。


            5 总结

            当然,如果有一些自动化管理工具,可能更方便,比如Orch,直接页面拖拽就可以把级联切换成一主多从。

            如果没有管理工具,还是建议换成GTID模式,很多时候维护会方便很多。


            文章转载自MySQL数据库联盟,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论