• mysql主从工作原理、搭建


    目录

    一、mysql为什么要用主从架构?

    二、mysql数据库主从复制原理是什么?

    详细的主从复制过程如下图:

    主从复制过程概述:

    三、mysql主从如何搭建?

    本次安装的数据库版本为mysql5.7

    1、准备两台服务器(配置如下)

    2、增加yum源安装mysql

    3、查看安装的mysql

    4、安装mysql

    5、启动mysql并查看状态

    6、查看mysql的临时root密码,并登录修改密码

    7、修改主库mysql_master /etc/my.cnf 的配置文件

    8、修改从库master /etc/my.cnf 的配置文件

    9、重启mysql_master、mysql_slave

    10、登录主库mysql_master,创建主从连接帐号与授权

    11、登录mysql_slave建立主从连接

    12、确认配置并验证

    13、在主库创建库、表、插入数据进行测试。    


    一、mysql为什么要用主从架构?

    1、高可用,实时灾备,用于故障切换。比如主库挂了,可以切从库;
    2、读写分离,提供查询服务,减少主库压力,提升性能;
    3、备份数据,避免影响业务。

    二、mysql数据库主从复制原理是什么?

    详细的主从复制过程如下图:

    主从复制过程概述:

    1、主库的更新SQL(update、insert、delete)被写到binlog;
    2、从库发起连接,连接到主库;
    3、此时主库创建一个binlog dump thread,把bin log的内容发送到从库;
    4、从库启动之后,创建一个I/O线程,读取主库传过来的bin log内容并写入到中继日志relay log;
    5、从库还会创建一个SQL线程,从relay log里面读取内容,从ExecMasterLog_Pos位置开始执行,读取到的更新事件,将更新内容写入到slave的db。

    三、mysql主从如何搭建?

    本次安装的数据库版本为mysql5.7

    主从关系: Mysql_master为主,Mysql_slave为从

    1、准备两台服务器(配置如下)

       mysql_master ip:192.168.40.142
       mysql_slave ip:   192.168.40.143

        镜像:Centos7.9
        虚机配置:4U4G  100G存储
        /boot     800MB
        /swap    4G
        /            95.2G 

        虚拟机安装完成后配置网卡
        [root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 
        TYPE=Ethernet
        BOOTPROTO=dhcp
        DEFROUTE=yes
        NAME=ens33
        DEVICE=ens33
        ONBOOT=yes

        关闭防火墙
        systemctl stop firewalld && systemctl disable  firewalld

        关闭selinux
        sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

        下载并配置163的yum源
        cd /etc/yum.repos.d && mkdir bak && mv CentOS* bak && curl http://mirrors.163.com/.help/CentOS7-Base-163.repo >163.repo

        下载常用工具
        yum clean all && yum makecache && yum install net-tools vim wget  lrzsz  -y

    2、增加yum源安装mysql

       vim /etc/yum.repos.d/163.repo
        在最下方插入如下配置
        [mysql-innovation-community]
        name=MySQL5.7 Release Community Server
        baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/
        enabled=1
        gpgcheck=0

    3、查看安装的mysql

    yum repolist all | grep mysql

    4、安装mysql

     yum -y install mysql-community-server  --nogpgcheck

    5、启动mysql并查看状态


        systemctl start mysqld
        systemctl status mysqld

    6、查看mysql的临时root密码,并登录修改密码


        grep 'temporary password' /var/log/mysqld.log
        mysql -uroot -p
        ALTER USER 'root'@'localhost' IDENTIFIED BY 'Password@123';
        设置mysql_master root密码为Password@123   mysql_slave root密码为Password@1234

    master节点设置

    slave节点设置

    7、修改主库mysql_master /etc/my.cnf 的配置文件

    8、修改从库master /etc/my.cnf 的配置文件

    9、重启mysql_master、mysql_slave

    systemctl restart mysqld

    10、登录主库mysql_master,创建主从连接帐号与授权


    CREATE USER 'slave'@'%' IDENTIFIED BY 'Password@12345';

    grant replication slave ON *.* TO 'slave'@'%';


    flush privileges;

    show master status;       #这里要记住 file和position,后面配置slave会用到

    11、登录mysql_slave建立主从连接

    stop slave;     #关闭slave

    change master to master_host='192.168.40.142', master_user='slave', master_password='Password@12345',master_log_file='mysql-bin.000001',master_log_pos=749;

    start slave;    #开启同步

    12、确认配置并验证

    从库查看
    show slave status \G;
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
    表示主从配置成功。

    show slave status \G;命令输出如下:

    mysql> show slave status \G;
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 192.168.40.142
                      Master_User: slave
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000001
              Read_Master_Log_Pos: 749
                   Relay_Log_File: localhost-relay-bin.000002
                    Relay_Log_Pos: 320
            Relay_Master_Log_File: mysql-bin.000001
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                  Replicate_Do_DB: 
              Replicate_Ignore_DB: 
               Replicate_Do_Table: 
           Replicate_Ignore_Table: 
          Replicate_Wild_Do_Table: 
      Replicate_Wild_Ignore_Table: 
                       Last_Errno: 0
                       Last_Error: 
                     Skip_Counter: 0
              Exec_Master_Log_Pos: 749
                  Relay_Log_Space: 531
                  Until_Condition: None
                   Until_Log_File: 
                    Until_Log_Pos: 0
               Master_SSL_Allowed: No
               Master_SSL_CA_File: 
               Master_SSL_CA_Path: 
                  Master_SSL_Cert: 
                Master_SSL_Cipher: 
                   Master_SSL_Key: 
            Seconds_Behind_Master: 0
    Master_SSL_Verify_Server_Cert: No
                    Last_IO_Errno: 0
                    Last_IO_Error: 
                   Last_SQL_Errno: 0
                   Last_SQL_Error: 
      Replicate_Ignore_Server_Ids: 
                 Master_Server_Id: 1
                      Master_UUID: aa5b3240-696c-11ee-9ab7-000c293bd2c8
                 Master_Info_File: /var/lib/mysql/master.info
                        SQL_Delay: 0
              SQL_Remaining_Delay: NULL
          Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
               Master_Retry_Count: 86400
                      Master_Bind: 
          Last_IO_Error_Timestamp: 
         Last_SQL_Error_Timestamp: 
                   Master_SSL_Crl: 
               Master_SSL_Crlpath: 
               Retrieved_Gtid_Set: 
                Executed_Gtid_Set: 
                    Auto_Position: 0
             Replicate_Rewrite_DB: 
                     Channel_Name: 
               Master_TLS_Version: 
    1 row in set (0.00 sec)

    ERROR: 
    No query specified

    mysql> 

    13、在主库创建库、表、插入数据进行测试。
        

    create database test;

        use test;

        create table emp(
            id int auto_increment comment 'ID' primary key ,
            name varchar(10) not null comment '姓名',
            age int comment '年龄',
            job varchar(20) comment '职位',
            salary int comment '薪资',
            entrydate date comment '入职时间',
            managerid int comment '直属领导id',
            dept_id int  comment '部门id'
        ) CHARSET=utf8 comment '员工表';

        insert into emp (id, name, age, job, salary, entrydate, managerid, dept_id)
        values (1,'金庸',45,'总裁',50000,'2000-10-12',null,5),
               (2,'杨逍',33,'开发',20000,'2005-10-21',1,1),
               (3,'张无忌',30,'项目经理',30000,'2008-11-12',1,1);
      

     从库查询
        use test;
        select * from emp;
        
    验证OK,主从搭建完成。

    百度网盘获取搭建视频及文档:

    链接:https://pan.baidu.com/s/1lqkN8DelnBjYCogoHcmWdg 
    提取码:4xpe

    参考博客:https://blog.csdn.net/qq_39871711/article/details/123494048

  • 相关阅读:
    HTML5网页设计制作基础大二dreamweaver作业、使用HTML+CSS技术制作博客网站(5个页面)
    go-zero/grpc的rpc服务间传递额外数据
    为何 DevOps 会给开发人员带来压力和倦怠?
    sql常用基础语句
    【Java】详解SimpleDateFormat的format方法和parse方法
    SpringBoot中@ConfigurationProperties的使用
    虹科新闻 | 2022年度TOP智能网联创新企业名单新鲜出炉,虹科榜上有名
    字符串函数的详解
    智慧工地云平台,微服务架构,java源码
    守护进程深度分析
  • 原文地址:https://blog.csdn.net/yin_jia_jun/article/details/133803370