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


    MySQL一主一从点击跳转

    MySQL双主双从原理:

    master 1 为处理写请求;
    master 2 和 两个从机(slave1,slave2)负责读请求;
    当master 1 宕机时,由master 2 负责写请求,两个从机负责读请求;
    master 1 和 master 2 为各自的备机
    
    • 1
    • 2
    • 3
    • 4
    • 首先需要准备 4 台机器,虚拟机克隆可以参考该文章
      • 同时启动 4 台虚拟机后,MyCat 启动可能变慢,log日志会报如下错误
        Startup failed: Timed out waiting for a signal from the JVM.
        
        • 1
        到设置中配置启动超时时间,命令:
        vim conf/wrapper.conf
        
        # 启动超时时间
        wrapper.startup.timeout=120
        
        • 1
        • 2
        • 3
        • 4
        再次启动(启动过程可能较慢,具体可以查看日志),并测试
        mysql -uroot -p -h192.168.171.101 -P8066
        
        • 1
        四台虚拟机信息:
        在这里插入图片描述
    • 配置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
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22


        红框内为 双主双从 配置

      • 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
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22

        在这里插入图片描述
        红框内是与 maser 1 的区别

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

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

        在这里插入图片描述
        重启 4 台mysql,并查看mysql状态,确保启动成功,命令:

        systemctl restart mysqld
        systemctl status mysqld
        
        • 1
        • 2
      • 在从机上配置需要复制的主机
        slave 1 复制 master 1
        slave 2 复制 master 2
        查看主机状态,命令:

        show master status \G
        
        • 1

        查看主机状态后,不要进行sql操作,需保证从机接入点与各自主机一致
        在这里插入图片描述

        复制主机,命令:

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

        在这里插入图片描述
        启动slave,命令:

        start slave;
        
        • 1

        查看两台 slave 状态,命令:

        show slave status \G
        
        • 1

        在这里插入图片描述
        确保都是 Yes,如果不是,查看黄色框内报错原因。
        停止从复制,命令:

        stop slave;
        
        • 1

        重新配置 主,命令:

        reset master;
        
        • 1
      • 配置 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...
    
    • 1
  • 相关阅读:
    【自动化测试】Pytest框架 —— 跳过测试和失败重试
    抽象类和抽象方法
    20231016比赛总结
    ElasticSearch 之 数据类型
    同样是初级测试工程师,为啥他薪资高?会这几点面试必定出彩
    【免费】多种方法手把手教你如何将自己做的网页做成网络链接(直接访问)
    华为NFC设置教程(门禁卡/公交卡/校园卡等)
    跨境电商卖家必知的【圣诞节营销】终极指南(二)
    使用Spring AOP实现系统操作日志记录
    计算机专业的学生需要每天刷题吗?
  • 原文地址:https://blog.csdn.net/weixin_45881674/article/details/126444600