当前位置: 首页 > news >正文

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

http://www.lryc.cn/news/192218.html

相关文章:

  • PHP实现赛邮【SUBMAIL】短信通知
  • 完整的电商平台后端API开发总结
  • 游戏中的随机——“动态平衡概率”算法
  • AUTOSAR汽车电子嵌入式编程精讲300篇-基于 FIFO 和优先级序列 CAN 总线系统(续)
  • C# InformativeDrawings 生成素描画
  • 关于网络协议的若干问题(一)
  • 电脑重做系统---win10
  • HTML基础入门02
  • 【C++】如何使用RapidXML读取和创建XML文件
  • 《UnityShader入门精要》学习3
  • 使用Python将MP4视频转换为图像
  • 【Vue Router 3】入门
  • SpringMVC中@RequestMapping注解的详细说明
  • Java - 发送 HTTP 请求的及其简单的方法模块 - hutool
  • Nie et al. 2010 提出的不等式定理
  • chatGLM2-6B模型LoRA微调数据集实现大模型的分类任务
  • Elasticsearch6实践
  • 云原生Kubernetes:K8S集群版本升级(v1.20.6 - v1.20.15)
  • 毅速丨3D打印随形水路模具日常如何保养
  • 尚品甄选2023全新SpringBoot+SpringCloud企业级微服务项目
  • 204、RabbitMQ 之 使用 topic 类型的 Exchange 实现通配符路由
  • qq视频录制教程,让你的视频更加精彩
  • (滑动窗口) 76. 最小覆盖子串 ——【Leetcode每日一题】
  • grep批量筛选指定目录下的所有日志并写入文件内
  • JVM第三讲:JVM 基础-字节码的增强技术详解
  • JWT前后端分离在项目中的应用
  • 系统架构师备考倒计时23天(每日知识点)Redis篇
  • WIN11系统设置重启与睡眠唤醒后自动拨号
  • 【【萌新的SOC学习之AXI-DMA环路测试】】
  • Lua教程