MySQL之主从复制(双主双从)

  • Post author:
  • Post category:mysql




MySQL一主一从点击

跳转



MySQL双主双从原理:

master 1 为处理写请求;
master 2 和 两个从机(slave1,slave2)负责读请求;
当master 1 宕机时,由master 2 负责写请求,两个从机负责读请求;
master 1 和 master 2 为各自的备机
  • 首先需要准备 4 台机器,虚拟机克隆可以参考该

    文章

    • 同时启动 4 台虚拟机后,MyCat 启动可能变慢,log日志会报如下错误

      Startup failed: Timed out waiting for a signal from the JVM.
      

      到设置中配置启动超时时间,命令:

      vim conf/wrapper.conf
      
      # 启动超时时间
      wrapper.startup.timeout=120
      

      再次启动(启动过程可能较慢,具体可以查看日志),并测试

      mysql -uroot -p -h192.168.171.101 -P8066
      

      四台虚拟机信息:

      在这里插入图片描述

  • 配置MySQL

    • master 1

      #主服务器唯一id
      server-id=1
      #启动二进制日志
      log-bin=mysql-bin
      #设置不需要复制的数据库(可设置多个)
      binlog-ignore-db=information_schema
      binlog-ignore-db=mycat
      binlog-ignore-db=mysql
      binlog-ignore-db=performance_schema
      binlog-ignore-db=sys
      #设置需要复制的数据库
      binlog-do-db=mycat_01
      #设置binlog格式
      binlog_format=STATEMENT
      
      #以下为 双主双从 额外的配置
      #表示在作为从机的时候,有写操作的时候也要更新二进制日志
      log-slave-updates
      #表示每次自增的量,默认是 1 ,因为是双主双从,所以需要更改为 2 避免重复,范围:1 ~ 65535
      auto-increment-increment=2
      #表示自增起始数字,该机器起始为1 自增后为 1,3,5,7,9....
      auto-increment-offset=1
      




      红框内为 双主双从 配置

    • master 2

      #主服务器唯一id
      server-id=3
      #启动二进制日志
      log-bin=mysql-bin
      #设置不需要复制的数据库(可设置多个)
      binlog-ignore-db=information_schema
      binlog-ignore-db=mycat
      binlog-ignore-db=mysql
      binlog-ignore-db=performance_schema
      binlog-ignore-db=sys
      #设置需要复制的数据库
      binlog-do-db=mycat_01
      #设置binlog格式
      binlog_format=STATEMENT
      
      #以下为 双主双从 额外的配置
      #表示在作为从机的时候,有写操作的时候也要更新二进制日志
      log-slave-updates
      #表示每次自增的量,默认是 1 ,因为是双主双从,所以需要更改为 2 避免重复,范围:1 ~ 65535
      auto-increment-increment=2
      #表示自增起始数字,该机器起始为1 自增后为 2,4,6,8,10....
      auto-increment-offset=2
      

      在这里插入图片描述


      红框内是与 maser 1 的区别

    • slave 1 和 slave 2 ,只有server-id不同

      #从服务器唯一id
      server-id=2
      #启动中继日志
      relay-log=mysql-relay
      

      在这里插入图片描述


      重启 4 台mysql,并查看mysql状态,确保启动成功,命令:

      systemctl restart mysqld
      systemctl status mysqld
      
    • 在从机上配置需要复制的主机

      slave 1 复制 master 1

      slave 2 复制 master 2

      查看主机状态,命令:

      show master status \G
      



      查看主机状态后,不要进行sql操作,需保证从机接入点与各自主机一致



      在这里插入图片描述

      复制主机,命令:

      #复制主机的命令 
      CHANGE MASTER TO MASTER_HOST='主机的IP地址', 
      MASTER_USER='slave1', MASTER_PASSWORD='123456', 
      MASTER_LOG_FILE='mysql-bin.具体数字',
      MASTER_LOG_POS=具体值;
      

      在这里插入图片描述

      启动slave,命令:

      start slave;
      

      查看两台 slave 状态,命令:

      show slave status \G
      

      在这里插入图片描述

      确保都是 Yes,如果不是,查看黄色框内报错原因。

      停止从复制,命令:

      stop slave;
      

      重新配置 主,命令:

      reset master;
      
    • 配置 master 1 和 master 2 互为主备

      master 1 复制 master 2

      master 2 复制 master 1

      在这里插入图片描述

      开启 slave 并查看状态,确保都是

      Yes


  • 测试

    • 创建

      mycat_01

      数据库

      在这里插入图片描述
    • 创建表

      user


      *
      在这里插入图片描述
    • 插入数据

      在这里插入图片描述

      停掉 master 1 ,从master 2 写入,两个 slave 依然进行复制,当 master 1 重启后,会自动更新matser 2 改动数据。



其他章节 ->

跳转

end...



版权声明:本文为weixin_45881674原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。